From 27606def35aa2e6da7f0b27b09788493cbed0c27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C5=A0pa=C4=8Dek?= Date: Thu, 19 Dec 2024 03:27:46 +0100 Subject: [PATCH] Update packages - nette/command-line updated from v1.8.1 to v1.8.2 patch See changes: https://github.com/nette/command-line/compare/v1.8.1...v1.8.2 Release notes: https://github.com/nette/command-line/releases/tag/v1.8.2 - nette/database updated from v3.2.4 to v3.2.5 patch See changes: https://github.com/nette/database/compare/v3.2.4...v3.2.5 Release notes: https://github.com/nette/database/releases/tag/v3.2.5 - nette/php-generator updated from v4.1.6 to v4.1.7 patch See changes: https://github.com/nette/php-generator/compare/v4.1.6...v4.1.7 Release notes: https://github.com/nette/php-generator/releases/tag/v4.1.7 - phpstan/phpstan updated from 2.0.2 to 2.0.4 patch See changes: https://github.com/phpstan/phpstan/compare/2.0.2...2.0.4 Release notes: https://github.com/phpstan/phpstan/releases/tag/2.0.4 - phpstan/phpstan-deprecation-rules updated from 2.0.0 to 2.0.1 patch See changes: https://github.com/phpstan/phpstan-deprecation-rules/compare/2.0.0...2.0.1 Release notes: https://github.com/phpstan/phpstan-deprecation-rules/releases/tag/2.0.1 - roave/security-advisories updated from dev-latest@b33a18b to dev-latest@4aa68d3 See changes: https://github.com/Roave/SecurityAdvisories/compare/b33a18b...4aa68d3 - spaze/phpcs-phar updated from 3.11.1 to 3.11.2 patch See changes: https://github.com/spaze/phpcs-phar/compare/3.11.1...3.11.2 Release notes: https://github.com/spaze/phpcs-phar/releases/tag/3.11.2 - symfony/cache updated from v7.1.7 to v7.2.1 minor See changes: https://github.com/symfony/cache/compare/v7.1.7...v7.2.1 Release notes: https://github.com/symfony/cache/releases/tag/v7.2.1 - symfony/cache-contracts updated from v3.5.0 to v3.5.1 patch See changes: https://github.com/symfony/cache-contracts/compare/v3.5.0...v3.5.1 Release notes: https://github.com/symfony/cache-contracts/releases/tag/v3.5.1 - symfony/config updated from v7.1.7 to v7.2.0 minor See changes: https://github.com/symfony/config/compare/v7.1.7...v7.2.0 Release notes: https://github.com/symfony/config/releases/tag/v7.2.0 - symfony/deprecation-contracts updated from v3.5.0 to v3.5.1 patch See changes: https://github.com/symfony/deprecation-contracts/compare/v3.5.0...v3.5.1 Release notes: https://github.com/symfony/deprecation-contracts/releases/tag/v3.5.1 - symfony/filesystem updated from v7.1.6 to v7.2.0 minor See changes: https://github.com/symfony/filesystem/compare/v7.1.6...v7.2.0 Release notes: https://github.com/symfony/filesystem/releases/tag/v7.2.0 - symfony/service-contracts updated from v3.5.0 to v3.5.1 patch See changes: https://github.com/symfony/service-contracts/compare/v3.5.0...v3.5.1 Release notes: https://github.com/symfony/service-contracts/releases/tag/v3.5.1 - symfony/translation updated from v7.1.6 to v7.2.0 minor See changes: https://github.com/symfony/translation/compare/v7.1.6...v7.2.0 Release notes: https://github.com/symfony/translation/releases/tag/v7.2.0 - symfony/translation-contracts updated from v3.5.0 to v3.5.1 patch See changes: https://github.com/symfony/translation-contracts/compare/v3.5.0...v3.5.1 Release notes: https://github.com/symfony/translation-contracts/releases/tag/v3.5.1 - symfony/var-exporter updated from v7.1.6 to v7.2.0 minor See changes: https://github.com/symfony/var-exporter/compare/v7.1.6...v7.2.0 Release notes: https://github.com/symfony/var-exporter/releases/tag/v7.2.0 --- app/composer.lock | 232 +++---- app/vendor/composer/autoload_classmap.php | 5 + app/vendor/composer/autoload_psr4.php | 2 +- app/vendor/composer/autoload_static.php | 9 +- app/vendor/composer/installed.json | 262 ++++---- app/vendor/composer/installed.php | 96 +-- app/vendor/nette/command-line/composer.json | 2 +- app/vendor/nette/command-line/readme.md | 2 +- .../database/src/Database/Connection.php | 62 +- .../database/src/Database/Conventions.php | 3 + .../Conventions/DiscoveredConventions.php | 2 +- .../Conventions/StaticConventions.php | 2 +- .../nette/database/src/Database/Driver.php | 58 +- .../src/Database/Drivers/MsSqlDriver.php | 12 +- .../src/Database/Drivers/MySqlDriver.php | 20 +- .../src/Database/Drivers/OciDriver.php | 12 +- .../src/Database/Drivers/OdbcDriver.php | 12 +- .../src/Database/Drivers/PgSqlDriver.php | 12 +- .../src/Database/Drivers/SqliteDriver.php | 12 +- .../src/Database/Drivers/SqlsrvDriver.php | 12 +- .../nette/database/src/Database/Explorer.php | 32 +- .../nette/database/src/Database/Helpers.php | 22 +- .../database/src/Database/Reflection.php | 7 + .../src/Database/Reflection/Column.php | 2 +- .../src/Database/Reflection/ForeignKey.php | 2 +- .../src/Database/Reflection/Index.php | 2 +- .../src/Database/Reflection/Table.php | 6 +- .../nette/database/src/Database/ResultSet.php | 73 ++- .../nette/database/src/Database/Row.php | 2 +- .../database/src/Database/SqlLiteral.php | 2 +- .../database/src/Database/SqlPreprocessor.php | 7 +- .../nette/database/src/Database/Structure.php | 11 +- .../database/src/Database/Table/ActiveRow.php | 39 +- .../src/Database/Table/GroupedSelection.php | 5 +- .../database/src/Database/Table/Selection.php | 31 +- .../src/Database/Table/SqlBuilder.php | 22 +- .../database/src/Database/exceptions.php | 10 +- app/vendor/nette/php-generator/composer.json | 2 +- app/vendor/nette/php-generator/readme.md | 93 ++- .../src/PhpGenerator/Attribute.php | 2 +- .../src/PhpGenerator/ClassLike.php | 22 +- .../src/PhpGenerator/ClassManipulator.php | 88 ++- .../src/PhpGenerator/ClassType.php | 2 +- .../src/PhpGenerator/Closure.php | 2 +- .../src/PhpGenerator/Constant.php | 5 +- .../src/PhpGenerator/EnumCase.php | 2 +- .../src/PhpGenerator/EnumType.php | 2 +- .../src/PhpGenerator/Extractor.php | 72 ++- .../src/PhpGenerator/Factory.php | 61 +- .../src/PhpGenerator/GlobalFunction.php | 2 +- .../src/PhpGenerator/InterfaceType.php | 20 +- .../php-generator/src/PhpGenerator/Method.php | 4 +- .../src/PhpGenerator/Parameter.php | 2 +- .../src/PhpGenerator/PhpFile.php | 2 +- .../src/PhpGenerator/PhpNamespace.php | 2 +- .../src/PhpGenerator/Printer.php | 94 ++- .../src/PhpGenerator/PromotedParameter.php | 26 +- .../src/PhpGenerator/Property.php | 43 +- .../src/PhpGenerator/PropertyAccessMode.php | 33 + .../src/PhpGenerator/PropertyHook.php | 123 ++++ .../src/PhpGenerator/PropertyHookType.php | 33 + .../src/PhpGenerator/PsrPrinter.php | 2 +- .../src/PhpGenerator/TraitType.php | 2 +- .../src/PhpGenerator/TraitUse.php | 2 +- .../src/PhpGenerator/Traits/PropertyLike.php | 149 +++++ .../PhpGenerator/Traits/VisibilityAware.php | 27 +- .../src/PhpGenerator/Visibility.php | 34 ++ .../phpstan-deprecation-rules/rules.neon | 7 + .../CallWithDeprecatedIniOptionRule.php | 135 +++++ app/vendor/phpstan/phpstan/phpstan.phar | Bin 23505629 -> 23605206 bytes app/vendor/phpstan/phpstan/phpstan.phar.asc | 26 +- app/vendor/spaze/phpcs-phar/composer.json | 4 +- app/vendor/spaze/phpcs-phar/phpcs.phar | Bin 1494223 -> 1496207 bytes app/vendor/spaze/phpcs-phar/phpcs.phar.asc | Bin 595 -> 595 bytes .../symfony/cache/Adapter/AbstractAdapter.php | 6 +- .../cache/Adapter/AbstractTagAwareAdapter.php | 10 +- .../symfony/cache/Adapter/ApcuAdapter.php | 2 +- .../symfony/cache/Adapter/ArrayAdapter.php | 21 +- .../symfony/cache/Adapter/ChainAdapter.php | 4 +- .../cache/Adapter/DoctrineDbalAdapter.php | 4 +- .../cache/Adapter/MemcachedAdapter.php | 2 +- .../cache/Adapter/ParameterNormalizer.php | 2 +- .../symfony/cache/Adapter/PdoAdapter.php | 10 +- .../symfony/cache/Adapter/PhpArrayAdapter.php | 26 +- .../symfony/cache/Adapter/PhpFilesAdapter.php | 14 +- .../symfony/cache/Adapter/ProxyAdapter.php | 2 +- .../cache/Adapter/RedisTagAwareAdapter.php | 6 +- .../symfony/cache/Adapter/TagAwareAdapter.php | 6 +- .../cache/Adapter/TraceableAdapter.php | 9 +- app/vendor/symfony/cache/CHANGELOG.md | 7 + app/vendor/symfony/cache/CacheItem.php | 12 +- .../DependencyInjection/CachePoolPass.php | 4 +- .../CachePoolPrunerPass.php | 2 +- app/vendor/symfony/cache/LockRegistry.php | 2 +- .../cache/Marshaller/DefaultMarshaller.php | 8 +- .../Messenger/EarlyExpirationMessage.php | 14 +- app/vendor/symfony/cache/Psr16Cache.php | 6 +- .../cache/Traits/AbstractAdapterTrait.php | 2 +- .../symfony/cache/Traits/ContractsTrait.php | 2 +- .../cache/Traits/FilesystemCommonTrait.php | 5 +- .../symfony/cache/Traits/FilesystemTrait.php | 2 +- .../symfony/cache/Traits/Redis5Proxy.php | 483 ++++++++------- .../symfony/cache/Traits/Redis6Proxy.php | 499 ++++++++------- .../symfony/cache/Traits/Redis6ProxyTrait.php | 22 +- .../cache/Traits/RedisCluster5Proxy.php | 385 ++++++------ .../cache/Traits/RedisCluster6Proxy.php | 447 +++++++------- .../cache/Traits/RedisCluster6ProxyTrait.php | 8 +- .../symfony/cache/Traits/RedisProxyTrait.php | 51 ++ .../symfony/cache/Traits/RedisTrait.php | 16 +- .../symfony/cache/Traits/Relay/CopyTrait.php | 36 ++ .../cache/Traits/Relay/GeosearchTrait.php | 36 ++ .../cache/Traits/Relay/GetrangeTrait.php | 36 ++ .../symfony/cache/Traits/Relay/HsetTrait.php | 36 ++ .../symfony/cache/Traits/Relay/MoveTrait.php | 46 ++ .../Traits/Relay/NullableReturnTrait.php | 96 +++ .../cache/Traits/Relay/PfcountTrait.php | 36 ++ .../symfony/cache/Traits/RelayProxy.php | 572 ++++++++---------- .../symfony/cache/Traits/RelayProxyTrait.php | 57 +- app/vendor/symfony/cache/composer.json | 1 + .../symfony/config/Builder/ClassBuilder.php | 12 +- .../config/Builder/ConfigBuilderGenerator.php | 18 +- app/vendor/symfony/config/CHANGELOG.md | 11 + app/vendor/symfony/config/ConfigCache.php | 17 +- .../symfony/config/Definition/ArrayNode.php | 20 +- .../symfony/config/Definition/BaseNode.php | 8 +- .../symfony/config/Definition/BooleanNode.php | 15 +- .../Builder/ArrayNodeDefinition.php | 27 +- .../Builder/BooleanNodeDefinition.php | 18 +- .../config/Definition/Builder/ExprBuilder.php | 2 +- .../config/Definition/Builder/NodeBuilder.php | 13 +- .../Builder/NumericNodeDefinition.php | 4 +- .../Builder/StringNodeDefinition.php | 34 ++ .../Definition/Dumper/XmlReferenceDumper.php | 8 +- .../Definition/Dumper/YamlReferenceDumper.php | 15 +- .../symfony/config/Definition/EnumNode.php | 6 +- .../symfony/config/Definition/FloatNode.php | 2 +- .../symfony/config/Definition/IntegerNode.php | 2 +- .../Loader/DefinitionFileLoader.php | 2 +- .../symfony/config/Definition/NumericNode.php | 18 +- .../config/Definition/PrototypedArrayNode.php | 16 +- .../symfony/config/Definition/ScalarNode.php | 2 +- .../symfony/config/Definition/StringNode.php | 40 ++ .../config/Definition/VariableNode.php | 4 +- ...LoaderImportCircularReferenceException.php | 2 +- .../FileLocatorFileNotFoundException.php | 12 +- .../config/Exception/LoaderLoadException.php | 28 +- app/vendor/symfony/config/FileLocator.php | 4 +- .../symfony/config/Loader/FileLoader.php | 9 +- .../Resource/ClassExistenceResource.php | 4 +- .../config/Resource/DirectoryResource.php | 2 +- .../symfony/config/Resource/FileResource.php | 2 +- .../symfony/config/Resource/GlobResource.php | 2 +- .../Resource/ReflectionClassResource.php | 17 +- .../Resource/SkippingResourceChecker.php | 37 ++ .../config/ResourceCheckerConfigCache.php | 16 +- app/vendor/symfony/config/Util/XmlUtils.php | 18 +- .../Exception/FileNotFoundException.php | 2 +- app/vendor/symfony/filesystem/Filesystem.php | 68 +-- app/vendor/symfony/filesystem/Path.php | 8 +- app/vendor/symfony/translation/CHANGELOG.md | 14 + .../Catalogue/AbstractOperation.php | 18 +- .../Command/TranslationLintCommand.php | 129 ++++ .../Command/TranslationPullCommand.php | 28 +- .../Command/TranslationPushCommand.php | 26 +- .../translation/Command/XliffLintCommand.php | 36 +- .../TranslationDataCollector.php | 8 +- .../translation/DataCollectorTranslator.php | 17 +- .../LoggingTranslatorPass.php | 2 +- .../TranslationExtractorPass.php | 2 +- .../symfony/translation/Dumper/FileDumper.php | 2 +- .../translation/Dumper/MoFileDumper.php | 7 +- .../translation/Dumper/PoFileDumper.php | 18 +- .../translation/Dumper/XliffFileDumper.php | 8 +- .../translation/Dumper/YamlFileDumper.php | 8 +- .../Exception/IncompleteDsnException.php | 2 +- .../MissingRequiredOptionException.php | 2 +- .../Exception/ProviderException.php | 10 +- .../Exception/UnsupportedSchemeException.php | 6 +- .../Extractor/AbstractFileExtractor.php | 2 +- .../translation/Extractor/PhpAstExtractor.php | 4 +- .../translation/Formatter/IntlFormatter.php | 4 +- .../translation/Loader/CsvFileLoader.php | 9 +- .../symfony/translation/Loader/FileLoader.php | 6 +- .../translation/Loader/IcuDatFileLoader.php | 6 +- .../translation/Loader/IcuResFileLoader.php | 6 +- .../translation/Loader/QtFileLoader.php | 6 +- .../translation/Loader/XliffFileLoader.php | 17 +- .../translation/Loader/YamlFileLoader.php | 4 +- .../symfony/translation/LoggingTranslator.php | 21 +- .../symfony/translation/MessageCatalogue.php | 16 +- .../Provider/FilteringProvider.php | 14 +- .../TranslationProviderCollection.php | 2 +- .../TranslationProviderCollectionFactory.php | 11 +- .../PseudoLocalizationTranslator.php | 7 +- .../Test/AbstractProviderFactoryTestCase.php | 79 +++ .../Test/IncompleteDsnTestTrait.php | 42 ++ .../Test/ProviderFactoryTestCase.php | 82 +-- .../translation/Test/ProviderTestCase.php | 2 + .../translation/TranslatableMessage.php | 14 +- app/vendor/symfony/translation/Translator.php | 28 +- .../symfony/translation/Util/XliffUtils.php | 6 +- .../translation/Writer/TranslationWriter.php | 4 +- app/vendor/symfony/translation/composer.json | 3 +- app/vendor/symfony/var-exporter/CHANGELOG.md | 5 + .../Exception/ClassNotFoundException.php | 2 +- .../NotInstantiableTypeException.php | 2 +- .../var-exporter/Internal/Exporter.php | 10 +- .../var-exporter/Internal/Hydrator.php | 11 +- .../var-exporter/Internal/LazyObjectState.php | 4 +- .../symfony/var-exporter/LazyGhostTrait.php | 19 +- .../var-exporter/LazyObjectInterface.php | 2 +- .../symfony/var-exporter/LazyProxyTrait.php | 13 +- .../symfony/var-exporter/ProxyHelper.php | 29 +- .../symfony/var-exporter/VarExporter.php | 4 +- 214 files changed, 4153 insertions(+), 2513 deletions(-) create mode 100644 app/vendor/nette/php-generator/src/PhpGenerator/PropertyAccessMode.php create mode 100644 app/vendor/nette/php-generator/src/PhpGenerator/PropertyHook.php create mode 100644 app/vendor/nette/php-generator/src/PhpGenerator/PropertyHookType.php create mode 100644 app/vendor/nette/php-generator/src/PhpGenerator/Traits/PropertyLike.php create mode 100644 app/vendor/nette/php-generator/src/PhpGenerator/Visibility.php create mode 100644 app/vendor/phpstan/phpstan-deprecation-rules/src/Rules/Deprecations/CallWithDeprecatedIniOptionRule.php create mode 100644 app/vendor/symfony/cache/Traits/RedisProxyTrait.php create mode 100644 app/vendor/symfony/cache/Traits/Relay/CopyTrait.php create mode 100644 app/vendor/symfony/cache/Traits/Relay/GeosearchTrait.php create mode 100644 app/vendor/symfony/cache/Traits/Relay/GetrangeTrait.php create mode 100644 app/vendor/symfony/cache/Traits/Relay/HsetTrait.php create mode 100644 app/vendor/symfony/cache/Traits/Relay/MoveTrait.php create mode 100644 app/vendor/symfony/cache/Traits/Relay/NullableReturnTrait.php create mode 100644 app/vendor/symfony/cache/Traits/Relay/PfcountTrait.php create mode 100644 app/vendor/symfony/config/Definition/Builder/StringNodeDefinition.php create mode 100644 app/vendor/symfony/config/Definition/StringNode.php create mode 100644 app/vendor/symfony/config/Resource/SkippingResourceChecker.php create mode 100644 app/vendor/symfony/translation/Command/TranslationLintCommand.php create mode 100644 app/vendor/symfony/translation/Test/AbstractProviderFactoryTestCase.php create mode 100644 app/vendor/symfony/translation/Test/IncompleteDsnTestTrait.php diff --git a/app/composer.lock b/app/composer.lock index 3c220ef1e..6d1436e62 100644 --- a/app/composer.lock +++ b/app/composer.lock @@ -507,20 +507,20 @@ }, { "name": "nette/command-line", - "version": "v1.8.1", + "version": "v1.8.2", "source": { "type": "git", "url": "https://github.com/nette/command-line.git", - "reference": "3e61bcb78faa334b775176b0b977d7d56e75ba91" + "reference": "85a59fc757b4f47b8ee1967f4303722fb7374620" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/command-line/zipball/3e61bcb78faa334b775176b0b977d7d56e75ba91", - "reference": "3e61bcb78faa334b775176b0b977d7d56e75ba91", + "url": "https://api.github.com/repos/nette/command-line/zipball/85a59fc757b4f47b8ee1967f4303722fb7374620", + "reference": "85a59fc757b4f47b8ee1967f4303722fb7374620", "shasum": "" }, "require": { - "php": "8.0 - 8.3" + "php": "8.0 - 8.4" }, "require-dev": { "nette/tester": "^2.5", @@ -563,9 +563,9 @@ ], "support": { "issues": "https://github.com/nette/command-line/issues", - "source": "https://github.com/nette/command-line/tree/v1.8.1" + "source": "https://github.com/nette/command-line/tree/v1.8.2" }, - "time": "2024-03-07T22:32:55+00:00" + "time": "2024-12-15T19:40:45+00:00" }, { "name": "nette/component-model", @@ -631,16 +631,16 @@ }, { "name": "nette/database", - "version": "v3.2.4", + "version": "v3.2.5", "source": { "type": "git", "url": "https://github.com/nette/database.git", - "reference": "8e9a427d98ec0929102ee037016bb47eb7e8b75c" + "reference": "3f9e12a5488615194d1e1d093c982cc07a85be68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/database/zipball/8e9a427d98ec0929102ee037016bb47eb7e8b75c", - "reference": "8e9a427d98ec0929102ee037016bb47eb7e8b75c", + "url": "https://api.github.com/repos/nette/database/zipball/3f9e12a5488615194d1e1d093c982cc07a85be68", + "reference": "3f9e12a5488615194d1e1d093c982cc07a85be68", "shasum": "" }, "require": { @@ -700,9 +700,9 @@ ], "support": { "issues": "https://github.com/nette/database/issues", - "source": "https://github.com/nette/database/tree/v3.2.4" + "source": "https://github.com/nette/database/tree/v3.2.5" }, - "time": "2024-08-28T01:03:21+00:00" + "time": "2024-12-18T19:13:21+00:00" }, { "name": "nette/di", @@ -1076,16 +1076,16 @@ }, { "name": "nette/php-generator", - "version": "v4.1.6", + "version": "v4.1.7", "source": { "type": "git", "url": "https://github.com/nette/php-generator.git", - "reference": "c90961e782ae86e517fe5ed732eb2b512945565b" + "reference": "d201c9bc217e0969d1b678d286be49302972fb56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/php-generator/zipball/c90961e782ae86e517fe5ed732eb2b512945565b", - "reference": "c90961e782ae86e517fe5ed732eb2b512945565b", + "url": "https://api.github.com/repos/nette/php-generator/zipball/d201c9bc217e0969d1b678d286be49302972fb56", + "reference": "d201c9bc217e0969d1b678d286be49302972fb56", "shasum": "" }, "require": { @@ -1129,7 +1129,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.3 features.", + "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.4 features.", "homepage": "https://nette.org", "keywords": [ "code", @@ -1139,9 +1139,9 @@ ], "support": { "issues": "https://github.com/nette/php-generator/issues", - "source": "https://github.com/nette/php-generator/tree/v4.1.6" + "source": "https://github.com/nette/php-generator/tree/v4.1.7" }, - "time": "2024-09-10T09:31:55+00:00" + "time": "2024-11-29T01:41:18+00:00" }, { "name": "nette/robot-loader", @@ -2311,16 +2311,16 @@ }, { "name": "symfony/cache", - "version": "v7.1.7", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "23b61c9592ee72233c31625f0ae805dd1571e928" + "reference": "e7e983596b744c4539f31e79b0350a6cf5878a20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/23b61c9592ee72233c31625f0ae805dd1571e928", - "reference": "23b61c9592ee72233c31625f0ae805dd1571e928", + "url": "https://api.github.com/repos/symfony/cache/zipball/e7e983596b744c4539f31e79b0350a6cf5878a20", + "reference": "e7e983596b744c4539f31e79b0350a6cf5878a20", "shasum": "" }, "require": { @@ -2348,6 +2348,7 @@ "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/filesystem": "^6.4|^7.0", @@ -2388,7 +2389,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.7" + "source": "https://github.com/symfony/cache/tree/v7.2.1" }, "funding": [ { @@ -2404,20 +2405,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2024-12-07T08:08:50+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", "shasum": "" }, "require": { @@ -2464,7 +2465,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" }, "funding": [ { @@ -2480,20 +2481,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/config", - "version": "v7.1.7", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8" + "reference": "bcd3c4adf0144dee5011bb35454728c38adec055" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", - "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", + "url": "https://api.github.com/repos/symfony/config/zipball/bcd3c4adf0144dee5011bb35454728c38adec055", + "reference": "bcd3c4adf0144dee5011bb35454728c38adec055", "shasum": "" }, "require": { @@ -2539,7 +2540,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/v7.1.7" + "source": "https://github.com/symfony/config/tree/v7.2.0" }, "funding": [ { @@ -2555,20 +2556,20 @@ "type": "tidelift" } ], - "time": "2024-11-04T11:34:07+00:00" + "time": "2024-11-04T11:36:24+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -2606,7 +2607,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -2622,20 +2623,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/filesystem", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4" + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/c835867b3c62bb05c7fe3d637c871c7ae52024d4", - "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { @@ -2672,7 +2673,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.1.6" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" }, "funding": [ { @@ -2688,20 +2689,20 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-10-25T15:15:23+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -2755,7 +2756,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -2771,24 +2772,25 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/translation", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "url": "https://api.github.com/repos/symfony/translation/zipball/dc89e16b44048ceecc879054e5b7f38326ab6cc5", + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, @@ -2849,7 +2851,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.6" + "source": "https://github.com/symfony/translation/tree/v7.2.0" }, "funding": [ { @@ -2865,20 +2867,20 @@ "type": "tidelift" } ], - "time": "2024-09-28T12:35:13+00:00" + "time": "2024-11-12T20:47:56+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -2927,7 +2929,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -2943,20 +2945,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/var-exporter", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "90173ef89c40e7c8c616653241048705f84130ef" + "reference": "1a6a89f95a46af0f142874c9d650a6358d13070d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef", - "reference": "90173ef89c40e7c8c616653241048705f84130ef", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1a6a89f95a46af0f142874c9d650a6358d13070d", + "reference": "1a6a89f95a46af0f142874c9d650a6358d13070d", "shasum": "" }, "require": { @@ -3003,7 +3005,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.1.6" + "source": "https://github.com/symfony/var-exporter/tree/v7.2.0" }, "funding": [ { @@ -3019,7 +3021,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-10-18T07:58:17+00:00" }, { "name": "texy/texy", @@ -3446,16 +3448,16 @@ }, { "name": "phpstan/phpstan", - "version": "2.0.2", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "6c98c7600fc717b2c78c11ef60040d5b1e359c82" + "reference": "50d276fc3bf1430ec315f2f109bbde2769821524" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6c98c7600fc717b2c78c11ef60040d5b1e359c82", - "reference": "6c98c7600fc717b2c78c11ef60040d5b1e359c82", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/50d276fc3bf1430ec315f2f109bbde2769821524", + "reference": "50d276fc3bf1430ec315f2f109bbde2769821524", "shasum": "" }, "require": { @@ -3500,20 +3502,20 @@ "type": "github" } ], - "time": "2024-11-17T14:17:00+00:00" + "time": "2024-12-17T17:14:01+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", - "version": "2.0.0", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", - "reference": "81833b5787e2e8f451b31218875e29e4ed600ab2" + "reference": "1cc1259cb91ee4cfbb5c39bca9f635f067c910b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/81833b5787e2e8f451b31218875e29e4ed600ab2", - "reference": "81833b5787e2e8f451b31218875e29e4ed600ab2", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/1cc1259cb91ee4cfbb5c39bca9f635f067c910b4", + "reference": "1cc1259cb91ee4cfbb5c39bca9f635f067c910b4", "shasum": "" }, "require": { @@ -3545,9 +3547,9 @@ "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", "support": { "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", - "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.0" + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.1" }, - "time": "2024-10-26T16:04:11+00:00" + "time": "2024-11-28T21:56:36+00:00" }, { "name": "phpstan/phpstan-nette", @@ -3651,12 +3653,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "b33a18b5d222c63472a4b41f6fa3e15e591c9595" + "reference": "4aa68d3ea343b9576b5fdebef1332f701a7bc994" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/b33a18b5d222c63472a4b41f6fa3e15e591c9595", - "reference": "b33a18b5d222c63472a4b41f6fa3e15e591c9595", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/4aa68d3ea343b9576b5fdebef1332f701a7bc994", + "reference": "4aa68d3ea343b9576b5fdebef1332f701a7bc994", "shasum": "" }, "conflict": { @@ -3766,7 +3768,7 @@ "contao/managed-edition": "<=1.5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", - "craftcms/cms": "<=4.12.6.1|>=5,<=5.4.7.1", + "craftcms/cms": "<4.13.2|>=5,<5.5.2", "croogo/croogo": "<4", "cuyz/valinor": "<0.12", "czim/file-handling": "<1.5|>=2,<2.3", @@ -3797,9 +3799,9 @@ "dolibarr/dolibarr": "<19.0.2", "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", - "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", - "drupal/core-recommended": ">=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", - "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", + "drupal/core": ">=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", + "drupal/core-recommended": ">=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", @@ -3826,6 +3828,7 @@ "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26|>=3.3,<3.3.39", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-http-cache": "<2.3.16", "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev|>=3.3,<3.3.40", @@ -3910,11 +3913,12 @@ "hov/jobfair": "<1.0.13|>=2,<2.0.2", "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", - "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6.0.0-beta1,<4.6.9", + "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.14", "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", "ibexa/fieldtype-richtext": ">=4.6,<4.6.10", "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", - "ibexa/post-install": "<=1.0.4", + "ibexa/http-cache": ">=4.6,<4.6.14", + "ibexa/post-install": "<1.0.16|>=4.6,<4.6.14", "ibexa/solr": ">=4.5,<4.5.4", "ibexa/user": ">=4,<4.4.3", "icecoder/icecoder": "<=8.1", @@ -3978,12 +3982,13 @@ "laravel/fortify": "<1.11.1", "laravel/framework": "<6.20.45|>=7,<7.30.7|>=8,<8.83.28|>=9,<9.52.17|>=10,<10.48.23|>=11,<11.31", "laravel/laravel": ">=5.4,<5.4.22", + "laravel/pulse": "<1.3.1", "laravel/reverb": "<1.4", "laravel/socialite": ">=1,<2.0.10", "latte/latte": "<2.10.8", "lavalite/cms": "<=9|==10.1", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<0.18.3", + "league/commonmark": "<2.6", "league/flysystem": "<1.1.4|>=2,<2.1.1", "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", @@ -4013,6 +4018,7 @@ "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", + "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", "mediawiki/cargo": "<3.6.1", "mediawiki/core": "<1.39.5|==1.40", "mediawiki/matomo": "<2.4.3", @@ -4188,11 +4194,12 @@ "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "samwilson/unlinked-wikibase": "<1.39.6|>=1.40,<1.40.2|>=1.41,<1.41.1", "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", "sfroemken/url_redirect": "<=1.2.1", - "sheng/yiicms": "<=1.2", + "sheng/yiicms": "<1.2.1", "shopware/core": "<=6.5.8.12|>=6.6,<=6.6.5", "shopware/platform": "<=6.5.8.12|>=6.6,<=6.6.5", "shopware/production": "<=6.3.5.2", @@ -4200,6 +4207,7 @@ "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", "shopxo/shopxo": "<=6.1", "showdoc/showdoc": "<2.10.4", + "shuchkin/simplexlsx": ">=1.0.12,<1.1.12", "silverstripe-australia/advancedreports": ">=1,<=2", "silverstripe/admin": "<1.13.19|>=2,<2.1.8", "silverstripe/assets": ">=1,<1.11.1", @@ -4219,11 +4227,13 @@ "silverstripe/userforms": "<3|>=5,<5.4.2", "silverstripe/versioned-admin": ">=1,<1.11.1", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", + "simplesamlphp/saml2": "<4.6.14|==5.0.0.0-alpha12", + "simplesamlphp/saml2-legacy": "<4.6.14", "simplesamlphp/simplesamlphp": "<1.18.6", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-common": "<1.20", "simplesamlphp/xml-security": "==1.6.11", "simplito/elliptic-php": "<1.0.6", "sitegeist/fluid-components": "<3.5", @@ -4235,8 +4245,9 @@ "snipe/snipe-it": "<=7.0.13", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", - "spatie/browsershot": "<3.57.4", + "spatie/browsershot": "<5.0.2", "spatie/image-optimizer": "<1.7.3", + "spencer14420/sp-php-email-handler": "<1", "spipu/html2pdf": "<5.2.8", "spoon/library": "<1.4.1", "spoonity/tcpdf": "<6.2.22", @@ -4307,13 +4318,13 @@ "t3s/content-consent": "<1.0.3|>=2,<2.0.2", "tastyigniter/tastyigniter": "<3.3", "tcg/voyager": "<=1.4", - "tecnickcom/tcpdf": "<=6.7.4", + "tecnickcom/tcpdf": "<=6.7.5", "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<3.2.2", + "thorsten/phpmyfaq": "<4", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", "tinymce/tinymce": "<7.2", @@ -4347,7 +4358,7 @@ "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", "uasoft-indonesia/badaso": "<=2.9.7", - "unisharp/laravel-filemanager": "<2.6.4", + "unisharp/laravel-filemanager": "<2.9.1", "unopim/unopim": "<0.1.5", "userfrosting/userfrosting": ">=0.3.1,<4.6.3", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", @@ -4379,6 +4390,7 @@ "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", "winter/wn-backend-module": "<1.2.4", + "winter/wn-cms-module": "<1.0.476|>=1.1,<1.1.11|>=1.2,<1.2.7", "winter/wn-dusk-plugin": "<2.1", "winter/wn-system-module": "<1.2.4", "wintercms/winter": "<=1.2.3", @@ -4485,7 +4497,7 @@ "type": "tidelift" } ], - "time": "2024-11-19T21:04:39+00:00" + "time": "2024-12-18T20:05:40+00:00" }, { "name": "shipmonk/composer-dependency-analyser", @@ -4668,16 +4680,16 @@ }, { "name": "spaze/phpcs-phar", - "version": "3.11.1", + "version": "3.11.2", "source": { "type": "git", "url": "https://github.com/spaze/phpcs-phar.git", - "reference": "b3ced1b725e7463914dcc9e0a641d4bb2dc94f4e" + "reference": "b1deb9736970e23f0477ef128b6f96560f247467" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spaze/phpcs-phar/zipball/b3ced1b725e7463914dcc9e0a641d4bb2dc94f4e", - "reference": "b3ced1b725e7463914dcc9e0a641d4bb2dc94f4e", + "url": "https://api.github.com/repos/spaze/phpcs-phar/zipball/b1deb9736970e23f0477ef128b6f96560f247467", + "reference": "b1deb9736970e23f0477ef128b6f96560f247467", "shasum": "" }, "require": { @@ -4685,8 +4697,8 @@ }, "replace": { "dealerdirect/phpcodesniffer-composer-installer": "*", - "phpcsstandards/php_codesniffer": "3.11.1", - "squizlabs/php_codesniffer": "3.11.1" + "phpcsstandards/php_codesniffer": "3.11.2", + "squizlabs/php_codesniffer": "3.11.2" }, "require-dev": { "php-parallel-lint/php-console-highlighter": "^1.0", @@ -4719,9 +4731,9 @@ ], "support": { "issues": "https://github.com/spaze/phpcs-phar/issues", - "source": "https://github.com/spaze/phpcs-phar/tree/3.11.1" + "source": "https://github.com/spaze/phpcs-phar/tree/3.11.2" }, - "time": "2024-11-16T14:22:08+00:00" + "time": "2024-12-11T18:24:38+00:00" }, { "name": "spaze/phpstan-disallowed-calls", diff --git a/app/vendor/composer/autoload_classmap.php b/app/vendor/composer/autoload_classmap.php index af483c74f..f1408907a 100644 --- a/app/vendor/composer/autoload_classmap.php +++ b/app/vendor/composer/autoload_classmap.php @@ -566,6 +566,9 @@ 'Nette\\PhpGenerator\\Printer' => $vendorDir . '/nette/php-generator/src/PhpGenerator/Printer.php', 'Nette\\PhpGenerator\\PromotedParameter' => $vendorDir . '/nette/php-generator/src/PhpGenerator/PromotedParameter.php', 'Nette\\PhpGenerator\\Property' => $vendorDir . '/nette/php-generator/src/PhpGenerator/Property.php', + 'Nette\\PhpGenerator\\PropertyAccessMode' => $vendorDir . '/nette/php-generator/src/PhpGenerator/PropertyAccessMode.php', + 'Nette\\PhpGenerator\\PropertyHook' => $vendorDir . '/nette/php-generator/src/PhpGenerator/PropertyHook.php', + 'Nette\\PhpGenerator\\PropertyHookType' => $vendorDir . '/nette/php-generator/src/PhpGenerator/PropertyHookType.php', 'Nette\\PhpGenerator\\PsrPrinter' => $vendorDir . '/nette/php-generator/src/PhpGenerator/PsrPrinter.php', 'Nette\\PhpGenerator\\TraitType' => $vendorDir . '/nette/php-generator/src/PhpGenerator/TraitType.php', 'Nette\\PhpGenerator\\TraitUse' => $vendorDir . '/nette/php-generator/src/PhpGenerator/TraitUse.php', @@ -576,9 +579,11 @@ 'Nette\\PhpGenerator\\Traits\\MethodsAware' => $vendorDir . '/nette/php-generator/src/PhpGenerator/Traits/MethodsAware.php', 'Nette\\PhpGenerator\\Traits\\NameAware' => $vendorDir . '/nette/php-generator/src/PhpGenerator/Traits/NameAware.php', 'Nette\\PhpGenerator\\Traits\\PropertiesAware' => $vendorDir . '/nette/php-generator/src/PhpGenerator/Traits/PropertiesAware.php', + 'Nette\\PhpGenerator\\Traits\\PropertyLike' => $vendorDir . '/nette/php-generator/src/PhpGenerator/Traits/PropertyLike.php', 'Nette\\PhpGenerator\\Traits\\TraitsAware' => $vendorDir . '/nette/php-generator/src/PhpGenerator/Traits/TraitsAware.php', 'Nette\\PhpGenerator\\Traits\\VisibilityAware' => $vendorDir . '/nette/php-generator/src/PhpGenerator/Traits/VisibilityAware.php', 'Nette\\PhpGenerator\\Type' => $vendorDir . '/nette/php-generator/src/PhpGenerator/Type.php', + 'Nette\\PhpGenerator\\Visibility' => $vendorDir . '/nette/php-generator/src/PhpGenerator/Visibility.php', 'Nette\\Routing\\Route' => $vendorDir . '/nette/routing/src/Routing/Route.php', 'Nette\\Routing\\RouteList' => $vendorDir . '/nette/routing/src/Routing/RouteList.php', 'Nette\\Routing\\Router' => $vendorDir . '/nette/routing/src/Routing/Router.php', diff --git a/app/vendor/composer/autoload_psr4.php b/app/vendor/composer/autoload_psr4.php index 2fc07b938..e332b3b56 100644 --- a/app/vendor/composer/autoload_psr4.php +++ b/app/vendor/composer/autoload_psr4.php @@ -35,7 +35,7 @@ 'PHP_Parallel_Lint\\PhpConsoleHighlighter\\' => array($vendorDir . '/php-parallel-lint/php-console-highlighter/src'), 'PHP_Parallel_Lint\\PhpConsoleColor\\' => array($vendorDir . '/php-parallel-lint/php-console-color/src'), 'PHPStan\\PhpDocParser\\' => array($vendorDir . '/phpstan/phpdoc-parser/src'), - 'PHPStan\\' => array($vendorDir . '/phpstan/phpstan-deprecation-rules/src', $vendorDir . '/phpstan/phpstan-nette/src'), + 'PHPStan\\' => array($vendorDir . '/phpstan/phpstan-nette/src', $vendorDir . '/phpstan/phpstan-deprecation-rules/src'), 'MichalSpacekCz\\' => array($baseDir . '/src'), 'JetBrains\\PhpStorm\\' => array($vendorDir . '/jetbrains/phpstorm-attributes/src'), 'Contributte\\Translation\\' => array($vendorDir . '/contributte/translation/src'), diff --git a/app/vendor/composer/autoload_static.php b/app/vendor/composer/autoload_static.php index ba5739dfa..e53834461 100644 --- a/app/vendor/composer/autoload_static.php +++ b/app/vendor/composer/autoload_static.php @@ -184,8 +184,8 @@ class ComposerStaticInit247de957f14f643f393d210a332dd05b ), 'PHPStan\\' => array ( - 0 => __DIR__ . '/..' . '/phpstan/phpstan-deprecation-rules/src', - 1 => __DIR__ . '/..' . '/phpstan/phpstan-nette/src', + 0 => __DIR__ . '/..' . '/phpstan/phpstan-nette/src', + 1 => __DIR__ . '/..' . '/phpstan/phpstan-deprecation-rules/src', ), 'MichalSpacekCz\\' => array ( @@ -766,6 +766,9 @@ class ComposerStaticInit247de957f14f643f393d210a332dd05b 'Nette\\PhpGenerator\\Printer' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/Printer.php', 'Nette\\PhpGenerator\\PromotedParameter' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/PromotedParameter.php', 'Nette\\PhpGenerator\\Property' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/Property.php', + 'Nette\\PhpGenerator\\PropertyAccessMode' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/PropertyAccessMode.php', + 'Nette\\PhpGenerator\\PropertyHook' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/PropertyHook.php', + 'Nette\\PhpGenerator\\PropertyHookType' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/PropertyHookType.php', 'Nette\\PhpGenerator\\PsrPrinter' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/PsrPrinter.php', 'Nette\\PhpGenerator\\TraitType' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/TraitType.php', 'Nette\\PhpGenerator\\TraitUse' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/TraitUse.php', @@ -776,9 +779,11 @@ class ComposerStaticInit247de957f14f643f393d210a332dd05b 'Nette\\PhpGenerator\\Traits\\MethodsAware' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/Traits/MethodsAware.php', 'Nette\\PhpGenerator\\Traits\\NameAware' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/Traits/NameAware.php', 'Nette\\PhpGenerator\\Traits\\PropertiesAware' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/Traits/PropertiesAware.php', + 'Nette\\PhpGenerator\\Traits\\PropertyLike' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/Traits/PropertyLike.php', 'Nette\\PhpGenerator\\Traits\\TraitsAware' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/Traits/TraitsAware.php', 'Nette\\PhpGenerator\\Traits\\VisibilityAware' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/Traits/VisibilityAware.php', 'Nette\\PhpGenerator\\Type' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/Type.php', + 'Nette\\PhpGenerator\\Visibility' => __DIR__ . '/..' . '/nette/php-generator/src/PhpGenerator/Visibility.php', 'Nette\\Routing\\Route' => __DIR__ . '/..' . '/nette/routing/src/Routing/Route.php', 'Nette\\Routing\\RouteList' => __DIR__ . '/..' . '/nette/routing/src/Routing/RouteList.php', 'Nette\\Routing\\Router' => __DIR__ . '/..' . '/nette/routing/src/Routing/Router.php', diff --git a/app/vendor/composer/installed.json b/app/vendor/composer/installed.json index 08f49694c..b611a4333 100644 --- a/app/vendor/composer/installed.json +++ b/app/vendor/composer/installed.json @@ -564,28 +564,28 @@ }, { "name": "nette/command-line", - "version": "v1.8.1", - "version_normalized": "1.8.1.0", + "version": "v1.8.2", + "version_normalized": "1.8.2.0", "source": { "type": "git", "url": "https://github.com/nette/command-line.git", - "reference": "3e61bcb78faa334b775176b0b977d7d56e75ba91" + "reference": "85a59fc757b4f47b8ee1967f4303722fb7374620" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/command-line/zipball/3e61bcb78faa334b775176b0b977d7d56e75ba91", - "reference": "3e61bcb78faa334b775176b0b977d7d56e75ba91", + "url": "https://api.github.com/repos/nette/command-line/zipball/85a59fc757b4f47b8ee1967f4303722fb7374620", + "reference": "85a59fc757b4f47b8ee1967f4303722fb7374620", "shasum": "" }, "require": { - "php": "8.0 - 8.3" + "php": "8.0 - 8.4" }, "require-dev": { "nette/tester": "^2.5", "phpstan/phpstan": "^1", "tracy/tracy": "^2.9" }, - "time": "2024-03-07T22:32:55+00:00", + "time": "2024-12-15T19:40:45+00:00", "type": "library", "extra": { "branch-alias": { @@ -623,7 +623,7 @@ ], "support": { "issues": "https://github.com/nette/command-line/issues", - "source": "https://github.com/nette/command-line/tree/v1.8.1" + "source": "https://github.com/nette/command-line/tree/v1.8.2" }, "install-path": "../nette/command-line" }, @@ -694,17 +694,17 @@ }, { "name": "nette/database", - "version": "v3.2.4", - "version_normalized": "3.2.4.0", + "version": "v3.2.5", + "version_normalized": "3.2.5.0", "source": { "type": "git", "url": "https://github.com/nette/database.git", - "reference": "8e9a427d98ec0929102ee037016bb47eb7e8b75c" + "reference": "3f9e12a5488615194d1e1d093c982cc07a85be68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/database/zipball/8e9a427d98ec0929102ee037016bb47eb7e8b75c", - "reference": "8e9a427d98ec0929102ee037016bb47eb7e8b75c", + "url": "https://api.github.com/repos/nette/database/zipball/3f9e12a5488615194d1e1d093c982cc07a85be68", + "reference": "3f9e12a5488615194d1e1d093c982cc07a85be68", "shasum": "" }, "require": { @@ -721,7 +721,7 @@ "phpstan/phpstan-nette": "^1.0", "tracy/tracy": "^2.9" }, - "time": "2024-08-28T01:03:21+00:00", + "time": "2024-12-18T19:13:21+00:00", "type": "library", "extra": { "branch-alias": { @@ -766,7 +766,7 @@ ], "support": { "issues": "https://github.com/nette/database/issues", - "source": "https://github.com/nette/database/tree/v3.2.4" + "source": "https://github.com/nette/database/tree/v3.2.5" }, "install-path": "../nette/database" }, @@ -1157,17 +1157,17 @@ }, { "name": "nette/php-generator", - "version": "v4.1.6", - "version_normalized": "4.1.6.0", + "version": "v4.1.7", + "version_normalized": "4.1.7.0", "source": { "type": "git", "url": "https://github.com/nette/php-generator.git", - "reference": "c90961e782ae86e517fe5ed732eb2b512945565b" + "reference": "d201c9bc217e0969d1b678d286be49302972fb56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/php-generator/zipball/c90961e782ae86e517fe5ed732eb2b512945565b", - "reference": "c90961e782ae86e517fe5ed732eb2b512945565b", + "url": "https://api.github.com/repos/nette/php-generator/zipball/d201c9bc217e0969d1b678d286be49302972fb56", + "reference": "d201c9bc217e0969d1b678d286be49302972fb56", "shasum": "" }, "require": { @@ -1184,7 +1184,7 @@ "suggest": { "nikic/php-parser": "to use ClassType::from(withBodies: true) & ClassType::fromCode()" }, - "time": "2024-09-10T09:31:55+00:00", + "time": "2024-11-29T01:41:18+00:00", "type": "library", "extra": { "branch-alias": { @@ -1213,7 +1213,7 @@ "homepage": "https://nette.org/contributors" } ], - "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.3 features.", + "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.4 features.", "homepage": "https://nette.org", "keywords": [ "code", @@ -1223,7 +1223,7 @@ ], "support": { "issues": "https://github.com/nette/php-generator/issues", - "source": "https://github.com/nette/php-generator/tree/v4.1.6" + "source": "https://github.com/nette/php-generator/tree/v4.1.7" }, "install-path": "../nette/php-generator" }, @@ -2089,17 +2089,17 @@ }, { "name": "phpstan/phpstan", - "version": "2.0.2", - "version_normalized": "2.0.2.0", + "version": "2.0.4", + "version_normalized": "2.0.4.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "6c98c7600fc717b2c78c11ef60040d5b1e359c82" + "reference": "50d276fc3bf1430ec315f2f109bbde2769821524" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6c98c7600fc717b2c78c11ef60040d5b1e359c82", - "reference": "6c98c7600fc717b2c78c11ef60040d5b1e359c82", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/50d276fc3bf1430ec315f2f109bbde2769821524", + "reference": "50d276fc3bf1430ec315f2f109bbde2769821524", "shasum": "" }, "require": { @@ -2108,7 +2108,7 @@ "conflict": { "phpstan/phpstan-shim": "*" }, - "time": "2024-11-17T14:17:00+00:00", + "time": "2024-12-17T17:14:01+00:00", "bin": [ "phpstan", "phpstan.phar" @@ -2150,17 +2150,17 @@ }, { "name": "phpstan/phpstan-deprecation-rules", - "version": "2.0.0", - "version_normalized": "2.0.0.0", + "version": "2.0.1", + "version_normalized": "2.0.1.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", - "reference": "81833b5787e2e8f451b31218875e29e4ed600ab2" + "reference": "1cc1259cb91ee4cfbb5c39bca9f635f067c910b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/81833b5787e2e8f451b31218875e29e4ed600ab2", - "reference": "81833b5787e2e8f451b31218875e29e4ed600ab2", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/1cc1259cb91ee4cfbb5c39bca9f635f067c910b4", + "reference": "1cc1259cb91ee4cfbb5c39bca9f635f067c910b4", "shasum": "" }, "require": { @@ -2172,7 +2172,7 @@ "phpstan/phpstan-phpunit": "^2.0", "phpunit/phpunit": "^9.6" }, - "time": "2024-10-26T16:04:11+00:00", + "time": "2024-11-28T21:56:36+00:00", "type": "phpstan-extension", "extra": { "phpstan": { @@ -2194,7 +2194,7 @@ "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", "support": { "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", - "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.0" + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.1" }, "install-path": "../phpstan/phpstan-deprecation-rules" }, @@ -2468,12 +2468,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "b33a18b5d222c63472a4b41f6fa3e15e591c9595" + "reference": "4aa68d3ea343b9576b5fdebef1332f701a7bc994" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/b33a18b5d222c63472a4b41f6fa3e15e591c9595", - "reference": "b33a18b5d222c63472a4b41f6fa3e15e591c9595", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/4aa68d3ea343b9576b5fdebef1332f701a7bc994", + "reference": "4aa68d3ea343b9576b5fdebef1332f701a7bc994", "shasum": "" }, "conflict": { @@ -2583,7 +2583,7 @@ "contao/managed-edition": "<=1.5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", - "craftcms/cms": "<=4.12.6.1|>=5,<=5.4.7.1", + "craftcms/cms": "<4.13.2|>=5,<5.5.2", "croogo/croogo": "<4", "cuyz/valinor": "<0.12", "czim/file-handling": "<1.5|>=2,<2.3", @@ -2614,9 +2614,9 @@ "dolibarr/dolibarr": "<19.0.2", "dompdf/dompdf": "<2.0.4", "doublethreedigital/guest-entries": "<3.1.2", - "drupal/core": ">=6,<6.38|>=7,<7.96|>=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", - "drupal/core-recommended": ">=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", - "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.80|>=8,<10.2.9|>=10.3,<10.3.6|>=11,<11.0.5", + "drupal/core": ">=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", + "drupal/core-recommended": ">=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", + "drupal/drupal": ">=5,<5.11|>=6,<6.38|>=7,<7.102|>=8,<10.2.11|>=10.3,<10.3.9|>=11,<11.0.8", "duncanmcclean/guest-entries": "<3.1.2", "dweeves/magmi": "<=0.7.24", "ec-cube/ec-cube": "<2.4.4|>=2.11,<=2.17.1|>=3,<=3.0.18.0-patch4|>=4,<=4.1.2", @@ -2643,6 +2643,7 @@ "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26|>=3.3,<3.3.39", "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", "ezsystems/ezplatform-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-http-cache": "<2.3.16", "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=1.3,<1.3.35", "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1-dev|>=3.3,<3.3.40", @@ -2727,11 +2728,12 @@ "hov/jobfair": "<1.0.13|>=2,<2.0.2", "httpsoft/http-message": "<1.0.12", "hyn/multi-tenant": ">=5.6,<5.7.2", - "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6.0.0-beta1,<4.6.9", + "ibexa/admin-ui": ">=4.2,<4.2.3|>=4.6,<4.6.14", "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3|>=4.5,<4.5.6|>=4.6,<4.6.2", "ibexa/fieldtype-richtext": ">=4.6,<4.6.10", "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", - "ibexa/post-install": "<=1.0.4", + "ibexa/http-cache": ">=4.6,<4.6.14", + "ibexa/post-install": "<1.0.16|>=4.6,<4.6.14", "ibexa/solr": ">=4.5,<4.5.4", "ibexa/user": ">=4,<4.4.3", "icecoder/icecoder": "<=8.1", @@ -2795,12 +2797,13 @@ "laravel/fortify": "<1.11.1", "laravel/framework": "<6.20.45|>=7,<7.30.7|>=8,<8.83.28|>=9,<9.52.17|>=10,<10.48.23|>=11,<11.31", "laravel/laravel": ">=5.4,<5.4.22", + "laravel/pulse": "<1.3.1", "laravel/reverb": "<1.4", "laravel/socialite": ">=1,<2.0.10", "latte/latte": "<2.10.8", "lavalite/cms": "<=9|==10.1", "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<0.18.3", + "league/commonmark": "<2.6", "league/flysystem": "<1.1.4|>=2,<2.1.1", "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", @@ -2830,6 +2833,7 @@ "mautic/core-lib": ">=1.0.0.0-beta,<4.4.13|>=5.0.0.0-alpha,<5.1.1", "maximebf/debugbar": "<1.19", "mdanter/ecc": "<2", + "mediawiki/abuse-filter": "<1.39.9|>=1.40,<1.41.3|>=1.42,<1.42.2", "mediawiki/cargo": "<3.6.1", "mediawiki/core": "<1.39.5|==1.40", "mediawiki/matomo": "<2.4.3", @@ -3005,11 +3009,12 @@ "s-cart/s-cart": "<6.9", "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", "sabre/dav": ">=1.6,<1.7.11|>=1.8,<1.8.9", + "samwilson/unlinked-wikibase": "<1.39.6|>=1.40,<1.40.2|>=1.41,<1.41.1", "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", "sfroemken/url_redirect": "<=1.2.1", - "sheng/yiicms": "<=1.2", + "sheng/yiicms": "<1.2.1", "shopware/core": "<=6.5.8.12|>=6.6,<=6.6.5", "shopware/platform": "<=6.5.8.12|>=6.6,<=6.6.5", "shopware/production": "<=6.3.5.2", @@ -3017,6 +3022,7 @@ "shopware/storefront": "<=6.4.8.1|>=6.5.8,<6.5.8.7-dev", "shopxo/shopxo": "<=6.1", "showdoc/showdoc": "<2.10.4", + "shuchkin/simplexlsx": ">=1.0.12,<1.1.12", "silverstripe-australia/advancedreports": ">=1,<=2", "silverstripe/admin": "<1.13.19|>=2,<2.1.8", "silverstripe/assets": ">=1,<1.11.1", @@ -3036,11 +3042,13 @@ "silverstripe/userforms": "<3|>=5,<5.4.2", "silverstripe/versioned-admin": ">=1,<1.11.1", "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4|==5.0.0.0-alpha12", + "simplesamlphp/saml2": "<4.6.14|==5.0.0.0-alpha12", + "simplesamlphp/saml2-legacy": "<4.6.14", "simplesamlphp/simplesamlphp": "<1.18.6", "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", "simplesamlphp/simplesamlphp-module-openid": "<1", "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplesamlphp/xml-common": "<1.20", "simplesamlphp/xml-security": "==1.6.11", "simplito/elliptic-php": "<1.0.6", "sitegeist/fluid-components": "<3.5", @@ -3052,8 +3060,9 @@ "snipe/snipe-it": "<=7.0.13", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", - "spatie/browsershot": "<3.57.4", + "spatie/browsershot": "<5.0.2", "spatie/image-optimizer": "<1.7.3", + "spencer14420/sp-php-email-handler": "<1", "spipu/html2pdf": "<5.2.8", "spoon/library": "<1.4.1", "spoonity/tcpdf": "<6.2.22", @@ -3124,13 +3133,13 @@ "t3s/content-consent": "<1.0.3|>=2,<2.0.2", "tastyigniter/tastyigniter": "<3.3", "tcg/voyager": "<=1.4", - "tecnickcom/tcpdf": "<=6.7.4", + "tecnickcom/tcpdf": "<=6.7.5", "terminal42/contao-tablelookupwizard": "<3.3.5", "thelia/backoffice-default-template": ">=2.1,<2.1.2", "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<6.0.8", - "thorsten/phpmyfaq": "<3.2.2", + "thorsten/phpmyfaq": "<4", "tikiwiki/tiki-manager": "<=17.1", "timber/timber": ">=0.16.6,<1.23.1|>=1.24,<1.24.1|>=2,<2.1", "tinymce/tinymce": "<7.2", @@ -3164,7 +3173,7 @@ "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", "ua-parser/uap-php": "<3.8", "uasoft-indonesia/badaso": "<=2.9.7", - "unisharp/laravel-filemanager": "<2.6.4", + "unisharp/laravel-filemanager": "<2.9.1", "unopim/unopim": "<0.1.5", "userfrosting/userfrosting": ">=0.3.1,<4.6.3", "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", @@ -3196,6 +3205,7 @@ "wikimedia/parsoid": "<0.12.2", "willdurand/js-translation-bundle": "<2.1.1", "winter/wn-backend-module": "<1.2.4", + "winter/wn-cms-module": "<1.0.476|>=1.1,<1.1.11|>=1.2,<1.2.7", "winter/wn-dusk-plugin": "<2.1", "winter/wn-system-module": "<1.2.4", "wintercms/winter": "<=1.2.3", @@ -3266,7 +3276,7 @@ "zfr/zfr-oauth2-server-module": "<0.1.2", "zoujingli/thinkadmin": "<=6.1.53" }, - "time": "2024-11-19T21:04:39+00:00", + "time": "2024-12-18T20:05:40+00:00", "default-branch": true, "type": "metapackage", "notification-url": "https://packagist.org/downloads/", @@ -3779,17 +3789,17 @@ }, { "name": "spaze/phpcs-phar", - "version": "3.11.1", - "version_normalized": "3.11.1.0", + "version": "3.11.2", + "version_normalized": "3.11.2.0", "source": { "type": "git", "url": "https://github.com/spaze/phpcs-phar.git", - "reference": "b3ced1b725e7463914dcc9e0a641d4bb2dc94f4e" + "reference": "b1deb9736970e23f0477ef128b6f96560f247467" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spaze/phpcs-phar/zipball/b3ced1b725e7463914dcc9e0a641d4bb2dc94f4e", - "reference": "b3ced1b725e7463914dcc9e0a641d4bb2dc94f4e", + "url": "https://api.github.com/repos/spaze/phpcs-phar/zipball/b1deb9736970e23f0477ef128b6f96560f247467", + "reference": "b1deb9736970e23f0477ef128b6f96560f247467", "shasum": "" }, "require": { @@ -3797,14 +3807,14 @@ }, "replace": { "dealerdirect/phpcodesniffer-composer-installer": "*", - "phpcsstandards/php_codesniffer": "3.11.1", - "squizlabs/php_codesniffer": "3.11.1" + "phpcsstandards/php_codesniffer": "3.11.2", + "squizlabs/php_codesniffer": "3.11.2" }, "require-dev": { "php-parallel-lint/php-console-highlighter": "^1.0", "php-parallel-lint/php-parallel-lint": "^1.4" }, - "time": "2024-11-16T14:22:08+00:00", + "time": "2024-12-11T18:24:38+00:00", "bin": [ "phpcbf", "phpcs" @@ -3833,7 +3843,7 @@ ], "support": { "issues": "https://github.com/spaze/phpcs-phar/issues", - "source": "https://github.com/spaze/phpcs-phar/tree/3.11.1" + "source": "https://github.com/spaze/phpcs-phar/tree/3.11.2" }, "install-path": "../spaze/phpcs-phar" }, @@ -4120,17 +4130,17 @@ }, { "name": "symfony/cache", - "version": "v7.1.7", - "version_normalized": "7.1.7.0", + "version": "v7.2.1", + "version_normalized": "7.2.1.0", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "23b61c9592ee72233c31625f0ae805dd1571e928" + "reference": "e7e983596b744c4539f31e79b0350a6cf5878a20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/23b61c9592ee72233c31625f0ae805dd1571e928", - "reference": "23b61c9592ee72233c31625f0ae805dd1571e928", + "url": "https://api.github.com/repos/symfony/cache/zipball/e7e983596b744c4539f31e79b0350a6cf5878a20", + "reference": "e7e983596b744c4539f31e79b0350a6cf5878a20", "shasum": "" }, "require": { @@ -4158,6 +4168,7 @@ "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/filesystem": "^6.4|^7.0", @@ -4165,7 +4176,7 @@ "symfony/messenger": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0" }, - "time": "2024-11-05T15:34:55+00:00", + "time": "2024-12-07T08:08:50+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4200,7 +4211,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.7" + "source": "https://github.com/symfony/cache/tree/v7.2.1" }, "funding": [ { @@ -4220,24 +4231,24 @@ }, { "name": "symfony/cache-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", + "version": "v3.5.1", + "version_normalized": "3.5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", "shasum": "" }, "require": { "php": ">=8.1", "psr/cache": "^3.0" }, - "time": "2024-04-18T09:32:20+00:00", + "time": "2024-09-25T14:20:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -4279,7 +4290,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" }, "funding": [ { @@ -4299,17 +4310,17 @@ }, { "name": "symfony/config", - "version": "v7.1.7", - "version_normalized": "7.1.7.0", + "version": "v7.2.0", + "version_normalized": "7.2.0.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8" + "reference": "bcd3c4adf0144dee5011bb35454728c38adec055" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", - "reference": "dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8", + "url": "https://api.github.com/repos/symfony/config/zipball/bcd3c4adf0144dee5011bb35454728c38adec055", + "reference": "bcd3c4adf0144dee5011bb35454728c38adec055", "shasum": "" }, "require": { @@ -4329,7 +4340,7 @@ "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^6.4|^7.0" }, - "time": "2024-11-04T11:34:07+00:00", + "time": "2024-11-04T11:36:24+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4357,7 +4368,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/v7.1.7" + "source": "https://github.com/symfony/config/tree/v7.2.0" }, "funding": [ { @@ -4377,23 +4388,23 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", + "version": "v3.5.1", + "version_normalized": "3.5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { "php": ">=8.1" }, - "time": "2024-04-18T09:32:20+00:00", + "time": "2024-09-25T14:20:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -4427,7 +4438,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -4447,17 +4458,17 @@ }, { "name": "symfony/filesystem", - "version": "v7.1.6", - "version_normalized": "7.1.6.0", + "version": "v7.2.0", + "version_normalized": "7.2.0.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4" + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/c835867b3c62bb05c7fe3d637c871c7ae52024d4", - "reference": "c835867b3c62bb05c7fe3d637c871c7ae52024d4", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b8dce482de9d7c9fe2891155035a7248ab5c7fdb", + "reference": "b8dce482de9d7c9fe2891155035a7248ab5c7fdb", "shasum": "" }, "require": { @@ -4468,7 +4479,7 @@ "require-dev": { "symfony/process": "^6.4|^7.0" }, - "time": "2024-10-25T15:11:02+00:00", + "time": "2024-10-25T15:15:23+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4496,7 +4507,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.1.6" + "source": "https://github.com/symfony/filesystem/tree/v7.2.0" }, "funding": [ { @@ -4516,17 +4527,17 @@ }, { "name": "symfony/service-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", + "version": "v3.5.1", + "version_normalized": "3.5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -4537,7 +4548,7 @@ "conflict": { "ext-psr": "<1.1|>=2" }, - "time": "2024-04-18T09:32:20+00:00", + "time": "2024-09-25T14:20:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -4582,7 +4593,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -4602,21 +4613,22 @@ }, { "name": "symfony/translation", - "version": "v7.1.6", - "version_normalized": "7.1.6.0", + "version": "v7.2.0", + "version_normalized": "7.2.0.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "url": "https://api.github.com/repos/symfony/translation/zipball/dc89e16b44048ceecc879054e5b7f38326ab6cc5", + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, @@ -4648,7 +4660,7 @@ "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^6.4|^7.0" }, - "time": "2024-09-28T12:35:13+00:00", + "time": "2024-11-12T20:47:56+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4679,7 +4691,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.6" + "source": "https://github.com/symfony/translation/tree/v7.2.0" }, "funding": [ { @@ -4699,23 +4711,23 @@ }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", + "version": "v3.5.1", + "version_normalized": "3.5.1.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { "php": ">=8.1" }, - "time": "2024-04-18T09:32:20+00:00", + "time": "2024-09-25T14:20:29+00:00", "type": "library", "extra": { "branch-alias": { @@ -4760,7 +4772,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -4780,17 +4792,17 @@ }, { "name": "symfony/var-exporter", - "version": "v7.1.6", - "version_normalized": "7.1.6.0", + "version": "v7.2.0", + "version_normalized": "7.2.0.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "90173ef89c40e7c8c616653241048705f84130ef" + "reference": "1a6a89f95a46af0f142874c9d650a6358d13070d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/90173ef89c40e7c8c616653241048705f84130ef", - "reference": "90173ef89c40e7c8c616653241048705f84130ef", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1a6a89f95a46af0f142874c9d650a6358d13070d", + "reference": "1a6a89f95a46af0f142874c9d650a6358d13070d", "shasum": "" }, "require": { @@ -4801,7 +4813,7 @@ "symfony/serializer": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0" }, - "time": "2024-09-25T14:20:29+00:00", + "time": "2024-10-18T07:58:17+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4839,7 +4851,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.1.6" + "source": "https://github.com/symfony/var-exporter/tree/v7.2.0" }, "funding": [ { diff --git a/app/vendor/composer/installed.php b/app/vendor/composer/installed.php index a00a6511a..b58e33a28 100644 --- a/app/vendor/composer/installed.php +++ b/app/vendor/composer/installed.php @@ -110,9 +110,9 @@ 'dev_requirement' => false, ), 'nette/command-line' => array( - 'pretty_version' => 'v1.8.1', - 'version' => '1.8.1.0', - 'reference' => '3e61bcb78faa334b775176b0b977d7d56e75ba91', + 'pretty_version' => 'v1.8.2', + 'version' => '1.8.2.0', + 'reference' => '85a59fc757b4f47b8ee1967f4303722fb7374620', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/command-line', 'aliases' => array(), @@ -128,9 +128,9 @@ 'dev_requirement' => false, ), 'nette/database' => array( - 'pretty_version' => 'v3.2.4', - 'version' => '3.2.4.0', - 'reference' => '8e9a427d98ec0929102ee037016bb47eb7e8b75c', + 'pretty_version' => 'v3.2.5', + 'version' => '3.2.5.0', + 'reference' => '3f9e12a5488615194d1e1d093c982cc07a85be68', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/database', 'aliases' => array(), @@ -188,9 +188,9 @@ 'dev_requirement' => false, ), 'nette/php-generator' => array( - 'pretty_version' => 'v4.1.6', - 'version' => '4.1.6.0', - 'reference' => 'c90961e782ae86e517fe5ed732eb2b512945565b', + 'pretty_version' => 'v4.1.7', + 'version' => '4.1.7.0', + 'reference' => 'd201c9bc217e0969d1b678d286be49302972fb56', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/php-generator', 'aliases' => array(), @@ -313,7 +313,7 @@ 'phpcsstandards/php_codesniffer' => array( 'dev_requirement' => true, 'replaced' => array( - 0 => '3.11.1', + 0 => '3.11.2', ), ), 'phpstan/phpdoc-parser' => array( @@ -326,18 +326,18 @@ 'dev_requirement' => true, ), 'phpstan/phpstan' => array( - 'pretty_version' => '2.0.2', - 'version' => '2.0.2.0', - 'reference' => '6c98c7600fc717b2c78c11ef60040d5b1e359c82', + 'pretty_version' => '2.0.4', + 'version' => '2.0.4.0', + 'reference' => '50d276fc3bf1430ec315f2f109bbde2769821524', 'type' => 'library', 'install_path' => __DIR__ . '/../phpstan/phpstan', 'aliases' => array(), 'dev_requirement' => true, ), 'phpstan/phpstan-deprecation-rules' => array( - 'pretty_version' => '2.0.0', - 'version' => '2.0.0.0', - 'reference' => '81833b5787e2e8f451b31218875e29e4ed600ab2', + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'reference' => '1cc1259cb91ee4cfbb5c39bca9f635f067c910b4', 'type' => 'phpstan-extension', 'install_path' => __DIR__ . '/../phpstan/phpstan-deprecation-rules', 'aliases' => array(), @@ -403,7 +403,7 @@ 'roave/security-advisories' => array( 'pretty_version' => 'dev-latest', 'version' => 'dev-latest', - 'reference' => 'b33a18b5d222c63472a4b41f6fa3e15e591c9595', + 'reference' => '4aa68d3ea343b9576b5fdebef1332f701a7bc994', 'type' => 'metapackage', 'install_path' => null, 'aliases' => array( @@ -493,9 +493,9 @@ 'dev_requirement' => false, ), 'spaze/phpcs-phar' => array( - 'pretty_version' => '3.11.1', - 'version' => '3.11.1.0', - 'reference' => 'b3ced1b725e7463914dcc9e0a641d4bb2dc94f4e', + 'pretty_version' => '3.11.2', + 'version' => '3.11.2.0', + 'reference' => 'b1deb9736970e23f0477ef128b6f96560f247467', 'type' => 'library', 'install_path' => __DIR__ . '/../spaze/phpcs-phar', 'aliases' => array(), @@ -549,22 +549,22 @@ 'squizlabs/php_codesniffer' => array( 'dev_requirement' => true, 'replaced' => array( - 0 => '3.11.1', + 0 => '3.11.2', ), ), 'symfony/cache' => array( - 'pretty_version' => 'v7.1.7', - 'version' => '7.1.7.0', - 'reference' => '23b61c9592ee72233c31625f0ae805dd1571e928', + 'pretty_version' => 'v7.2.1', + 'version' => '7.2.1.0', + 'reference' => 'e7e983596b744c4539f31e79b0350a6cf5878a20', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/cache', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/cache-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => 'df6a1a44c890faded49a5fca33c2d5c5fd3c2197', + 'pretty_version' => 'v3.5.1', + 'version' => '3.5.1.0', + 'reference' => '15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/cache-contracts', 'aliases' => array(), @@ -577,27 +577,27 @@ ), ), 'symfony/config' => array( - 'pretty_version' => 'v7.1.7', - 'version' => '7.1.7.0', - 'reference' => 'dc373a5cbd345354696f5dfd39c5c7a8ea23f4c8', + 'pretty_version' => 'v7.2.0', + 'version' => '7.2.0.0', + 'reference' => 'bcd3c4adf0144dee5011bb35454728c38adec055', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/config', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/deprecation-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => '0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1', + 'pretty_version' => 'v3.5.1', + 'version' => '3.5.1.0', + 'reference' => '74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/filesystem' => array( - 'pretty_version' => 'v7.1.6', - 'version' => '7.1.6.0', - 'reference' => 'c835867b3c62bb05c7fe3d637c871c7ae52024d4', + 'pretty_version' => 'v7.2.0', + 'version' => '7.2.0.0', + 'reference' => 'b8dce482de9d7c9fe2891155035a7248ab5c7fdb', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), @@ -616,27 +616,27 @@ ), ), 'symfony/service-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => 'bd1d9e59a81d8fa4acdcea3f617c581f7475a80f', + 'pretty_version' => 'v3.5.1', + 'version' => '3.5.1.0', + 'reference' => 'e53260aabf78fb3d63f8d79d69ece59f80d5eda0', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/translation' => array( - 'pretty_version' => 'v7.1.6', - 'version' => '7.1.6.0', - 'reference' => 'b9f72ab14efdb6b772f85041fa12f820dee8d55f', + 'pretty_version' => 'v7.2.0', + 'version' => '7.2.0.0', + 'reference' => 'dc89e16b44048ceecc879054e5b7f38326ab6cc5', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/translation-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => 'b9d2189887bb6b2e0367a9fc7136c5239ab9b05a', + 'pretty_version' => 'v3.5.1', + 'version' => '3.5.1.0', + 'reference' => '4667ff3bd513750603a09c8dedbea942487fb07c', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation-contracts', 'aliases' => array(), @@ -649,9 +649,9 @@ ), ), 'symfony/var-exporter' => array( - 'pretty_version' => 'v7.1.6', - 'version' => '7.1.6.0', - 'reference' => '90173ef89c40e7c8c616653241048705f84130ef', + 'pretty_version' => 'v7.2.0', + 'version' => '7.2.0.0', + 'reference' => '1a6a89f95a46af0f142874c9d650a6358d13070d', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/var-exporter', 'aliases' => array(), diff --git a/app/vendor/nette/command-line/composer.json b/app/vendor/nette/command-line/composer.json index 0bfab9b8d..31a02b902 100644 --- a/app/vendor/nette/command-line/composer.json +++ b/app/vendor/nette/command-line/composer.json @@ -15,7 +15,7 @@ } ], "require": { - "php": "8.0 - 8.3" + "php": "8.0 - 8.4" }, "require-dev": { "nette/tester": "^2.5", diff --git a/app/vendor/nette/command-line/readme.md b/app/vendor/nette/command-line/readme.md index 67e052f26..58a81dbe8 100644 --- a/app/vendor/nette/command-line/readme.md +++ b/app/vendor/nette/command-line/readme.md @@ -13,6 +13,6 @@ Install it using Composer: composer require nette/command-line ``` -It requires PHP version 8.0 and supports PHP up to 8.3. +It requires PHP version 8.0 and supports PHP up to 8.4. If you like Nette, **[please make a donation now](https://nette.org/donate)**. Thank you! diff --git a/app/vendor/nette/database/src/Database/Connection.php b/app/vendor/nette/database/src/Database/Connection.php index 1d86803f1..5898d0cf7 100644 --- a/app/vendor/nette/database/src/Database/Connection.php +++ b/app/vendor/nette/database/src/Database/Connection.php @@ -16,7 +16,7 @@ /** - * Represents a connection between PHP and a database server. + * Manages database connection and executes SQL queries. */ class Connection { @@ -52,6 +52,9 @@ public function __construct( } + /** + * @throws ConnectionException + */ public function connect(): void { if ($this->pdo) { @@ -74,6 +77,9 @@ public function connect(): void } + /** + * Disconnects and connects to database again. + */ public function reconnect(): void { $this->disconnect(); @@ -81,6 +87,9 @@ public function reconnect(): void } + /** + * Disconnects from database. + */ public function disconnect(): void { $this->pdo = null; @@ -121,6 +130,9 @@ public function getReflection(): Reflection } + /** + * Sets callback for row preprocessing. + */ public function setRowNormalizer(?callable $normalizer): static { $this->rowNormalizer = $normalizer; @@ -128,6 +140,9 @@ public function setRowNormalizer(?callable $normalizer): static } + /** + * Returns last inserted ID. + */ public function getInsertId(?string $sequence = null): string { try { @@ -139,6 +154,9 @@ public function getInsertId(?string $sequence = null): string } + /** + * Quotes string for use in SQL. + */ public function quote(string $string, int $type = PDO::PARAM_STR): string { try { @@ -149,6 +167,10 @@ public function quote(string $string, int $type = PDO::PARAM_STR): string } + /** + * Starts a transaction. + * @throws \LogicException when called inside a transaction + */ public function beginTransaction(): void { if ($this->transactionDepth !== 0) { @@ -159,6 +181,10 @@ public function beginTransaction(): void } + /** + * Commits current transaction. + * @throws \LogicException when called inside a transaction + */ public function commit(): void { if ($this->transactionDepth !== 0) { @@ -169,6 +195,10 @@ public function commit(): void } + /** + * Rolls back current transaction. + * @throws \LogicException when called inside a transaction + */ public function rollBack(): void { if ($this->transactionDepth !== 0) { @@ -179,6 +209,9 @@ public function rollBack(): void } + /** + * Executes callback inside a transaction. + */ public function transaction(callable $callback): mixed { if ($this->transactionDepth === 0) { @@ -264,6 +297,16 @@ public function fetch(#[Language('SQL')] string $sql, #[Language('GenericSQL')] } + /** + * Shortcut for query()->fetchAssoc() + * @param literal-string $sql + */ + public function fetchAssoc(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array + { + return $this->query($sql, ...$params)->fetchAssoc(); + } + + /** * Shortcut for query()->fetchField() * @param literal-string $sql @@ -275,12 +318,22 @@ public function fetchField(#[Language('SQL')] string $sql, #[Language('GenericSQ /** - * Shortcut for query()->fetchFields() + * Shortcut for query()->fetchList() + * @param literal-string $sql + */ + public function fetchList(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array + { + return $this->query($sql, ...$params)->fetchList(); + } + + + /** + * Shortcut for query()->fetchList() * @param literal-string $sql */ public function fetchFields(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array { - return $this->query($sql, ...$params)->fetchFields(); + return $this->query($sql, ...$params)->fetchList(); } @@ -304,6 +357,9 @@ public function fetchAll(#[Language('SQL')] string $sql, #[Language('GenericSQL' } + /** + * Creates SQL literal value. + */ public static function literal(string $value, ...$params): SqlLiteral { return new SqlLiteral($value, $params); diff --git a/app/vendor/nette/database/src/Database/Conventions.php b/app/vendor/nette/database/src/Database/Conventions.php index 3e7a68710..69dcb1b72 100644 --- a/app/vendor/nette/database/src/Database/Conventions.php +++ b/app/vendor/nette/database/src/Database/Conventions.php @@ -12,6 +12,9 @@ use Nette\Database\Conventions\AmbiguousReferenceKeyException; +/** + * Provides naming conventions for database tables and columns. + */ interface Conventions { /** diff --git a/app/vendor/nette/database/src/Database/Conventions/DiscoveredConventions.php b/app/vendor/nette/database/src/Database/Conventions/DiscoveredConventions.php index 272b942ac..774b4b83c 100644 --- a/app/vendor/nette/database/src/Database/Conventions/DiscoveredConventions.php +++ b/app/vendor/nette/database/src/Database/Conventions/DiscoveredConventions.php @@ -14,7 +14,7 @@ /** - * Conventions based on database structure. + * Discovers database conventions based on table structure metadata. */ class DiscoveredConventions implements Conventions { diff --git a/app/vendor/nette/database/src/Database/Conventions/StaticConventions.php b/app/vendor/nette/database/src/Database/Conventions/StaticConventions.php index 0f6cc4450..6344453c6 100644 --- a/app/vendor/nette/database/src/Database/Conventions/StaticConventions.php +++ b/app/vendor/nette/database/src/Database/Conventions/StaticConventions.php @@ -13,7 +13,7 @@ /** - * Conventions based on static definition. + * Defines naming conventions for database structure using static patterns. */ class StaticConventions implements Conventions { diff --git a/app/vendor/nette/database/src/Database/Driver.php b/app/vendor/nette/database/src/Database/Driver.php index 030674007..8ade59077 100644 --- a/app/vendor/nette/database/src/Database/Driver.php +++ b/app/vendor/nette/database/src/Database/Driver.php @@ -11,7 +11,7 @@ /** - * Supplemental PDO database driver. + * Provides database-specific functionality. */ interface Driver { @@ -19,7 +19,7 @@ interface Driver SupportSequence = 'sequence', SupportSelectUngroupedColumns = 'ungrouped_cols', SupportMultiInsertAsSelect = 'insert_as_select', - SupportMultiColumnAsOrCond = 'multi_column_as_or', + SupportMultiColumnAsOrCondition = 'multi_column_as_or', SupportSubselect = 'subselect', SupportSchema = 'schema'; @@ -32,6 +32,12 @@ interface Driver SUPPORT_SUBSELECT = 'subselect', SUPPORT_SCHEMA = 'schema'; + /** + * Checks if the engine supports a specific feature. + * @param self::Support* $feature + */ + function isSupported(string $feature): bool; + /** * Initializes connection. */ @@ -42,43 +48,47 @@ function initialize(Connection $connection, array $options): void; */ function convertException(\PDOException $e): DriverException; - /** - * Delimites identifier for use in a SQL statement. - */ + /********************* SQL utilities ****************d*g**/ + + /** Adds delimiters around database identifier. */ function delimite(string $name): string; - /** - * Formats date-time for use in a SQL statement. - */ + /** Formats a date-time value for use in an SQL statement. */ function formatDateTime(\DateTimeInterface $value): string; - /** - * Formats date-time interval for use in a SQL statement. - */ + /** Formats a date-time interval for use in an SQL statement. */ function formatDateInterval(\DateInterval $value): string; - /** - * Encodes string for use in a LIKE statement. - */ + /** Encodes string for use in a LIKE statement. */ function formatLike(string $value, int $pos): string; - /** - * Injects LIMIT/OFFSET to the SQL query. - */ + /** Applies LIMIT and OFFSET clauses to an SQL query. */ function applyLimit(string &$sql, ?int $limit, ?int $offset): void; /********************* reflection ****************d*g**/ - /** @return list */ + /** + * Returns a list of all tables in the database. + * @return list + */ function getTables(): array; - /** @return list */ + /** + * Returns metadata for all columns in a table. + * @return list + */ function getColumns(string $table): array; - /** @return list, unique: bool, primary: bool}> */ + /** + * Returns metadata for all indexes in a table. + * @return list, unique: bool, primary: bool}> + */ function getIndexes(string $table): array; - /** @return list */ + /** + * Returns metadata for all foreign keys in a table. + * @return list + */ function getForeignKeys(string $table): array; /** @@ -86,12 +96,6 @@ function getForeignKeys(string $table): array; * @return array */ function getColumnTypes(\PDOStatement $statement): array; - - /** - * Cheks if driver supports specific property - * @param self::Support* $item - */ - function isSupported(string $item): bool; } diff --git a/app/vendor/nette/database/src/Database/Drivers/MsSqlDriver.php b/app/vendor/nette/database/src/Database/Drivers/MsSqlDriver.php index 4ef886921..3509cb434 100644 --- a/app/vendor/nette/database/src/Database/Drivers/MsSqlDriver.php +++ b/app/vendor/nette/database/src/Database/Drivers/MsSqlDriver.php @@ -26,6 +26,12 @@ public function initialize(Nette\Database\Connection $connection, array $options } + public function isSupported(string $feature): bool + { + return $feature === self::SupportSubselect; + } + + public function convertException(\PDOException $e): Nette\Database\DriverException { return Nette\Database\DriverException::from($e); @@ -216,10 +222,4 @@ public function getColumnTypes(\PDOStatement $statement): array { return Nette\Database\Helpers::detectTypes($statement); } - - - public function isSupported(string $item): bool - { - return $item === self::SupportSubselect; - } } diff --git a/app/vendor/nette/database/src/Database/Drivers/MySqlDriver.php b/app/vendor/nette/database/src/Database/Drivers/MySqlDriver.php index cca8735b4..9fab9c3ea 100644 --- a/app/vendor/nette/database/src/Database/Drivers/MySqlDriver.php +++ b/app/vendor/nette/database/src/Database/Drivers/MySqlDriver.php @@ -48,6 +48,16 @@ public function initialize(Nette\Database\Connection $connection, array $options } + public function isSupported(string $feature): bool + { + // MULTI_COLUMN_AS_OR_COND due to mysql bugs: + // - http://bugs.mysql.com/bug.php?id=31188 + // - http://bugs.mysql.com/bug.php?id=35819 + // and more. + return $feature === self::SupportSelectUngroupedColumns || $feature === self::SupportMultiColumnAsOrCondition; + } + + public function convertException(\PDOException $e): Nette\Database\DriverException { $code = $e->errorInfo[1] ?? null; @@ -211,14 +221,4 @@ public function getColumnTypes(\PDOStatement $statement): array return $types; } - - - public function isSupported(string $item): bool - { - // MULTI_COLUMN_AS_OR_COND due to mysql bugs: - // - http://bugs.mysql.com/bug.php?id=31188 - // - http://bugs.mysql.com/bug.php?id=35819 - // and more. - return $item === self::SupportSelectUngroupedColumns || $item === self::SupportMultiColumnAsOrCond; - } } diff --git a/app/vendor/nette/database/src/Database/Drivers/OciDriver.php b/app/vendor/nette/database/src/Database/Drivers/OciDriver.php index 6f5fc7e57..ba48033ca 100644 --- a/app/vendor/nette/database/src/Database/Drivers/OciDriver.php +++ b/app/vendor/nette/database/src/Database/Drivers/OciDriver.php @@ -28,6 +28,12 @@ public function initialize(Nette\Database\Connection $connection, array $options } + public function isSupported(string $feature): bool + { + return $feature === self::SupportSequence || $feature === self::SupportSubselect; + } + + public function convertException(\PDOException $e): Nette\Database\DriverException { $code = $e->errorInfo[1] ?? null; @@ -133,10 +139,4 @@ public function getColumnTypes(\PDOStatement $statement): array { return []; } - - - public function isSupported(string $item): bool - { - return $item === self::SupportSequence || $item === self::SupportSubselect; - } } diff --git a/app/vendor/nette/database/src/Database/Drivers/OdbcDriver.php b/app/vendor/nette/database/src/Database/Drivers/OdbcDriver.php index 078a202cc..d687fc915 100644 --- a/app/vendor/nette/database/src/Database/Drivers/OdbcDriver.php +++ b/app/vendor/nette/database/src/Database/Drivers/OdbcDriver.php @@ -22,6 +22,12 @@ public function initialize(Nette\Database\Connection $connection, array $options } + public function isSupported(string $feature): bool + { + return $feature === self::SupportSubselect; + } + + public function convertException(\PDOException $e): Nette\Database\DriverException { return Nette\Database\DriverException::from($e); @@ -104,10 +110,4 @@ public function getColumnTypes(\PDOStatement $statement): array { return []; } - - - public function isSupported(string $item): bool - { - return $item === self::SupportSubselect; - } } diff --git a/app/vendor/nette/database/src/Database/Drivers/PgSqlDriver.php b/app/vendor/nette/database/src/Database/Drivers/PgSqlDriver.php index bda0fce9a..f2f8ebe1b 100644 --- a/app/vendor/nette/database/src/Database/Drivers/PgSqlDriver.php +++ b/app/vendor/nette/database/src/Database/Drivers/PgSqlDriver.php @@ -26,6 +26,12 @@ public function initialize(Nette\Database\Connection $connection, array $options } + public function isSupported(string $feature): bool + { + return $feature === self::SupportSequence || $feature === self::SupportSubselect || $feature === self::SupportSchema; + } + + public function convertException(\PDOException $e): Nette\Database\DriverException { $code = $e->errorInfo[0] ?? null; @@ -244,12 +250,6 @@ public function getColumnTypes(\PDOStatement $statement): array } - public function isSupported(string $item): bool - { - return $item === self::SupportSequence || $item === self::SupportSubselect || $item === self::SupportSchema; - } - - /** * Converts: schema.name => "schema"."name" */ diff --git a/app/vendor/nette/database/src/Database/Drivers/SqliteDriver.php b/app/vendor/nette/database/src/Database/Drivers/SqliteDriver.php index 801329fb7..db886de85 100644 --- a/app/vendor/nette/database/src/Database/Drivers/SqliteDriver.php +++ b/app/vendor/nette/database/src/Database/Drivers/SqliteDriver.php @@ -28,6 +28,12 @@ public function initialize(Nette\Database\Connection $connection, array $options } + public function isSupported(string $feature): bool + { + return $feature === self::SupportMultiInsertAsSelect || $feature === self::SupportSubselect || $feature === self::SupportMultiColumnAsOrCondition; + } + + public function convertException(\PDOException $e): Nette\Database\DriverException { $code = $e->errorInfo[1] ?? null; @@ -243,10 +249,4 @@ public function getColumnTypes(\PDOStatement $statement): array return $types; } - - - public function isSupported(string $item): bool - { - return $item === self::SupportMultiInsertAsSelect || $item === self::SupportSubselect || $item === self::SupportMultiColumnAsOrCond; - } } diff --git a/app/vendor/nette/database/src/Database/Drivers/SqlsrvDriver.php b/app/vendor/nette/database/src/Database/Drivers/SqlsrvDriver.php index f5e45b360..e34a50bb3 100644 --- a/app/vendor/nette/database/src/Database/Drivers/SqlsrvDriver.php +++ b/app/vendor/nette/database/src/Database/Drivers/SqlsrvDriver.php @@ -26,6 +26,12 @@ public function initialize(Nette\Database\Connection $connection, array $options } + public function isSupported(string $feature): bool + { + return $feature === self::SupportSubselect; + } + + public function convertException(\PDOException $e): Nette\Database\DriverException { return Nette\Database\DriverException::from($e); @@ -234,10 +240,4 @@ public function getColumnTypes(\PDOStatement $statement): array return $types; } - - - public function isSupported(string $item): bool - { - return $item === self::SupportSubselect; - } } diff --git a/app/vendor/nette/database/src/Database/Explorer.php b/app/vendor/nette/database/src/Database/Explorer.php index 06481f8c3..7a8ec3ef9 100644 --- a/app/vendor/nette/database/src/Database/Explorer.php +++ b/app/vendor/nette/database/src/Database/Explorer.php @@ -15,7 +15,7 @@ /** - * Database explorer. + * Provides high-level database layer with ActiveRow pattern. */ class Explorer { @@ -79,6 +79,9 @@ public function queryArgs(string $sql, array $params): ResultSet } + /** + * Returns table selection. + */ public function table(string $table): Table\Selection { return new Table\Selection($this, $this->conventions, $table, $this->cacheStorage); @@ -116,6 +119,16 @@ public function fetch(#[Language('SQL')] string $sql, #[Language('GenericSQL')] } + /** + * Shortcut for query()->fetchAssoc() + * @param literal-string $sql + */ + public function fetchAssoc(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array + { + return $this->connection->query($sql, ...$params)->fetchAssoc(); + } + + /** * Shortcut for query()->fetchField() * @param literal-string $sql @@ -127,12 +140,22 @@ public function fetchField(#[Language('SQL')] string $sql, #[Language('GenericSQ /** - * Shortcut for query()->fetchFields() + * Shortcut for query()->fetchList() + * @param literal-string $sql + */ + public function fetchList(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array + { + return $this->connection->query($sql, ...$params)->fetchList(); + } + + + /** + * Shortcut for query()->fetchList() * @param literal-string $sql */ public function fetchFields(#[Language('SQL')] string $sql, #[Language('GenericSQL')] ...$params): ?array { - return $this->connection->query($sql, ...$params)->fetchFields(); + return $this->connection->query($sql, ...$params)->fetchList(); } @@ -156,6 +179,9 @@ public function fetchAll(#[Language('SQL')] string $sql, #[Language('GenericSQL' } + /** + * Creates SQL literal value. + */ public static function literal(string $value, ...$params): SqlLiteral { return new SqlLiteral($value, $params); diff --git a/app/vendor/nette/database/src/Database/Helpers.php b/app/vendor/nette/database/src/Database/Helpers.php index 01d5c09bd..7e6e69ebe 100644 --- a/app/vendor/nette/database/src/Database/Helpers.php +++ b/app/vendor/nette/database/src/Database/Helpers.php @@ -15,7 +15,7 @@ /** - * Database helpers. + * Database utility functions. */ class Helpers { @@ -38,7 +38,7 @@ class Helpers /** - * Displays complete result set as HTML table for debug purposes. + * Displays result set as HTML table. */ public static function dumpResult(ResultSet $result): void { @@ -164,7 +164,7 @@ public static function dumpSql(string $sql, ?array $params = null, ?Connection $ /** - * Common column type detection. + * Returns column types from result set. */ public static function detectTypes(\PDOStatement $statement): array { @@ -182,7 +182,7 @@ public static function detectTypes(\PDOStatement $statement): array /** - * Heuristic column type detection. + * Detects column type from native type. * @internal */ public static function detectType(string $type): string @@ -216,9 +216,6 @@ public static function normalizeRow( $row[$key] = is_float($tmp = $value * 1) ? $value : $tmp; } elseif ($type === IStructure::FIELD_FLOAT || $type === IStructure::FIELD_DECIMAL) { - if (is_string($value) && str_starts_with($value, '.')) { - $value = '0' . $value; - } $row[$key] = (float) $value; } elseif ($type === IStructure::FIELD_BOOL) { @@ -248,9 +245,10 @@ public static function normalizeRow( /** - * Import SQL dump from file - extremely fast. - * @param ?array $onProgress - * @return int count of commands + * Imports SQL dump from file. + * @param ?array $onProgress Called after each query + * @return int Number of executed commands + * @throws Nette\FileNotFoundException */ public static function loadFromFile(Connection $connection, string $file, ?callable $onProgress = null): int { @@ -325,7 +323,7 @@ public static function initializeTracy( /** - * Reformat source to key -> value pairs. + * Converts rows to key-value pairs. */ public static function toPairs(array $rows, string|int|\Closure|null $key, string|int|null $value): array { @@ -369,7 +367,7 @@ public static function toPairs(array $rows, string|int|\Closure|null $key, strin /** - * Finds duplicate columns in select statement + * Returns duplicate columns from result set. */ public static function findDuplicates(\PDOStatement $statement): string { diff --git a/app/vendor/nette/database/src/Database/Reflection.php b/app/vendor/nette/database/src/Database/Reflection.php index bc288b091..7b6cdc2d1 100644 --- a/app/vendor/nette/database/src/Database/Reflection.php +++ b/app/vendor/nette/database/src/Database/Reflection.php @@ -12,6 +12,9 @@ use Nette\Database\Reflection\Table; +/** + * Provides database schema reflection. + */ final class Reflection { /** @var array */ @@ -32,6 +35,10 @@ public function getTables(): array } + /** + * Returns table metadata. + * @throws \InvalidArgumentException if table does not exist + */ public function getTable(string $name): Table { $name = $this->getFullName($name); diff --git a/app/vendor/nette/database/src/Database/Reflection/Column.php b/app/vendor/nette/database/src/Database/Reflection/Column.php index 48eaa87c7..871f8267d 100644 --- a/app/vendor/nette/database/src/Database/Reflection/Column.php +++ b/app/vendor/nette/database/src/Database/Reflection/Column.php @@ -11,7 +11,7 @@ /** - * Column reflection. + * Database table column metadata. */ final class Column { diff --git a/app/vendor/nette/database/src/Database/Reflection/ForeignKey.php b/app/vendor/nette/database/src/Database/Reflection/ForeignKey.php index a4808ae40..3f59afbb3 100644 --- a/app/vendor/nette/database/src/Database/Reflection/ForeignKey.php +++ b/app/vendor/nette/database/src/Database/Reflection/ForeignKey.php @@ -11,7 +11,7 @@ /** - * Foreign key reflection. + * Database foreign key relationship. */ final class ForeignKey { diff --git a/app/vendor/nette/database/src/Database/Reflection/Index.php b/app/vendor/nette/database/src/Database/Reflection/Index.php index f54898d5d..3ddbe7ea3 100644 --- a/app/vendor/nette/database/src/Database/Reflection/Index.php +++ b/app/vendor/nette/database/src/Database/Reflection/Index.php @@ -11,7 +11,7 @@ /** - * Index reflection. + * Database table index. */ final class Index { diff --git a/app/vendor/nette/database/src/Database/Reflection/Table.php b/app/vendor/nette/database/src/Database/Reflection/Table.php index d4beb4cc3..2c20b4801 100644 --- a/app/vendor/nette/database/src/Database/Reflection/Table.php +++ b/app/vendor/nette/database/src/Database/Reflection/Table.php @@ -13,7 +13,7 @@ /** - * Table reflection. + * Database table structure. */ final class Table { @@ -39,6 +39,10 @@ public function __construct( } + /** + * Returns column object or throws exception if column doesn't exist. + * @throws \InvalidArgumentException + */ public function getColumn(string $name): Column { return $this->columns[$name] ?? throw new \InvalidArgumentException("Column '$name' not found in table '$this->name'."); diff --git a/app/vendor/nette/database/src/Database/ResultSet.php b/app/vendor/nette/database/src/Database/ResultSet.php index e79484118..14d3dca13 100644 --- a/app/vendor/nette/database/src/Database/ResultSet.php +++ b/app/vendor/nette/database/src/Database/ResultSet.php @@ -10,11 +10,12 @@ namespace Nette\Database; use Nette; +use Nette\Utils\Arrays; use PDO; /** - * Represents a result set. + * Represents a database result set. */ class ResultSet implements \Iterator, IRowContainer { @@ -72,9 +73,7 @@ public function getConnection(): Connection } - /** - * @internal - */ + /** @internal */ public function getPdoStatement(): ?\PDOStatement { return $this->pdoStatement; @@ -131,7 +130,7 @@ public function normalizeRow(array $row): array /** - * Displays complete result set as HTML table for debug purposes. + * Displays result set as HTML table. */ public function dump(): void { @@ -178,11 +177,18 @@ public function valid(): bool } + /********************* fetch ****************d*g**/ + + /** - * Fetches single row object. + * Returns the next row as an associative array or null if there are no more rows. */ - public function fetch(): ?Row + public function fetchAssoc(?string $path = null): ?array { + if ($path !== null) { + return Arrays::associate($this->fetchAll(), $path); + } + $data = $this->pdoStatement ? $this->pdoStatement->fetch() : null; if (!$data) { $this->pdoStatement->closeCursor(); @@ -193,40 +199,56 @@ public function fetch(): ?Row trigger_error("Found duplicate columns in database result set: $duplicates."); } - $row = new Row; - foreach ($this->normalizeRow($data) as $key => $value) { - if ($key !== '') { - $row->$key = $value; - } + return $this->normalizeRow($data); + } + + + /** + * Returns the next row as an object Row or null if there are no more rows. + */ + public function fetch(): ?Row + { + $data = $this->fetchAssoc(); + if ($data === null) { + return null; } $this->lastRowKey++; - return $this->lastRow = $row; + return $this->lastRow = Arrays::toObject($data, new Row); } /** - * Fetches single field. + * Returns the first field of the next row or null if there are no more rows. */ public function fetchField(): mixed { - $row = $this->fetch(); - return $row ? $row[0] : null; + $row = $this->fetchAssoc(); + return $row ? reset($row) : null; + } + + + /** + * Returns the next row as indexed array or null if there are no more rows. + */ + public function fetchList(): ?array + { + $row = $this->fetchAssoc(); + return $row ? array_values($row) : null; } /** - * Fetches array of fields. + * Alias for fetchList(). */ public function fetchFields(): ?array { - $row = $this->fetch(); - return $row ? array_values((array) $row) : null; + return $this->fetchList(); } /** - * Fetches all rows as associative array. + * Returns all rows as associative array. */ public function fetchPairs(string|int|\Closure|null $keyOrCallback = null, string|int|null $value = null): array { @@ -235,7 +257,7 @@ public function fetchPairs(string|int|\Closure|null $keyOrCallback = null, strin /** - * Fetches all rows. + * Returns all rows. * @return Row[] */ public function fetchAll(): array @@ -243,13 +265,4 @@ public function fetchAll(): array $this->rows ??= iterator_to_array($this); return $this->rows; } - - - /** - * Fetches all rows and returns associative tree. - */ - public function fetchAssoc(string $path): array - { - return Nette\Utils\Arrays::associate($this->fetchAll(), $path); - } } diff --git a/app/vendor/nette/database/src/Database/Row.php b/app/vendor/nette/database/src/Database/Row.php index 38bad424c..ce21ae677 100644 --- a/app/vendor/nette/database/src/Database/Row.php +++ b/app/vendor/nette/database/src/Database/Row.php @@ -13,7 +13,7 @@ /** - * Represents a single table row. + * Represents a single database table row. */ class Row extends Nette\Utils\ArrayHash implements IRow { diff --git a/app/vendor/nette/database/src/Database/SqlLiteral.php b/app/vendor/nette/database/src/Database/SqlLiteral.php index 7c8227c60..b95b0ed3d 100644 --- a/app/vendor/nette/database/src/Database/SqlLiteral.php +++ b/app/vendor/nette/database/src/Database/SqlLiteral.php @@ -11,7 +11,7 @@ /** - * SQL literal value. + * SQL literal that will not be escaped. */ class SqlLiteral { diff --git a/app/vendor/nette/database/src/Database/SqlPreprocessor.php b/app/vendor/nette/database/src/Database/SqlPreprocessor.php index 876ef3ca3..53e733eb2 100644 --- a/app/vendor/nette/database/src/Database/SqlPreprocessor.php +++ b/app/vendor/nette/database/src/Database/SqlPreprocessor.php @@ -13,7 +13,7 @@ /** - * SQL preprocessor. + * Processes SQL queries with parameter substitution. */ class SqlPreprocessor { @@ -67,7 +67,7 @@ public function __construct(Connection $connection) /** - * @return array of [sql, params] + * @return array{string, array} */ public function process(array $params, bool $useParams = false): array { @@ -318,6 +318,9 @@ private function formatValue(mixed $value, ?string $mode = null): string } + /** + * Adds delimiters around database identifier. + */ private function delimite(string $name): string { return implode('.', array_map($this->driver->delimite(...), explode('.', $name))); diff --git a/app/vendor/nette/database/src/Database/Structure.php b/app/vendor/nette/database/src/Database/Structure.php index bd5b7a3ce..72a663007 100644 --- a/app/vendor/nette/database/src/Database/Structure.php +++ b/app/vendor/nette/database/src/Database/Structure.php @@ -13,7 +13,7 @@ /** - * Cached reflection of database structure. + * Provides database structure metadata with caching. */ class Structure implements IStructure { @@ -152,6 +152,9 @@ public function getBelongsToReference(string $table, ?string $column = null): ?a } + /** + * Rebuilds structure cache. + */ public function rebuild(): void { $this->structure = $this->loadStructure(); @@ -175,6 +178,9 @@ protected function needStructure(): void } + /** + * Loads complete structure from database. + */ protected function loadStructure(): array { $driver = $this->connection->getDriver(); @@ -254,6 +260,9 @@ protected function analyzeForeignKeys(array &$structure, string $table): void } + /** + * Returns normalized table name. + */ protected function resolveFQTableName(string $table): string { $name = strtolower($table); diff --git a/app/vendor/nette/database/src/Database/Table/ActiveRow.php b/app/vendor/nette/database/src/Database/Table/ActiveRow.php index 91778c96a..35e0b235e 100644 --- a/app/vendor/nette/database/src/Database/Table/ActiveRow.php +++ b/app/vendor/nette/database/src/Database/Table/ActiveRow.php @@ -13,7 +13,7 @@ /** - * Single row representation. + * Represents database row with support for relations. * ActiveRow is based on the great library NotORM http://www.notorm.com written by Jakub Vrana. */ class ActiveRow implements \IteratorAggregate, IRow @@ -28,18 +28,14 @@ public function __construct( } - /** - * @internal - */ + /** @internal */ public function setTable(Selection $table): void { $this->table = $table; } - /** - * @internal - */ + /** @internal */ public function getTable(): Selection { return $this->table; @@ -97,7 +93,7 @@ public function getPrimary(bool $throw = true): mixed /** - * Returns row signature (composition of primary keys) + * Returns row signature (composition of primary keys). */ public function getSignature(bool $throw = true): string { @@ -121,7 +117,7 @@ public function ref(string $key, ?string $throughColumn = null): ?self /** - * Returns referencing rows. + * Returns referencing rows collection. */ public function related(string $key, ?string $throughColumn = null): GroupedSelection { @@ -135,7 +131,7 @@ public function related(string $key, ?string $throughColumn = null): GroupedSele /** - * Updates row. + * Updates row data. */ public function update(iterable $data): bool { @@ -171,7 +167,7 @@ public function update(iterable $data): bool /** - * Deletes row. + * Deletes row from database. * @return int number of affected rows */ public function delete(): int @@ -201,41 +197,24 @@ public function getIterator(): \Iterator /********************* interface ArrayAccess & magic accessors ****************d*g**/ - /** - * Stores value in column. - * @param string $column - * @param mixed $value - */ public function offsetSet($column, $value): void { $this->__set($column, $value); } - /** - * Returns value of column. - * @param string $column - */ public function offsetGet($column): mixed { return $this->__get($column); } - /** - * Tests if column exists. - * @param string $column - */ public function offsetExists($column): bool { return $this->__isset($column); } - /** - * Removes column from data. - * @param string $column - */ public function offsetUnset($column): void { $this->__unset($column); @@ -293,9 +272,7 @@ public function __unset(string $key): void } - /** - * @internal - */ + /** @internal */ public function accessColumn(?string $key, bool $selectColumn = true): bool { if ($this->table->accessColumn($key, $selectColumn) && !$this->dataRefreshed) { diff --git a/app/vendor/nette/database/src/Database/Table/GroupedSelection.php b/app/vendor/nette/database/src/Database/Table/GroupedSelection.php index 507ac298a..6e9f4c160 100644 --- a/app/vendor/nette/database/src/Database/Table/GroupedSelection.php +++ b/app/vendor/nette/database/src/Database/Table/GroupedSelection.php @@ -15,7 +15,7 @@ /** - * Representation of filtered table grouped by some column. + * Represents filtered table grouped by referencing table. * GroupedSelection is based on the great library NotORM http://www.notorm.com written by Jakub Vrana. */ class GroupedSelection extends Selection @@ -86,6 +86,9 @@ public function order(string $columns, ...$params): static /********************* aggregations ****************d*g**/ + /** + * Calculates aggregation for this group. + */ public function aggregation(string $function, ?string $groupFunction = null): mixed { $aggregation = &$this->getRefTable($refPath)->aggregation[$refPath . $function . $this->sqlBuilder->getSelectQueryHash($this->getPreviousAccessedColumns())]; diff --git a/app/vendor/nette/database/src/Database/Table/Selection.php b/app/vendor/nette/database/src/Database/Table/Selection.php index da410b9c9..081d839ff 100644 --- a/app/vendor/nette/database/src/Database/Table/Selection.php +++ b/app/vendor/nette/database/src/Database/Table/Selection.php @@ -15,7 +15,7 @@ /** - * Filtered table representation. + * Represents filtered table result. * Selection is based on the great library NotORM http://www.notorm.com written by Jakub Vrana. * @template T of ActiveRow * @implements \Iterator @@ -40,10 +40,10 @@ class Selection implements \Iterator, IRowContainer, \ArrayAccess, \Countable /** primary column sequence name, false for autodetection */ protected string|bool|null $primarySequence = false; - /** @var ActiveRow[]|null data read from database in [primary key => ActiveRow] format */ + /** @var array|null data read from database in [primary key => ActiveRow] format */ protected ?array $rows = null; - /** @var ActiveRow[]|null modifiable data in [primary key => ActiveRow] format */ + /** @var array|null modifiable data in [primary key => ActiveRow] format */ protected ?array $data = null; protected bool $dataRefreshed = false; @@ -108,6 +108,7 @@ public function getName(): string /** + * Returns table primary key. * @return string|string[]|null */ public function getPrimary(bool $throw = true): string|array|null @@ -172,7 +173,7 @@ public function getSqlBuilder(): SqlBuilder /** * Returns row specified by primary key. - * @return T + * @return T|null */ public function get(mixed $key): ?ActiveRow { @@ -182,8 +183,8 @@ public function get(mixed $key): ?ActiveRow /** - * Fetches single row object. - * @return T + * Fetches next row of result. + * @return T|null */ public function fetch(): ?ActiveRow { @@ -233,7 +234,7 @@ public function fetchAll(): array /** - * Fetches all rows and returns associative tree. + * Returns all rows as associative tree. */ public function fetchAssoc(string $path): array { @@ -246,7 +247,7 @@ public function fetchAssoc(string $path): array /** - * Adds select clause, more calls appends to the end. + * Adds select clause, more calls append to the end. * @param string $columns for example "column, MD5(column) AS column_md5" */ public function select(string $columns, ...$params): static @@ -281,7 +282,7 @@ public function wherePrimary(mixed $key): static /** - * Adds where condition, more calls appends with AND. + * Adds where condition, more calls append with AND. * @param string|array $condition possibly containing ? */ public function where(string|array $condition, ...$params): static @@ -363,7 +364,7 @@ public function whereOr(array $parameters): static /** - * Adds order clause, more calls appends to the end. + * Adds ORDER BY clause, more calls appends to the end. * @param string $columns for example 'column1, column2 DESC' */ public function order(string $columns, ...$params): static @@ -375,7 +376,7 @@ public function order(string $columns, ...$params): static /** - * Sets limit clause, more calls rewrite old values. + * Sets LIMIT clause, more calls rewrite old values. */ public function limit(?int $limit, ?int $offset = null): static { @@ -386,7 +387,7 @@ public function limit(?int $limit, ?int $offset = null): static /** - * Sets offset using page number, more calls rewrite old values. + * Sets OFFSET using page number, more calls rewrite old values. */ public function page(int $page, int $itemsPerPage, &$numOfPages = null): static { @@ -403,7 +404,7 @@ public function page(int $page, int $itemsPerPage, &$numOfPages = null): static /** - * Sets group clause, more calls rewrite old value. + * Sets GROUP BY clause, more calls rewrite old value. */ public function group(string $columns, ...$params): static { @@ -414,7 +415,7 @@ public function group(string $columns, ...$params): static /** - * Sets having clause, more calls rewrite old value. + * Sets HAVING clause, more calls rewrite old value. */ public function having(string $having, ...$params): static { @@ -765,7 +766,7 @@ public function getDataRefreshed(): bool /** * Inserts row in a table. Returns ActiveRow or number of affected rows for Selection or table without primary key. - * @param iterable|Selection $data [$column => $value]|\Traversable|Selection for INSERT ... SELECT + * @param iterable|Selection $data * @return T|array|int|bool */ public function insert(iterable $data): ActiveRow|array|int|bool diff --git a/app/vendor/nette/database/src/Database/Table/SqlBuilder.php b/app/vendor/nette/database/src/Database/Table/SqlBuilder.php index 4db2d3f09..6b0c198b8 100644 --- a/app/vendor/nette/database/src/Database/Table/SqlBuilder.php +++ b/app/vendor/nette/database/src/Database/Table/SqlBuilder.php @@ -235,6 +235,9 @@ public function importGroupConditions(self $builder): bool /********************* SQL selectors ****************d*g**/ + /** + * Adds SELECT clause, more calls append to the end. + */ public function addSelect(string $columns, ...$params): void { $this->select[] = $columns; @@ -255,12 +258,18 @@ public function resetSelect(): void } + /** + * Adds WHERE condition, more calls append with AND. + */ public function addWhere(string|array $condition, ...$params): bool { return $this->addCondition($condition, $params, $this->where, $this->parameters['where']); } + /** + * Adds JOIN condition. + */ public function addJoinCondition(string $tableChain, string|array $condition, ...$params): bool { $this->parameters['joinConditionSorted'] = null; @@ -409,7 +418,7 @@ public function getConditions(): array /** - * Adds alias. + * Adds alias AS. */ public function addAlias(string $chain, string $alias): void { @@ -440,6 +449,9 @@ protected function checkUniqueTableName(string $tableName, string $chain): void } + /** + * Adds ORDER BY clause, more calls append to the end. + */ public function addOrder(string|array $columns, ...$params): void { $this->order[] = $columns; @@ -460,6 +472,9 @@ public function getOrder(): array } + /** + * Sets LIMIT/OFFSET clause. + */ public function setLimit(?int $limit, ?int $offset): void { $this->limit = $limit; @@ -479,6 +494,9 @@ public function getOffset(): ?int } + /** + * Sets GROUP BY and HAVING clause. + */ public function setGroup(string|array $columns, ...$params): void { $this->group = $columns; @@ -808,7 +826,7 @@ protected function addConditionComposition( array &$conditionsParameters, ): bool { - if ($this->driver->isSupported(Driver::SupportMultiColumnAsOrCond)) { + if ($this->driver->isSupported(Driver::SupportMultiColumnAsOrCondition)) { $conditionFragment = '(' . implode(' = ? AND ', $columns) . ' = ?) OR '; $condition = substr(str_repeat($conditionFragment, count($parameters)), 0, -4); return $this->addCondition($condition, [Nette\Utils\Arrays::flatten($parameters)], $conditions, $conditionsParameters); diff --git a/app/vendor/nette/database/src/Database/exceptions.php b/app/vendor/nette/database/src/Database/exceptions.php index c968ef2b7..491b244a7 100644 --- a/app/vendor/nette/database/src/Database/exceptions.php +++ b/app/vendor/nette/database/src/Database/exceptions.php @@ -11,7 +11,7 @@ /** - * Server connection related errors. + * Failed to connect to the database server. */ class ConnectionException extends DriverException { @@ -19,7 +19,7 @@ class ConnectionException extends DriverException /** - * Base class for all constraint violation related exceptions. + * A database constraint was violated. */ class ConstraintViolationException extends DriverException { @@ -27,7 +27,7 @@ class ConstraintViolationException extends DriverException /** - * Exception for a foreign key constraint violation. + * The foreign key constraint check failed. */ class ForeignKeyConstraintViolationException extends ConstraintViolationException { @@ -35,7 +35,7 @@ class ForeignKeyConstraintViolationException extends ConstraintViolationExceptio /** - * Exception for a NOT NULL constraint violation. + * The NOT NULL constraint check failed. */ class NotNullConstraintViolationException extends ConstraintViolationException { @@ -43,7 +43,7 @@ class NotNullConstraintViolationException extends ConstraintViolationException /** - * Exception for a unique constraint violation. + * The unique constraint check failed. */ class UniqueConstraintViolationException extends ConstraintViolationException { diff --git a/app/vendor/nette/php-generator/composer.json b/app/vendor/nette/php-generator/composer.json index c7026efc1..cdd26cf65 100644 --- a/app/vendor/nette/php-generator/composer.json +++ b/app/vendor/nette/php-generator/composer.json @@ -1,6 +1,6 @@ { "name": "nette/php-generator", - "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.3 features.", + "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 8.4 features.", "keywords": ["nette", "php", "code", "scaffolding"], "homepage": "https://nette.org", "license": ["BSD-3-Clause", "GPL-2.0-only", "GPL-3.0-only"], diff --git a/app/vendor/nette/php-generator/readme.md b/app/vendor/nette/php-generator/readme.md index ba102dea4..ae6ef3270 100644 --- a/app/vendor/nette/php-generator/readme.md +++ b/app/vendor/nette/php-generator/readme.md @@ -8,7 +8,7 @@ Are you looking for a tool to generate PHP code for [classes](#classes), [functi

-✅ Supports all the latest PHP features like [enums](#enums), [attributes](#attributes), etc.
+✅ Supports all the latest PHP features like [property hooks](#property-hooks), [enums](#enums), [attributes](#attributes), etc.
✅ Allows you to easily modify [existing classes](#generating-from-existing-ones)
✅ Output compliant with [PSR-12 / PER coding style](#printer-and-psr-compliance)
✅ Highly mature, stable, and widely used library @@ -387,11 +387,11 @@ $method->addParameter('items', []) // $items = [] // function count(&$items = []) ``` -To define the so-called variadics parameters (or also the splat, spread, ellipsis, unpacking or three dots operator), use `setVariadics()`: +To define the so-called variadics parameters (or also the splat, spread, ellipsis, unpacking or three dots operator), use `setVariadic()`: ```php $method = $class->addMethod('count'); -$method->setVariadics(true); +$method->setVariadic(true); $method->addParameter('items'); ``` @@ -665,6 +665,89 @@ class Demo   +Property Hooks +-------------- + +You can also define property hooks (represented by the class [PropertyHook](https://api.nette.org/php-generator/master/Nette/PhpGenerator/PropertyHook.html)) for get and set operations, a feature introduced in PHP 8.4: + +```php +$class = new Nette\PhpGenerator\ClassType('Demo'); +$prop = $class->addProperty('firstName') + ->setType('string'); + +$prop->addHook('set', 'strtolower($value)') + ->addParameter('value') + ->setType('string'); + +$prop->addHook('get') + ->setBody('return ucfirst($this->firstName);'); + +echo $class; +``` + +This generates: + +```php +class Demo +{ + public string $firstName { + set(string $value) => strtolower($value); + get { + return ucfirst($this->firstName); + } + } +} +``` + +Properties and property hooks can be abstract or final: + +```php +$class->addProperty('id') + ->setType('int') + ->addHook('get') + ->setAbstract(); + +$class->addProperty('role') + ->setType('string') + ->addHook('set', 'strtolower($value)') + ->setFinal(); +``` + +  + +Asymmetric Visibility +--------------------- + +PHP 8.4 introduces asymmetric visibility for properties. You can set different access levels for reading and writing. +The visibility can be set using either the `setVisibility()` method with two parameters, or by using `setPublic()`, `setProtected()`, or `setPrivate()` with the `mode` parameter that specifies whether the visibility applies to getting or setting the property. The default mode is 'get'. + +```php +$class = new Nette\PhpGenerator\ClassType('Demo'); + +$class->addProperty('name') + ->setType('string') + ->setVisibility('public', 'private'); // public for read, private for write + +$class->addProperty('id') + ->setType('int') + ->setProtected('set'); // protected for write + +echo $class; +``` + +This generates: + +```php +class Demo +{ + public private(set) string $name; + + protected(set) int $id; +} +``` + +  + Namespace --------- @@ -902,10 +985,10 @@ $property = $manipulator->inheritProperty('foo'); $property->setValue('new value'); ``` -The `implementInterface()` method automatically implements all methods from the given interface in your class: +The `implement()` method automatically implements all methods and properties from the given interface or abstract class: ```php -$manipulator->implementInterface(SomeInterface::class); +$manipulator->implement(SomeInterface::class); // Now your class implements SomeInterface and includes all its methods ``` diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/Attribute.php b/app/vendor/nette/php-generator/src/PhpGenerator/Attribute.php index 4da227b47..896f9473d 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/Attribute.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/Attribute.php @@ -13,7 +13,7 @@ /** - * PHP Attribute. + * Definition of a PHP attribute. */ final class Attribute { diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/ClassLike.php b/app/vendor/nette/php-generator/src/PhpGenerator/ClassLike.php index 7be48d8a6..a5ad5e8f6 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/ClassLike.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/ClassLike.php @@ -13,26 +13,24 @@ /** - * Class/Interface/Trait/Enum description. + * Base definition of class, interface, trait or enum type. */ abstract class ClassLike { use Traits\CommentAware; use Traits\AttributeAware; - public const - VisibilityPublic = 'public', - VisibilityProtected = 'protected', - VisibilityPrivate = 'private'; + /** @deprecated use Visibility::Public */ + public const VisibilityPublic = Visibility::Public, + VISIBILITY_PUBLIC = Visibility::Public; - /** @deprecated use ClassLike::VisibilityPublic */ - public const VISIBILITY_PUBLIC = self::VisibilityPublic; + /** @deprecated use Visibility::Protected */ + public const VisibilityProtected = Visibility::Protected, + VISIBILITY_PROTECTED = Visibility::Protected; - /** @deprecated use ClassLike::VisibilityProtected */ - public const VISIBILITY_PROTECTED = self::VisibilityProtected; - - /** @deprecated use ClassLike::VisibilityPrivate */ - public const VISIBILITY_PRIVATE = self::VisibilityPrivate; + /** @deprecated use Visibility::Private */ + public const VisibilityPrivate = Visibility::Private, + VISIBILITY_PRIVATE = Visibility::Private; private ?PhpNamespace $namespace; private ?string $name; diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/ClassManipulator.php b/app/vendor/nette/php-generator/src/PhpGenerator/ClassManipulator.php index d97ee3195..867829585 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/ClassManipulator.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/ClassManipulator.php @@ -25,25 +25,25 @@ public function __construct( */ public function inheritProperty(string $name, bool $returnIfExists = false): Property { - $extends = $this->class->getExtends(); if ($this->class->hasProperty($name)) { return $returnIfExists ? $this->class->getProperty($name) : throw new Nette\InvalidStateException("Cannot inherit property '$name', because it already exists."); - - } elseif (!$extends) { - throw new Nette\InvalidStateException("Class '{$this->class->getName()}' has not setExtends() set."); } - try { - $rp = new \ReflectionProperty($extends, $name); - } catch (\ReflectionException) { - throw new Nette\InvalidStateException("Property '$name' has not been found in ancestor {$extends}"); + $parents = [...(array) $this->class->getExtends(), ...$this->class->getImplements()] + ?: throw new Nette\InvalidStateException("Class '{$this->class->getName()}' has neither setExtends() nor setImplements() set."); + + foreach ($parents as $parent) { + try { + $rp = new \ReflectionProperty($parent, $name); + } catch (\ReflectionException) { + continue; + } + return $this->implementProperty($rp); } - $property = (new Factory)->fromPropertyReflection($rp); - $this->class->addMember($property); - return $property; + throw new Nette\InvalidStateException("Property '$name' has not been found in any ancestor: " . implode(', ', $parents)); } @@ -52,25 +52,22 @@ public function inheritProperty(string $name, bool $returnIfExists = false): Pro */ public function inheritMethod(string $name, bool $returnIfExists = false): Method { - $parents = [...(array) $this->class->getExtends(), ...$this->class->getImplements()]; if ($this->class->hasMethod($name)) { return $returnIfExists ? $this->class->getMethod($name) : throw new Nette\InvalidStateException("Cannot inherit method '$name', because it already exists."); - - } elseif (!$parents) { - throw new Nette\InvalidStateException("Class '{$this->class->getName()}' has neither setExtends() nor setImplements() set."); } + $parents = [...(array) $this->class->getExtends(), ...$this->class->getImplements()] + ?: throw new Nette\InvalidStateException("Class '{$this->class->getName()}' has neither setExtends() nor setImplements() set."); + foreach ($parents as $parent) { try { $rm = new \ReflectionMethod($parent, $name); } catch (\ReflectionException) { continue; } - $method = (new Factory)->fromMethodReflection($rm); - $this->class->addMember($method); - return $method; + return $this->implementMethod($rm); } throw new Nette\InvalidStateException("Method '$name' has not been found in any ancestor: " . implode(', ', $parents)); @@ -78,18 +75,57 @@ public function inheritMethod(string $name, bool $returnIfExists = false): Metho /** - * Implements all methods from the given interface. + * Implements all methods from the given interface or abstract class. */ - public function implementInterface(string $interfaceName): void + public function implement(string $name): void { - $interface = new \ReflectionClass($interfaceName); - if (!$interface->isInterface()) { - throw new Nette\InvalidArgumentException("Class '$interfaceName' is not an interface."); + $definition = new \ReflectionClass($name); + if ($definition->isInterface()) { + $this->class->addImplement($name); + } elseif ($definition->isAbstract()) { + $this->class->setExtends($name); + } else { + throw new Nette\InvalidArgumentException("'$name' is not an interface or abstract class."); } - $this->class->addImplement($interfaceName); - foreach ($interface->getMethods() as $method) { - $this->inheritMethod($method->getName(), returnIfExists: true); + foreach ($definition->getMethods() as $method) { + if (!$this->class->hasMethod($method->getName()) && $method->isAbstract()) { + $this->implementMethod($method); + } + } + + if (PHP_VERSION_ID >= 80400) { + foreach ($definition->getProperties() as $property) { + if (!$this->class->hasProperty($property->getName()) && $property->isAbstract()) { + $this->implementProperty($property); + } + } } } + + + private function implementMethod(\ReflectionMethod $rm): Method + { + $method = (new Factory)->fromMethodReflection($rm); + $method->setAbstract(false); + $this->class->addMember($method); + return $method; + } + + + private function implementProperty(\ReflectionProperty $rp): Property + { + $property = (new Factory)->fromPropertyReflection($rp); + $property->setHooks([])->setAbstract(false); + $this->class->addMember($property); + return $property; + } + + + /** @deprecated use implement() */ + public function implementInterface(string $interfaceName): void + { + trigger_error(__METHOD__ . '() is deprecated, use implement()', E_USER_DEPRECATED); + $this->implement($interfaceName); + } } diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/ClassType.php b/app/vendor/nette/php-generator/src/PhpGenerator/ClassType.php index 4e082685e..8e04e24fb 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/ClassType.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/ClassType.php @@ -13,7 +13,7 @@ /** - * Class description. + * Definition of a class with properties, methods, constants, traits and PHP attributes. */ final class ClassType extends ClassLike { diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/Closure.php b/app/vendor/nette/php-generator/src/PhpGenerator/Closure.php index 843feedbe..49401e62a 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/Closure.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/Closure.php @@ -11,7 +11,7 @@ /** - * Closure. + * Definition of a closure. */ final class Closure { diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/Constant.php b/app/vendor/nette/php-generator/src/PhpGenerator/Constant.php index 44c1938c4..1e89d6e6c 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/Constant.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/Constant.php @@ -11,7 +11,7 @@ /** - * Class constant. + * Definition of a class constant. */ final class Constant { @@ -53,7 +53,8 @@ public function isFinal(): bool public function setType(?string $type): static { - $this->type = Helpers::validateType($type); + Helpers::validateType($type); + $this->type = $type; return $this; } diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/EnumCase.php b/app/vendor/nette/php-generator/src/PhpGenerator/EnumCase.php index 36bfd2fc7..ee099b93b 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/EnumCase.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/EnumCase.php @@ -11,7 +11,7 @@ /** - * Enum case. + * Definition of an enum case. */ final class EnumCase { diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/EnumType.php b/app/vendor/nette/php-generator/src/PhpGenerator/EnumType.php index 434561835..a4f472432 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/EnumType.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/EnumType.php @@ -13,7 +13,7 @@ /** - * Enum description. + * Definition of an enum with cases, methods, constants and traits. */ final class EnumType extends ClassLike { diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/Extractor.php b/app/vendor/nette/php-generator/src/PhpGenerator/Extractor.php index 5d39905e6..97d2f732a 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/Extractor.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/Extractor.php @@ -11,6 +11,7 @@ use Nette; use PhpParser; +use PhpParser\Modifiers; use PhpParser\Node; use PhpParser\NodeFinder; use PhpParser\ParserFactory; @@ -323,7 +324,7 @@ private function addPropertyToClass(ClassLike $class, Node\Stmt\Property $node): foreach ($node->props as $item) { $prop = $class->addProperty($item->name->toString()); $prop->setStatic($node->isStatic()); - $prop->setVisibility($this->toVisibility($node->flags)); + $prop->setVisibility($this->toVisibility($node->flags), $this->toSetterVisibility($node->flags)); $prop->setType($node->type ? $this->toPhp($node->type) : null); if ($item->default) { $prop->setValue($this->toValue($item->default)); @@ -331,6 +332,29 @@ private function addPropertyToClass(ClassLike $class, Node\Stmt\Property $node): $prop->setReadOnly((method_exists($node, 'isReadonly') && $node->isReadonly()) || ($class instanceof ClassType && $class->isReadOnly())); $this->addCommentAndAttributes($prop, $node); + + $prop->setAbstract((bool) ($node->flags & Node\Stmt\Class_::MODIFIER_ABSTRACT)); + $prop->setFinal((bool) ($node->flags & Node\Stmt\Class_::MODIFIER_FINAL)); + $this->addHooksToProperty($prop, $node); + } + } + + + private function addHooksToProperty(Property|PromotedParameter $prop, Node\Stmt\Property|Node\Param $node): void + { + if (!class_exists(Node\PropertyHook::class)) { + return; + } + + foreach ($node->hooks as $hookNode) { + $hook = $prop->addHook($hookNode->name->toString()); + $hook->setFinal((bool) ($hookNode->flags & Modifiers::FINAL)); + $this->setupFunction($hook, $hookNode); + if ($hookNode->body === null) { + $hook->setAbstract(); + } elseif (!is_array($hookNode->body)) { + $hook->setBody($this->getReformattedContents([$hookNode->body], 1), short: true); + } } } @@ -380,7 +404,7 @@ private function addFunctionToFile(PhpFile $phpFile, Node\Stmt\Function_ $node): private function addCommentAndAttributes( - PhpFile|ClassLike|Constant|Property|GlobalFunction|Method|Parameter|EnumCase|TraitUse $element, + PhpFile|ClassLike|Constant|Property|GlobalFunction|Method|Parameter|EnumCase|TraitUse|PropertyHook $element, Node $node, ): void { @@ -408,19 +432,29 @@ private function addCommentAndAttributes( } - private function setupFunction(GlobalFunction|Method $function, Node\FunctionLike $node): void + private function setupFunction(GlobalFunction|Method|PropertyHook $function, Node\FunctionLike $node): void { $function->setReturnReference($node->returnsByRef()); - $function->setReturnType($node->getReturnType() ? $this->toPhp($node->getReturnType()) : null); + if (!$function instanceof PropertyHook) { + $function->setReturnType($node->getReturnType() ? $this->toPhp($node->getReturnType()) : null); + } + foreach ($node->getParams() as $item) { - $visibility = $this->toVisibility($item->flags); - $isReadonly = (bool) ($item->flags & Node\Stmt\Class_::MODIFIER_READONLY); - $param = $visibility - ? ($function->addPromotedParameter($item->var->name))->setVisibility($visibility)->setReadonly($isReadonly) - : $function->addParameter($item->var->name); + $getVisibility = $this->toVisibility($item->flags); + $setVisibility = $this->toSetterVisibility($item->flags); + if ($getVisibility || $setVisibility) { + $param = $function->addPromotedParameter($item->var->name) + ->setVisibility($getVisibility, $setVisibility) + ->setReadonly((bool) ($item->flags & Node\Stmt\Class_::MODIFIER_READONLY)); + $this->addHooksToProperty($param, $item); + } else { + $param = $function->addParameter($item->var->name); + } $param->setType($item->type ? $this->toPhp($item->type) : null); $param->setReference($item->byRef); - $function->setVariadic($item->variadic); + if (!$function instanceof PropertyHook) { + $function->setVariadic($item->variadic); + } if ($item->default) { $param->setDefaultValue($this->toValue($item->default)); } @@ -483,9 +517,21 @@ private function toValue(Node\Expr $node): mixed private function toVisibility(int $flags): ?string { return match (true) { - (bool) ($flags & Node\Stmt\Class_::MODIFIER_PUBLIC) => ClassType::VisibilityPublic, - (bool) ($flags & Node\Stmt\Class_::MODIFIER_PROTECTED) => ClassType::VisibilityProtected, - (bool) ($flags & Node\Stmt\Class_::MODIFIER_PRIVATE) => ClassType::VisibilityPrivate, + (bool) ($flags & Node\Stmt\Class_::MODIFIER_PUBLIC) => Visibility::Public, + (bool) ($flags & Node\Stmt\Class_::MODIFIER_PROTECTED) => Visibility::Protected, + (bool) ($flags & Node\Stmt\Class_::MODIFIER_PRIVATE) => Visibility::Private, + default => null, + }; + } + + + private function toSetterVisibility(int $flags): ?string + { + return match (true) { + !class_exists(Node\PropertyHook::class) => null, + (bool) ($flags & Modifiers::PUBLIC_SET) => Visibility::Public, + (bool) ($flags & Modifiers::PROTECTED_SET) => Visibility::Protected, + (bool) ($flags & Modifiers::PRIVATE_SET) => Visibility::Private, default => null, }; } diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/Factory.php b/app/vendor/nette/php-generator/src/PhpGenerator/Factory.php index abc1f7639..12a5687d5 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/Factory.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/Factory.php @@ -199,9 +199,15 @@ public function fromCallable(callable $from): Method|GlobalFunction|Closure public function fromParameterReflection(\ReflectionParameter $from): Parameter { - $param = $from->isPromoted() - ? (new PromotedParameter($from->name))->setReadOnly(PHP_VERSION_ID >= 80100 && $from->getDeclaringClass()->getProperty($from->name)->isReadonly()) - : new Parameter($from->name); + if ($from->isPromoted()) { + $property = $from->getDeclaringClass()->getProperty($from->name); + $param = (new PromotedParameter($from->name)) + ->setVisibility($this->getVisibility($property)) + ->setReadOnly(PHP_VERSION_ID >= 80100 && $property->isReadonly()); + $this->addHooks($property, $param); + } else { + $param = new Parameter($from->name); + } $param->setReference($from->isPassedByReference()); $param->setType((string) $from->getType()); @@ -255,15 +261,58 @@ public function fromPropertyReflection(\ReflectionProperty $from): Property $prop->setStatic($from->isStatic()); $prop->setVisibility($this->getVisibility($from)); $prop->setType((string) $from->getType()); - $prop->setInitialized($from->hasType() && array_key_exists($prop->getName(), $defaults)); $prop->setReadOnly(PHP_VERSION_ID >= 80100 && $from->isReadOnly()); $prop->setComment(Helpers::unformatDocComment((string) $from->getDocComment())); $prop->setAttributes($this->getAttributes($from)); + + if (PHP_VERSION_ID >= 80400) { + $this->addHooks($from, $prop); + $isInterface = $from->getDeclaringClass()->isInterface(); + $prop->setFinal($from->isFinal() && !$prop->isPrivate(PropertyAccessMode::Set)); + $prop->setAbstract($from->isAbstract() && !$isInterface); + } return $prop; } + private function addHooks(\ReflectionProperty $from, Property|PromotedParameter $prop): void + { + if (PHP_VERSION_ID < 80400) { + return; + } + + $getV = $this->getVisibility($from); + $setV = $from->isPrivateSet() + ? Visibility::Private + : ($from->isProtectedSet() ? Visibility::Protected : $getV); + $defaultSetV = $from->isReadOnly() && $getV !== Visibility::Private + ? Visibility::Protected + : $getV; + if ($setV !== $defaultSetV) { + $prop->setVisibility($getV === Visibility::Public ? null : $getV, $setV); + } + + foreach ($from->getHooks() as $type => $hook) { + $params = $hook->getParameters(); + if ( + count($params) === 1 + && $params[0]->getName() === 'value' + && $params[0]->getType() == $from->getType() // intentionally == + ) { + $params = []; + } + $prop->addHook($type) + ->setParameters(array_map([$this, 'fromParameterReflection'], $params)) + ->setAbstract($hook->isAbstract()) + ->setFinal($hook->isFinal()) + ->setReturnReference($hook->returnsReference()) + ->setComment(Helpers::unformatDocComment((string) $hook->getDocComment())) + ->setAttributes($this->getAttributes($hook)); + } + } + + public function fromObject(object $obj): Literal { return new Literal('new \\' . $obj::class . '(/* unknown */)'); @@ -302,8 +351,8 @@ private function getAttributes($from): array private function getVisibility($from): string { return $from->isPrivate() - ? ClassLike::VisibilityPrivate - : ($from->isProtected() ? ClassLike::VisibilityProtected : ClassLike::VisibilityPublic); + ? Visibility::Private + : ($from->isProtected() ? Visibility::Protected : Visibility::Public); } diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/GlobalFunction.php b/app/vendor/nette/php-generator/src/PhpGenerator/GlobalFunction.php index c6b1e973f..c2ed0ac04 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/GlobalFunction.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/GlobalFunction.php @@ -13,7 +13,7 @@ /** - * Global function. + * Definition of a global function. */ final class GlobalFunction { diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/InterfaceType.php b/app/vendor/nette/php-generator/src/PhpGenerator/InterfaceType.php index 8743f8d00..3d179d25a 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/InterfaceType.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/InterfaceType.php @@ -13,12 +13,13 @@ /** - * Interface description. + * Definition of an interface with properties, methods and constants. */ final class InterfaceType extends ClassLike { use Traits\ConstantsAware; use Traits\MethodsAware; + use Traits\PropertiesAware; /** @var string[] */ private array $extends = []; @@ -54,12 +55,13 @@ public function addExtend(string $name): static /** * Adds a member. If it already exists, throws an exception or overwrites it if $overwrite is true. */ - public function addMember(Method|Constant $member, bool $overwrite = false): static + public function addMember(Method|Constant|Property $member, bool $overwrite = false): static { $name = $member->getName(); [$type, $n] = match (true) { $member instanceof Constant => ['consts', $name], $member instanceof Method => ['methods', strtolower($name)], + $member instanceof Property => ['properties', $name], }; if (!$overwrite && isset($this->$type[$n])) { throw new Nette\InvalidStateException("Cannot add member '$name', because it already exists."); @@ -69,11 +71,25 @@ public function addMember(Method|Constant $member, bool $overwrite = false): sta } + /** @throws Nette\InvalidStateException */ + public function validate(): void + { + foreach ($this->getProperties() as $property) { + if ($property->isInitialized()) { + throw new Nette\InvalidStateException("Property {$this->getName()}::\${$property->getName()}: Interface cannot have initialized properties."); + } elseif (!$property->getHooks()) { + throw new Nette\InvalidStateException("Property {$this->getName()}::\${$property->getName()}: Interface cannot have properties without hooks."); + } + } + } + + public function __clone(): void { parent::__clone(); $clone = fn($item) => clone $item; $this->consts = array_map($clone, $this->consts); $this->methods = array_map($clone, $this->methods); + $this->properties = array_map($clone, $this->properties); } } diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/Method.php b/app/vendor/nette/php-generator/src/PhpGenerator/Method.php index 0e8e765b8..92b8e00bf 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/Method.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/Method.php @@ -13,7 +13,7 @@ /** - * Class method. + * Definition of a class method. */ final class Method { @@ -98,7 +98,7 @@ public function addPromotedParameter(string $name, mixed $defaultValue = null): /** @throws Nette\InvalidStateException */ public function validate(): void { - if ($this->abstract && ($this->final || $this->visibility === ClassLike::VisibilityPrivate)) { + if ($this->abstract && ($this->final || $this->visibility === Visibility::Private)) { throw new Nette\InvalidStateException("Method $this->name() cannot be abstract and final or private at the same time."); } } diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/Parameter.php b/app/vendor/nette/php-generator/src/PhpGenerator/Parameter.php index 20651a316..910207eca 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/Parameter.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/Parameter.php @@ -13,7 +13,7 @@ /** - * Function/Method parameter description. + * Definition of a function/method parameter. */ class Parameter { diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/PhpFile.php b/app/vendor/nette/php-generator/src/PhpGenerator/PhpFile.php index 76b7947da..f38a10b39 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/PhpFile.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/PhpFile.php @@ -11,7 +11,7 @@ /** - * Instance of PHP file. + * Definition of a PHP file. * * Generates: * - opening tag (getName(); $returnType = $this->printReturnType($function); $params = $this->printParameters($function, strlen($line) + strlen($returnType) + 2); // 2 = parentheses - $body = Helpers::simplifyTaggedNames($function->getBody(), $this->namespace); - $body = ltrim(rtrim(Strings::normalize($body)) . "\n"); + $body = $this->printFunctionBody($function); $braceOnNextLine = $this->isBraceOnNextLine(str_contains($params, "\n"), (bool) $returnType); return $this->printDocComment($function) @@ -71,8 +70,7 @@ public function printClosure(Closure $closure, ?PhpNamespace $namespace = null): $useStr = strlen($tmp = implode(', ', $uses)) > $this->wrapLength && count($uses) > 1 ? "\n" . $this->indentation . implode(",\n" . $this->indentation, $uses) . ",\n" : $tmp; - $body = Helpers::simplifyTaggedNames($closure->getBody(), $this->namespace); - $body = ltrim(rtrim(Strings::normalize($body)) . "\n"); + $body = $this->printFunctionBody($closure); return $this->printAttributes($closure->getAttributes(), inline: true) . 'function ' @@ -93,14 +91,14 @@ public function printArrowFunction(Closure $closure, ?PhpNamespace $namespace = } } - $body = Helpers::simplifyTaggedNames($closure->getBody(), $this->namespace); + $body = $this->printFunctionBody($closure); return $this->printAttributes($closure->getAttributes()) . 'fn' . ($closure->getReturnReference() ? '&' : '') . $this->printParameters($closure) . $this->printReturnType($closure) - . ' => ' . trim(Strings::normalize($body)) . ';'; + . ' => ' . rtrim($body, "\n") . ';'; } @@ -117,8 +115,7 @@ public function printMethod(Method $method, ?PhpNamespace $namespace = null, boo . $method->getName(); $returnType = $this->printReturnType($method); $params = $this->printParameters($method, strlen($line) + strlen($returnType) + strlen($this->indentation) + 2); - $body = Helpers::simplifyTaggedNames($method->getBody(), $this->namespace); - $body = ltrim(rtrim(Strings::normalize($body)) . "\n"); + $body = $this->printFunctionBody($method); $braceOnNextLine = $this->isBraceOnNextLine(str_contains($params, "\n"), (bool) $returnType); return $this->printDocComment($method) @@ -132,6 +129,14 @@ public function printMethod(Method $method, ?PhpNamespace $namespace = null, boo } + private function printFunctionBody(Closure|GlobalFunction|Method|PropertyHook $function): string + { + $code = Helpers::simplifyTaggedNames($function->getBody(), $this->namespace); + $code = Strings::normalize($code); + return ltrim(rtrim($code) . "\n"); + } + + public function printClass( ClassType|InterfaceType|TraitType|EnumType $class, ?PhpNamespace $namespace = null, @@ -193,9 +198,9 @@ public function printClass( } $properties = []; - if ($class instanceof ClassType || $class instanceof TraitType) { + if ($class instanceof ClassType || $class instanceof TraitType || $class instanceof InterfaceType) { foreach ($class->getProperties() as $property) { - $properties[] = $this->printProperty($property, $readOnlyClass); + $properties[] = $this->printProperty($property, $readOnlyClass, $class instanceof InterfaceType); } } @@ -308,7 +313,7 @@ protected function printUses(PhpNamespace $namespace, string $of = PhpNamespace: } - protected function printParameters(Closure|GlobalFunction|Method $function, int $column = 0): string + protected function printParameters(Closure|GlobalFunction|Method|PropertyHook $function, int $column = 0): string { $special = false; foreach ($function->getParameters() as $param) { @@ -327,25 +332,26 @@ protected function printParameters(Closure|GlobalFunction|Method $function, int } - private function formatParameters(Closure|GlobalFunction|Method $function, bool $multiline): string + private function formatParameters(Closure|GlobalFunction|Method|PropertyHook $function, bool $multiline): string { $params = $function->getParameters(); $res = ''; foreach ($params as $param) { - $variadic = $function->isVariadic() && $param === end($params); + $variadic = !$function instanceof PropertyHook && $function->isVariadic() && $param === end($params); $attrs = $this->printAttributes($param->getAttributes(), inline: true); $res .= $this->printDocComment($param) . ($attrs ? ($multiline ? substr($attrs, 0, -1) . "\n" : $attrs) : '') . ($param instanceof PromotedParameter - ? ($param->getVisibility() ?: 'public') . ($param->isReadOnly() && $param->getType() ? ' readonly' : '') . ' ' + ? $this->printPropertyVisibility($param) . ($param->isReadOnly() && $param->getType() ? ' readonly' : '') . ' ' : '') . ltrim($this->printType($param->getType(), $param->isNullable()) . ' ') . ($param->isReference() ? '&' : '') . ($variadic ? '...' : '') . '$' . $param->getName() . ($param->hasDefaultValue() && !$variadic ? ' = ' . $this->dump($param->getDefaultValue()) : '') + . ($param instanceof PromotedParameter ? $this->printHooks($param) : '') . ($multiline ? ",\n" : ', '); } @@ -370,24 +376,39 @@ private function printConstant(Constant $const): string } - private function printProperty(Property $property, bool $readOnlyClass = false): string + private function printProperty(Property $property, bool $readOnlyClass = false, bool $isInterface = false): string { $property->validate(); $type = $property->getType(); - $def = (($property->getVisibility() ?: 'public') + $def = ($property->isAbstract() && !$isInterface ? 'abstract ' : '') + . ($property->isFinal() ? 'final ' : '') + . $this->printPropertyVisibility($property) . ($property->isStatic() ? ' static' : '') . (!$readOnlyClass && $property->isReadOnly() && $type ? ' readonly' : '') . ' ' . ltrim($this->printType($type, $property->isNullable()) . ' ') - . '$' . $property->getName()); + . '$' . $property->getName(); + + $defaultValue = $property->getValue() === null && !$property->isInitialized() + ? '' + : ' = ' . $this->dump($property->getValue(), strlen($def) + 3); // 3 = ' = ' return $this->printDocComment($property) . $this->printAttributes($property->getAttributes()) . $def - . ($property->getValue() === null && !$property->isInitialized() - ? '' - : ' = ' . $this->dump($property->getValue(), strlen($def) + 3)) // 3 = ' = ' - . ";\n"; + . $defaultValue + . ($this->printHooks($property, $isInterface) ?: ';') + . "\n"; + } + + + private function printPropertyVisibility(Property|PromotedParameter $param): string + { + $get = $param->getVisibility(PropertyAccessMode::Get); + $set = $param->getVisibility(PropertyAccessMode::Set); + return $set + ? ($get ? "$get $set(set)" : "$set(set)") + : $get ?? 'public'; } @@ -447,6 +468,37 @@ protected function printAttributes(array $attrs, bool $inline = false): string } + private function printHooks(Property|PromotedParameter $property, bool $isInterface = false): string + { + $hooks = $property->getHooks(); + if (!$hooks) { + return ''; + } + + $simple = true; + foreach ($property->getHooks() as $type => $hook) { + $simple = $simple && ($hook->isAbstract() || $isInterface); + $hooks[$type] = $this->printDocComment($hook) + . $this->printAttributes($hook->getAttributes()) + . ($hook->isAbstract() || $isInterface + ? ($hook->getReturnReference() ? '&' : '') + . $type . ';' + : ($hook->isFinal() ? 'final ' : '') + . ($hook->getReturnReference() ? '&' : '') + . $type + . ($hook->getParameters() ? $this->printParameters($hook) : '') + . ' ' + . ($hook->isShort() + ? '=> ' . $hook->getBody() . ';' + : "{\n" . $this->indent($this->printFunctionBody($hook)) . '}')); + } + + return $simple + ? ' { ' . implode(' ', $hooks) . ' }' + : " {\n" . $this->indent(implode("\n", $hooks)) . "\n}"; + } + + public function setTypeResolving(bool $state = true): static { $this->resolveTypes = $state; diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/PromotedParameter.php b/app/vendor/nette/php-generator/src/PhpGenerator/PromotedParameter.php index f9ae4efea..f81764ae1 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/PromotedParameter.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/PromotedParameter.php @@ -13,27 +13,11 @@ /** - * Promoted parameter in constructor. + * Definition of a promoted constructor parameter. */ final class PromotedParameter extends Parameter { - use Traits\VisibilityAware; - - private bool $readOnly = false; - - - public function setReadOnly(bool $state = true): static - { - $this->readOnly = $state; - return $this; - } - - - public function isReadOnly(): bool - { - return $this->readOnly; - } - + use Traits\PropertyLike; /** @throws Nette\InvalidStateException */ public function validate(): void @@ -42,4 +26,10 @@ public function validate(): void throw new Nette\InvalidStateException("Property \${$this->getName()}: Read-only properties are only supported on typed property."); } } + + + public function __clone(): void + { + $this->hooks = array_map(fn($item) => $item ? clone $item : $item, $this->hooks); + } } diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/Property.php b/app/vendor/nette/php-generator/src/PhpGenerator/Property.php index 49db18dd3..f8d6c72e2 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/Property.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/Property.php @@ -14,12 +14,12 @@ /** - * Class property description. + * Definition of a class property. */ final class Property { use Traits\NameAware; - use Traits\VisibilityAware; + use Traits\PropertyLike; use Traits\CommentAware; use Traits\AttributeAware; @@ -28,7 +28,8 @@ final class Property private ?string $type = null; private bool $nullable = false; private bool $initialized = false; - private bool $readOnly = false; + private bool $final = false; + private bool $abstract = false; public function setValue(mixed $val): static @@ -100,16 +101,29 @@ public function isInitialized(): bool } - public function setReadOnly(bool $state = true): static + public function setFinal(bool $state = true): static { - $this->readOnly = $state; + $this->final = $state; return $this; } - public function isReadOnly(): bool + public function isFinal(): bool { - return $this->readOnly; + return $this->final; + } + + + public function setAbstract(bool $state = true): static + { + $this->abstract = $state; + return $this; + } + + + public function isAbstract(): bool + { + return $this->abstract; } @@ -118,6 +132,21 @@ public function validate(): void { if ($this->readOnly && !$this->type) { throw new Nette\InvalidStateException("Property \$$this->name: Read-only properties are only supported on typed property."); + + } elseif ($this->abstract && $this->final) { + throw new Nette\InvalidStateException("Property \$$this->name cannot be abstract and final at the same time."); + + } elseif ( + $this->abstract + && !Nette\Utils\Arrays::some($this->getHooks(), fn($hook) => $hook->isAbstract()) + ) { + throw new Nette\InvalidStateException("Property \$$this->name: Abstract property must have at least one abstract hook."); } } + + + public function __clone(): void + { + $this->hooks = array_map(fn($item) => $item ? clone $item : $item, $this->hooks); + } } diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/PropertyAccessMode.php b/app/vendor/nette/php-generator/src/PhpGenerator/PropertyAccessMode.php new file mode 100644 index 000000000..ac53aeb87 --- /dev/null +++ b/app/vendor/nette/php-generator/src/PhpGenerator/PropertyAccessMode.php @@ -0,0 +1,33 @@ +body = $args === null + ? $code + : (new Dumper)->format($code, ...$args); + $this->short = $short; + return $this; + } + + + public function getBody(): string + { + return $this->body; + } + + + public function isShort(): bool + { + return $this->short && trim($this->body) !== ''; + } + + + public function setFinal(bool $state = true): static + { + $this->final = $state; + return $this; + } + + + public function isFinal(): bool + { + return $this->final; + } + + + public function setAbstract(bool $state = true): static + { + $this->abstract = $state; + return $this; + } + + + public function isAbstract(): bool + { + return $this->abstract; + } + + + /** @internal */ + public function setParameters(array $val): static + { + (function (Parameter ...$val) {})(...$val); + $this->parameters = []; + foreach ($val as $v) { + $this->parameters[$v->getName()] = $v; + } + + return $this; + } + + + /** @internal */ + public function getParameters(): array + { + return $this->parameters; + } + + + /** + * Adds a parameter. If it already exists, it overwrites it. + * @param string $name without $ + */ + public function addParameter(string $name): Parameter + { + return $this->parameters[$name] = new Parameter($name); + } + + + public function setReturnReference(bool $state = true): static + { + $this->returnReference = $state; + return $this; + } + + + public function getReturnReference(): bool + { + return $this->returnReference; + } +} diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/PropertyHookType.php b/app/vendor/nette/php-generator/src/PhpGenerator/PropertyHookType.php new file mode 100644 index 000000000..ca23532ff --- /dev/null +++ b/app/vendor/nette/php-generator/src/PhpGenerator/PropertyHookType.php @@ -0,0 +1,33 @@ + ?string, 'get' => ?string} */ + private array $visibility = [PropertyAccessMode::Set => null, PropertyAccessMode::Get => null]; + private bool $readOnly = false; + + /** @var array */ + private array $hooks = [PropertyHookType::Set => null, PropertyHookType::Get => null]; + + + /** + * @param 'public'|'protected'|'private'|null $get + * @param 'public'|'protected'|'private'|null $set + */ + public function setVisibility(?string $get, ?string $set = null): static + { + $this->visibility = [ + PropertyAccessMode::Set => $set === null ? $set : Visibility::from($set), + PropertyAccessMode::Get => $get === null ? $get : Visibility::from($get), + ]; + return $this; + } + + + /** @param 'set'|'get' $mode */ + public function getVisibility(string $mode = PropertyAccessMode::Get): ?string + { + return $this->visibility[PropertyAccessMode::from($mode)]; + } + + + /** @param 'set'|'get' $mode */ + public function setPublic(string $mode = PropertyAccessMode::Get): static + { + $this->visibility[PropertyAccessMode::from($mode)] = Visibility::Public; + return $this; + } + + + /** @param 'set'|'get' $mode */ + public function isPublic(string $mode = PropertyAccessMode::Get): bool + { + return in_array($this->visibility[PropertyAccessMode::from($mode)], [Visibility::Public, null], true); + } + + + /** @param 'set'|'get' $mode */ + public function setProtected(string $mode = PropertyAccessMode::Get): static + { + $this->visibility[PropertyAccessMode::from($mode)] = Visibility::Protected; + return $this; + } + + + /** @param 'set'|'get' $mode */ + public function isProtected(string $mode = PropertyAccessMode::Get): bool + { + return $this->visibility[PropertyAccessMode::from($mode)] === Visibility::Protected; + } + + + /** @param 'set'|'get' $mode */ + public function setPrivate(string $mode = PropertyAccessMode::Get): static + { + $this->visibility[PropertyAccessMode::from($mode)] = Visibility::Private; + return $this; + } + + + /** @param 'set'|'get' $mode */ + public function isPrivate(string $mode = PropertyAccessMode::Get): bool + { + return $this->visibility[PropertyAccessMode::from($mode)] === Visibility::Private; + } + + + public function setReadOnly(bool $state = true): static + { + $this->readOnly = $state; + return $this; + } + + + public function isReadOnly(): bool + { + return $this->readOnly; + } + + + /** + * Replaces all hooks. + * @param PropertyHook[] $hooks + */ + public function setHooks(array $hooks): static + { + (function (PropertyHook ...$hooks) {})(...$hooks); + $this->hooks = $hooks; + return $this; + } + + + /** @return array */ + public function getHooks(): array + { + return array_filter($this->hooks); + } + + + /** @param 'set'|'get' $type */ + public function addHook(string $type, string $shortBody = ''): PropertyHook + { + return $this->hooks[PropertyHookType::from($type)] = (new PropertyHook) + ->setBody($shortBody, short: true); + } + + + /** @param 'set'|'get' $type */ + public function getHook(string $type): ?PropertyHook + { + return $this->hooks[PropertyHookType::from($type)] ?? null; + } + + + /** @param 'set'|'get' $type */ + public function hasHook(string $type): bool + { + return isset($this->hooks[PropertyHookType::from($type)]); + } +} diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/Traits/VisibilityAware.php b/app/vendor/nette/php-generator/src/PhpGenerator/Traits/VisibilityAware.php index 0b3230eda..0a3a383f0 100644 --- a/app/vendor/nette/php-generator/src/PhpGenerator/Traits/VisibilityAware.php +++ b/app/vendor/nette/php-generator/src/PhpGenerator/Traits/VisibilityAware.php @@ -9,8 +9,7 @@ namespace Nette\PhpGenerator\Traits; -use Nette; -use Nette\PhpGenerator\ClassLike; +use Nette\PhpGenerator\Visibility; /** @@ -22,16 +21,10 @@ trait VisibilityAware private ?string $visibility = null; - /** - * @param string|null $val public|protected|private - */ - public function setVisibility(?string $val): static + /** @param 'public'|'protected'|'private'|null $value */ + public function setVisibility(?string $value): static { - if (!in_array($val, [ClassLike::VisibilityPublic, ClassLike::VisibilityProtected, ClassLike::VisibilityPrivate, null], true)) { - throw new Nette\InvalidArgumentException('Argument must be public|protected|private.'); - } - - $this->visibility = $val; + $this->visibility = $value === null ? $value : Visibility::from($value); return $this; } @@ -44,39 +37,39 @@ public function getVisibility(): ?string public function setPublic(): static { - $this->visibility = ClassLike::VisibilityPublic; + $this->visibility = Visibility::Public; return $this; } public function isPublic(): bool { - return $this->visibility === ClassLike::VisibilityPublic || $this->visibility === null; + return $this->visibility === Visibility::Public || $this->visibility === null; } public function setProtected(): static { - $this->visibility = ClassLike::VisibilityProtected; + $this->visibility = Visibility::Protected; return $this; } public function isProtected(): bool { - return $this->visibility === ClassLike::VisibilityProtected; + return $this->visibility === Visibility::Protected; } public function setPrivate(): static { - $this->visibility = ClassLike::VisibilityPrivate; + $this->visibility = Visibility::Private; return $this; } public function isPrivate(): bool { - return $this->visibility === ClassLike::VisibilityPrivate; + return $this->visibility === Visibility::Private; } } diff --git a/app/vendor/nette/php-generator/src/PhpGenerator/Visibility.php b/app/vendor/nette/php-generator/src/PhpGenerator/Visibility.php new file mode 100644 index 000000000..a31c75c82 --- /dev/null +++ b/app/vendor/nette/php-generator/src/PhpGenerator/Visibility.php @@ -0,0 +1,34 @@ + + */ +class CallWithDeprecatedIniOptionRule implements Rule +{ + + private const INI_FUNCTIONS = [ + 'ini_get', + 'ini_set', + 'ini_alter', + 'ini_restore', + 'get_cfg_var', + ]; + + private const DEPRECATED_OPTIONS = [ + // deprecated since unknown version + 'mbstring.http_input' => 0, + 'mbstring.http_output' => 0, + 'mbstring.internal_encoding' => 0, + 'pdo_odbc.db2_instance_name' => 0, + 'enable_dl' => 0, + + 'iconv.input_encoding' => 50600, + 'iconv.output_encoding' => 50600, + 'iconv.internal_encoding' => 50600, + + 'mbstring.func_overload' => 70200, + 'track_errors' => 70200, + + 'allow_url_include' => 70400, + + 'assert.quiet_eval' => 80000, + + 'filter.default' => 80100, + 'oci8.old_oci_close_semantics' => 80100, + + 'assert.active' => 80300, + 'assert.exception' => 80300, + 'assert.bail' => 80300, + 'assert.warning' => 80300, + + 'session.sid_length' => 80400, + 'session.sid_bits_per_character' => 80400, + ]; + + private ReflectionProvider $reflectionProvider; + + private DeprecatedScopeHelper $deprecatedScopeHelper; + + private PhpVersion $phpVersion; + + public function __construct( + ReflectionProvider $reflectionProvider, + DeprecatedScopeHelper $deprecatedScopeHelper, + PhpVersion $phpVersion + ) + { + $this->reflectionProvider = $reflectionProvider; + $this->deprecatedScopeHelper = $deprecatedScopeHelper; + $this->phpVersion = $phpVersion; + } + + public function getNodeType(): string + { + return FuncCall::class; + } + + public function processNode(Node $node, Scope $scope): array + { + if ($this->deprecatedScopeHelper->isScopeDeprecated($scope)) { + return []; + } + + if (!($node->name instanceof Name)) { + return []; + } + + if (count($node->getArgs()) < 1) { + return []; + } + + try { + $function = $this->reflectionProvider->getFunction($node->name, $scope); + } catch (FunctionNotFoundException $e) { + // Other rules will notify if the function is not found + return []; + } + + if (!in_array(strtolower($function->getName()), self::INI_FUNCTIONS, true)) { + return []; + } + + $phpVersionId = $this->phpVersion->getVersionId(); + $iniType = $scope->getType($node->getArgs()[0]->value); + foreach ($iniType->getConstantStrings() as $string) { + if (!array_key_exists($string->getValue(), self::DEPRECATED_OPTIONS)) { + continue; + } + + if ($phpVersionId < self::DEPRECATED_OPTIONS[$string->getValue()]) { + continue; + } + + return [ + RuleErrorBuilder::message(sprintf( + "Call to function %s() with deprecated option '%s'.", + $function->getName(), + $string->getValue(), + ))->identifier('function.deprecated')->build(), + ]; + } + + return []; + } + +} diff --git a/app/vendor/phpstan/phpstan/phpstan.phar b/app/vendor/phpstan/phpstan/phpstan.phar index 62b2a1ea981ffc09171dc5734d76c4457308bd03..68f55ac5889e944d4100ef0919f12ff5d2dffa62 100755 GIT binary patch delta 390536 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

RR(Bwi$?QMks0!2w)|%^-tS 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�VZKJXv7^6SVzw- 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

Z#LfIN!9D7Am?^%c*M%i`*BnWvAIh$@7SN@ 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

  • ylW3^^`NP5H+rToeadnWhPWrmCv16 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 L{~OqEXutmlBrzBZ delta 346195 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

    h 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%0DQ8W{sQCG~g zzCZiAj}aXk;aLu9gtRsdhv0>q+dnJ&A=?jDVVM99ILby{el`M%K4GL(1^+9b_EEwi z`kbI&b)9$XnefEA;469MbL8hYzMV@m7ONPjJGzQ zrdkzl{-$d8JQ^4nHl)f}ceqLjyRQgvlS;!2Kdv#Yk%-B~4dI-(l;Qsd+_;@m;dU$s zC!U;j2&

    )l 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 Ve%m&yJ}tBQpa1!vzHte0{|meies2H( diff --git a/app/vendor/phpstan/phpstan/phpstan.phar.asc b/app/vendor/phpstan/phpstan/phpstan.phar.asc index 06624a97a..ce9502e2c 100644 --- a/app/vendor/phpstan/phpstan/phpstan.phar.asc +++ b/app/vendor/phpstan/phpstan/phpstan.phar.asc @@ -1,16 +1,16 @@ -----BEGIN PGP SIGNATURE----- -iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmc5+rcACgkQUcZzBf/C -5cCQ5g/+Odj8c1mm0Fj4rJ3Qrj36uMU+YaVCt2+s9W0Fey0Dgt3zoasBqbkWuoje -npZgB1Dhfi+/FvaezxHdl9BCwQRD6D1TFvNSPKjBPihdCG61LXOH4FJZ+tY2Ugw9 -ysEsOO1y0QtCx8A5bslatvDH2hCfFcwxakG4t741md3DbRVK1Evar6xySYfjHqGI -0U7xeAFmoRrXb1B81Nhmknx/MjHB0SDXCZ3G3GSsn9xtXk8JB1Pv9/A5g0jR7SFc -ciqA3FUQVlQeZVQvUPy3yTlhudCrVU2dtCgUyOUrAwyB1guriCqxQgzRRSUyLCMI -fy7MF2HHWU0xtBAJu3VWMhx1Xev0jLEF/kf1oGGsef/DO43WV40cybwLPItOpyjX -aKfFjmNHAlN+NTzneYBLtM7UGGV4Nj5RpgiCDc3jB9EBMY8gvOJ7Dr7KCWV2Fp35 -jjq64yHasnzXS7nsgYNsqzMHs3y9ZXUGnixE+nFszoeCEUEmuNSpusaoSy28YBTP -/EHzOljf4w98IxFo0ednuVLrXNI+mZpj9rfuTj106zFHI9/Vb+rwqJ3VD8v319mI -FNzTO/fACdp1KS35zxHQ4gLQ8q3RYqncgG9LNZ15fkdk9pi5v+c8Dh3UTWd3VM0V -bd/jl4qOTMG5w8y6w1niM3oOC3edV0BtMSbbA1kcfilJ0F83p1M= -=bWVd +iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmdhsTIACgkQUcZzBf/C +5cAxtQ//a0q8ZsH8aOlSksbcQcAfq89wcFUkJmGjW5xsZwwUjKptZa9QlecuMnWg +mysYMVieTbVuxnImTTkeh1kJbTTIrM6zNeU69+AYaLx7mhpAcQ8LyK4KZltBNtqc +g1p5SN8V7mReooTDBtJVmpZ4HFDcwwcMoInKK6SsRYvEsv/FpT+CElLRuUtd8MUr +2f58zUZSYAjTDSlcDCkfKdpdTjWh0veT+qDdWzZV4GWF8tPcPx6Wp03bmM6tR72b +anjedeuLZ6X0JbH8vVGfnLFkApoF9nTV1QWlgWsTolmiqkc85feDmGY22wTIkIBs +Cuy6d+E+JPdCJO9JUVH4rBvvJponOJ6+Guj2n2CB+Nezwb8DqYhaIPBWPA6Vw/jO +TN27vyyKx32JXSiYmj96Pkb4KiC3tTX+4Y6HzxmRLgvws2IM2/yRBTD1wVZCFdvt +/aqwPrX0+1DG7/B6mPV91EI5wT669UT/xhUfFA1SGTYj+lxWZE53RUSSIbWixLAc +Qhdg0lX/zODImSYAJRzA5qLu+k3Kg0A9Lgmqp0zWIqY/AbgV112nZ3wHZc7P+k5+ +y6l7u7qAFK3nTsVFiCQo4Rrr1gXTX45awMegeqt/ynTF6IGg9XV0ORAv86BnKZBe +3Os52r90a75+jS8M7DkBSQNsXzyMyN0sndZKLQu4m33qUhQv30Q= +=+nLt -----END PGP SIGNATURE----- diff --git a/app/vendor/spaze/phpcs-phar/composer.json b/app/vendor/spaze/phpcs-phar/composer.json index 5b71e7ce7..f3a52fe57 100644 --- a/app/vendor/spaze/phpcs-phar/composer.json +++ b/app/vendor/spaze/phpcs-phar/composer.json @@ -14,8 +14,8 @@ ], "replace": { "dealerdirect/phpcodesniffer-composer-installer": "*", - "phpcsstandards/php_codesniffer": "3.11.1", - "squizlabs/php_codesniffer": "3.11.1" + "phpcsstandards/php_codesniffer": "3.11.2", + "squizlabs/php_codesniffer": "3.11.2" }, "require": { "composer-runtime-api": "^2.1" diff --git a/app/vendor/spaze/phpcs-phar/phpcs.phar b/app/vendor/spaze/phpcs-phar/phpcs.phar index 218d8eec35a6d2c6250ed57e9bf41ded98dea651..8c9f5d8a173aeed03e769939b199c57c046fa7f3 100644 GIT binary patch delta 18303 zcmb_^cU+W5*XXi+_t|~+*-DoMK}3+EsHiB|3m_<9M?geHX;SPWYU~Ac)Uk_6G#ZVX zXq-f2Nlap|Ni0b;Xf%o4n8aT0nVA*Md++zV_kO?c{lkGdXU?2{&YXw5r+BBg0 zA#%F8XRhDfZ`i`|GTFKkYxw(aGWI_a{w*!ZiRe{cSeRQ9UOc?`c_*2SV$yYx)=>Q# z)9AwNoHv#uUTne<>8e_lya$bPbD-UBW&=IFQ6ZDPKkd6{*bHVH7vX&D=d(_u^KK2; z#yvqM+g-o+KGeZ2fNc!jFO#Kwx_CZnpp0f4s{x~L#XK{rQTm~gDhu0e4x3T)N2jAp z%0LC&gp{gS2Kc18Oy)$Bd!wPsa0bB2RtylRk;x93V$Gsf>j1W|wyb@cT>dsccdAO_&o+|f}edvy@HHo%T<&C;WS3_&UY$*6>M{pdosU}VnY zWMAM$?A}Jp(iw#cgG~0|*H_=7Gb`fRMgWlf@yk~DS-rB>@AQuZ%fD2w@w+5v?`DRgLN|5^d@`Z&P7gCyE>9>Dzq}$ zUY}~h z06k4I*_Tar4?uduf7XqTJ%s-rfvU>m$=+4Z zWhRfpyrDyBDw_jLP|eWwooU}ba51AnMPr=O%t0JT*F6s|KSsp`obs@>Dw=pdt4jmb(Nnqc+ocLJb1rBv=k*Fu$XhJek6k_8!>3XkJxUU?~(u zzN1Ac)9vi`y+G<<&2`7WSiA3HjXJ$}_*zd?SQ(6NR`NS`+GMi(%eOs4XMCyl%xLWt zZ$|0@B#n0233l)?stXN5?{Hrl2Y1|V{$wSKoyAl6W;rNHXNonTk<)k{`>Cl+HsREm zJuGOc@=uldqJjQ8DIShfozV3U^Jm9VWhyt@sj`;Lmxc0HD8-;f$3}C~6~M@nW2gUM zjGQXdqmiS%8RG2Gtx%`(2JGj;@*J)J5J%rJ^+Q$?=(WzVJj+O6+Oi#9pS%TdM=Qp1 zpFRTmyc6&ek}lZYFpt~aAF|7hj>~RA%!DFil?nBk%Na637JF_Vu^;uQ51h|7qrLMu znSpSJY}Bzct`pp+?m>kfc-@}Da#8XE75b`*C#kc5eW63h1CXmBx-*Aokq<$Sk0)05 zcWr8sWj@D#1b_|8OcTMccuj}_YgRw^TT;hG?tIS0ZlEi+bKAu(yfd4-WqZJm?s-bX zu(PTfF=d^E&8X(PE`!m6(ds$;qAHLsZDFhjOI2A_79>`Q*sIni*=W@ChoV5ON7tpp;KtjH|$jk9{299+c9Tnd;}c(WuiLULU^!GDjX9-oO<9 z(E_gc2_V3}2Nlhk!8>4%xf<9SxLkP*oVOuDOSx3@;kfSiWhdD2-;6UhBOqPw%Ms|>Jf`qeT}p+!7dgx*#iW%6`*0k(rd-YUX7!uiMETpEu14J^c`=L3 zfs~tnVPEIEf>bk3gVM(H=spNyt9pdZWPVmN&VVXKoAetbHYyoiE3UQvg(prRO;09{ z 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 diff --git a/app/vendor/spaze/phpcs-phar/phpcs.phar.asc b/app/vendor/spaze/phpcs-phar/phpcs.phar.asc index 78ddf2a298192201b9a6c2a115034155e3c4e70f..1a195b082f58ef56f9678c363f8466e9ea1e5818 100644 GIT binary patch delta 534 zcmV+x0_pwJ1k(hNBLi8+B9SI3e``?>{v&WX_Zx+}X7S|owvFZ{2Hmq8yG5DO5f-rn ziS%%&r98P;@3h}|{iX~T5{KL#NlxE4MB||=iM#dEzVND_N*Q8akk}BkwTnr#V&xx3 z7%%}YoATF055o;;a=ptlD4*pr%{qfkR_wBZwB3;}KGnx(PD6k@^jE1*e>XgBa1C#& zcE?4y{+Xt`!ir%L%}N5|-W(4}_hfKwMa1WHLu55JYR+NL zgH%lUm_*e`j#-o(8-84ji;cAPoIk`xQjNYw?-+%w~_&e@auTk%)biM9W1L*lEa5HGtd>wL+`}jiI8vCCUH}w#Hy@ zwhR&`1RR#vhkGLAVb}BUsHEPjokE?+M_sx$)Ss2^FI`>{dbf%cdREOYa_sj1@qG}( z^c4Gd#zn0Mw+oUeOKf-j`YaqF$jnjOK;!-Cp`R%ME(Z|5e9yp(f76`--b{5VCE-S? zfy~muE~Sb6SR@1w*21RZK~Y!*gMKxnB8ZqNu7o6Xo;cQnfae|LkUA7*4(09P`e Y%cGYhpCLDg=n~l`2z9JT<>L{6kXs%FPyhe` delta 534 zcmV+x0_pwJ1k(hNBLg^#%aJB2e@ICW{0&&0YVF??Z-EmNauSYcDOu@ecztO^Yi@uz z(=KWeU)U}>@CBY9;MM1kkHDVZee*$&7zLIFNG}gosWj7bYg0vlf>sxVgDQxIANn6O zUL7aP32iJv2T&Mr^2;I`%{Q}I8$_p)fhpIzNwMUM|4U|2Gb}xYjGIJFe~`QQ{}a?w z@nuRlAdJ$CKeRr6Xlx;WPN&UFdENVrnd0tGsT`nZ<7r;cWnQ$JN2Zs~4G0HRnXa9; zv7f>PcBZko!{cC>BLnf*55_uc`bk_9N;Ck(TE+Lx*Njf4C47F+(TjaOsm8Cg_YiYV zMl0iu(}7WdocHc&jDzfIf90cz@Wy3)69A;M^hpRpcB8J-@fLBfBa?Y>aKttfU86jxtLs6_!^e9^>15sP3k$Q|DtIh&bz*G4`S;BXyXr9w{RV`KKTfSe-VQP@;uOthZ zHI_I~n+szECb8xQ?wp7sHCFs6BXU>sCX^K1@X+6prIjo)B&PqDPoyKQ6u0*C^7=wS Ys>Qf26=zc9EQ(Y&2;Jv9sTF+hY|kkOng9R* diff --git a/app/vendor/symfony/cache/Adapter/AbstractAdapter.php b/app/vendor/symfony/cache/Adapter/AbstractAdapter.php index 5d6336eed..c03868da1 100644 --- a/app/vendor/symfony/cache/Adapter/AbstractAdapter.php +++ b/app/vendor/symfony/cache/Adapter/AbstractAdapter.php @@ -40,7 +40,7 @@ protected function __construct(string $namespace = '', int $defaultLifetime = 0) $this->namespace = '' === $namespace ? '' : CacheItem::validateKey($namespace).static::NS_SEPARATOR; $this->defaultLifetime = $defaultLifetime; if (null !== $this->maxIdLength && \strlen($namespace) > $this->maxIdLength - 24) { - throw new InvalidArgumentException(sprintf('Namespace must be %d chars max, %d given ("%s").', $this->maxIdLength - 24, \strlen($namespace), $namespace)); + throw new InvalidArgumentException(\sprintf('Namespace must be %d chars max, %d given ("%s").', $this->maxIdLength - 24, \strlen($namespace), $namespace)); } self::$createCacheItem ??= \Closure::bind( static function ($key, $value, $isHit) { @@ -158,7 +158,7 @@ public function commit(): bool $ok = false; $v = $values[$id]; $type = get_debug_type($v); - $message = sprintf('Failed to save key "{key}" of type %s%s', $type, $e instanceof \Exception ? ': '.$e->getMessage() : '.'); + $message = \sprintf('Failed to save key "{key}" of type %s%s', $type, $e instanceof \Exception ? ': '.$e->getMessage() : '.'); CacheItem::log($this->logger, $message, ['key' => substr($id, \strlen($this->namespace)), 'exception' => $e instanceof \Exception ? $e : null, 'cache-adapter' => get_debug_type($this)]); } } else { @@ -181,7 +181,7 @@ public function commit(): bool } $ok = false; $type = get_debug_type($v); - $message = sprintf('Failed to save key "{key}" of type %s%s', $type, $e instanceof \Exception ? ': '.$e->getMessage() : '.'); + $message = \sprintf('Failed to save key "{key}" of type %s%s', $type, $e instanceof \Exception ? ': '.$e->getMessage() : '.'); CacheItem::log($this->logger, $message, ['key' => substr($id, \strlen($this->namespace)), 'exception' => $e instanceof \Exception ? $e : null, 'cache-adapter' => get_debug_type($this)]); } } diff --git a/app/vendor/symfony/cache/Adapter/AbstractTagAwareAdapter.php b/app/vendor/symfony/cache/Adapter/AbstractTagAwareAdapter.php index ef62b4fb2..822c30f09 100644 --- a/app/vendor/symfony/cache/Adapter/AbstractTagAwareAdapter.php +++ b/app/vendor/symfony/cache/Adapter/AbstractTagAwareAdapter.php @@ -42,7 +42,7 @@ protected function __construct(string $namespace = '', int $defaultLifetime = 0) $this->namespace = '' === $namespace ? '' : CacheItem::validateKey($namespace).':'; $this->defaultLifetime = $defaultLifetime; if (null !== $this->maxIdLength && \strlen($namespace) > $this->maxIdLength - 24) { - throw new InvalidArgumentException(sprintf('Namespace must be %d chars max, %d given ("%s").', $this->maxIdLength - 24, \strlen($namespace), $namespace)); + throw new InvalidArgumentException(\sprintf('Namespace must be %d chars max, %d given ("%s").', $this->maxIdLength - 24, \strlen($namespace), $namespace)); } self::$createCacheItem ??= \Closure::bind( static function ($key, $value, $isHit) { @@ -186,7 +186,7 @@ public function commit(): bool $e = $this->doSave($values, $lifetime, $addTagData, $removeTagData); } catch (\Exception $e) { } - if (true === $e || [] === $e) { + if ([] === $e) { continue; } if (\is_array($e) || 1 === \count($values)) { @@ -194,7 +194,7 @@ public function commit(): bool $ok = false; $v = $values[$id]; $type = get_debug_type($v); - $message = sprintf('Failed to save key "{key}" of type %s%s', $type, $e instanceof \Exception ? ': '.$e->getMessage() : '.'); + $message = \sprintf('Failed to save key "{key}" of type %s%s', $type, $e instanceof \Exception ? ': '.$e->getMessage() : '.'); CacheItem::log($this->logger, $message, ['key' => substr($id, \strlen($this->namespace)), 'exception' => $e instanceof \Exception ? $e : null, 'cache-adapter' => get_debug_type($this)]); } } else { @@ -213,12 +213,12 @@ public function commit(): bool $e = $this->doSave($values, $lifetime, $addTagData, $removeTagData); } catch (\Exception $e) { } - if (true === $e || [] === $e) { + if ([] === $e) { continue; } $ok = false; $type = get_debug_type($v); - $message = sprintf('Failed to save key "{key}" of type %s%s', $type, $e instanceof \Exception ? ': '.$e->getMessage() : '.'); + $message = \sprintf('Failed to save key "{key}" of type %s%s', $type, $e instanceof \Exception ? ': '.$e->getMessage() : '.'); CacheItem::log($this->logger, $message, ['key' => substr($id, \strlen($this->namespace)), 'exception' => $e instanceof \Exception ? $e : null, 'cache-adapter' => get_debug_type($this)]); } } diff --git a/app/vendor/symfony/cache/Adapter/ApcuAdapter.php b/app/vendor/symfony/cache/Adapter/ApcuAdapter.php index 03b512f05..ddb721005 100644 --- a/app/vendor/symfony/cache/Adapter/ApcuAdapter.php +++ b/app/vendor/symfony/cache/Adapter/ApcuAdapter.php @@ -79,7 +79,7 @@ protected function doHave(string $id): bool protected function doClear(string $namespace): bool { return isset($namespace[0]) && class_exists(\APCUIterator::class, false) && ('cli' !== \PHP_SAPI || filter_var(\ini_get('apc.enable_cli'), \FILTER_VALIDATE_BOOL)) - ? apcu_delete(new \APCUIterator(sprintf('/^%s/', preg_quote($namespace, '/')), \APC_ITER_KEY)) + ? apcu_delete(new \APCUIterator(\sprintf('/^%s/', preg_quote($namespace, '/')), \APC_ITER_KEY)) : apcu_clear_cache(); } diff --git a/app/vendor/symfony/cache/Adapter/ArrayAdapter.php b/app/vendor/symfony/cache/Adapter/ArrayAdapter.php index 0f1c49db9..7b9238774 100644 --- a/app/vendor/symfony/cache/Adapter/ArrayAdapter.php +++ b/app/vendor/symfony/cache/Adapter/ArrayAdapter.php @@ -12,6 +12,7 @@ namespace Symfony\Component\Cache\Adapter; use Psr\Cache\CacheItemInterface; +use Psr\Clock\ClockInterface; use Psr\Log\LoggerAwareInterface; use Psr\Log\LoggerAwareTrait; use Symfony\Component\Cache\CacheItem; @@ -44,13 +45,14 @@ public function __construct( private bool $storeSerialized = true, private float $maxLifetime = 0, private int $maxItems = 0, + private ?ClockInterface $clock = null, ) { if (0 > $maxLifetime) { - throw new InvalidArgumentException(sprintf('Argument $maxLifetime must be positive, %F passed.', $maxLifetime)); + throw new InvalidArgumentException(\sprintf('Argument $maxLifetime must be positive, %F passed.', $maxLifetime)); } if (0 > $maxItems) { - throw new InvalidArgumentException(sprintf('Argument $maxItems must be a positive integer, %d passed.', $maxItems)); + throw new InvalidArgumentException(\sprintf('Argument $maxItems must be a positive integer, %d passed.', $maxItems)); } self::$createCacheItem ??= \Closure::bind( @@ -94,7 +96,7 @@ public function delete(string $key): bool public function hasItem(mixed $key): bool { - if (\is_string($key) && isset($this->expiries[$key]) && $this->expiries[$key] > microtime(true)) { + if (\is_string($key) && isset($this->expiries[$key]) && $this->expiries[$key] > $this->getCurrentTime()) { if ($this->maxItems) { // Move the item last in the storage $value = $this->values[$key]; @@ -129,7 +131,7 @@ public function getItems(array $keys = []): iterable { \assert(self::validateKeys($keys)); - return $this->generateItems($keys, microtime(true), self::$createCacheItem); + return $this->generateItems($keys, $this->getCurrentTime(), self::$createCacheItem); } public function deleteItem(mixed $key): bool @@ -159,7 +161,7 @@ public function save(CacheItemInterface $item): bool $value = $item["\0*\0value"]; $expiry = $item["\0*\0expiry"]; - $now = microtime(true); + $now = $this->getCurrentTime(); if (null !== $expiry) { if (!$expiry) { @@ -216,7 +218,7 @@ public function commit(): bool public function clear(string $prefix = ''): bool { if ('' !== $prefix) { - $now = microtime(true); + $now = $this->getCurrentTime(); foreach ($this->values as $key => $value) { if (!isset($this->expiries[$key]) || $this->expiries[$key] <= $now || str_starts_with($key, $prefix)) { @@ -307,7 +309,7 @@ private function freeze($value, string $key): string|int|float|bool|array|\UnitE } catch (\Exception $e) { unset($this->values[$key], $this->tags[$key]); $type = get_debug_type($value); - $message = sprintf('Failed to save key "{key}" of type %s: %s', $type, $e->getMessage()); + $message = \sprintf('Failed to save key "{key}" of type %s: %s', $type, $e->getMessage()); CacheItem::log($this->logger, $message, ['key' => $key, 'exception' => $e, 'cache-adapter' => get_debug_type($this)]); return null; @@ -356,4 +358,9 @@ private function validateKeys(array $keys): bool return true; } + + private function getCurrentTime(): float + { + return $this->clock?->now()->format('U.u') ?? microtime(true); + } } diff --git a/app/vendor/symfony/cache/Adapter/ChainAdapter.php b/app/vendor/symfony/cache/Adapter/ChainAdapter.php index 1418cff04..09fcfdcc0 100644 --- a/app/vendor/symfony/cache/Adapter/ChainAdapter.php +++ b/app/vendor/symfony/cache/Adapter/ChainAdapter.php @@ -52,7 +52,7 @@ public function __construct( foreach ($adapters as $adapter) { if (!$adapter instanceof CacheItemPoolInterface) { - throw new InvalidArgumentException(sprintf('The class "%s" does not implement the "%s" interface.', get_debug_type($adapter), CacheItemPoolInterface::class)); + throw new InvalidArgumentException(\sprintf('The class "%s" does not implement the "%s" interface.', get_debug_type($adapter), CacheItemPoolInterface::class)); } if ('cli' === \PHP_SAPI && $adapter instanceof ApcuAdapter && !filter_var(\ini_get('apc.enable_cli'), \FILTER_VALIDATE_BOOL)) { continue; // skip putting APCu in the chain when the backend is disabled @@ -76,7 +76,7 @@ static function ($sourceItem, $item, $defaultLifetime, $sourceMetadata = null) { $item->metadata = $item->newMetadata = $sourceItem->metadata = $sourceMetadata; if (isset($item->metadata[CacheItem::METADATA_EXPIRY])) { - $item->expiresAt(\DateTimeImmutable::createFromFormat('U.u', sprintf('%.6F', $item->metadata[CacheItem::METADATA_EXPIRY]))); + $item->expiresAt(\DateTimeImmutable::createFromFormat('U.u', \sprintf('%.6F', $item->metadata[CacheItem::METADATA_EXPIRY]))); } elseif (0 < $defaultLifetime) { $item->expiresAfter($defaultLifetime); } diff --git a/app/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php b/app/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php index ae2bea7ed..c69c777c9 100644 --- a/app/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php +++ b/app/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php @@ -63,7 +63,7 @@ public function __construct( ?MarshallerInterface $marshaller = null, ) { if (isset($namespace[0]) && preg_match('#[^-+.A-Za-z0-9]#', $namespace, $match)) { - throw new InvalidArgumentException(sprintf('Namespace contains "%s" but only characters in [-+.A-Za-z0-9] are allowed.', $match[0])); + throw new InvalidArgumentException(\sprintf('Namespace contains "%s" but only characters in [-+.A-Za-z0-9] are allowed.', $match[0])); } if ($connOrDsn instanceof Connection) { @@ -140,7 +140,7 @@ public function prune(): bool if ('' !== $this->namespace) { $deleteSql .= " AND $this->idCol LIKE ?"; - $params[] = sprintf('%s%%', $this->namespace); + $params[] = \sprintf('%s%%', $this->namespace); $paramTypes[] = ParameterType::STRING; } diff --git a/app/vendor/symfony/cache/Adapter/MemcachedAdapter.php b/app/vendor/symfony/cache/Adapter/MemcachedAdapter.php index 033d9871e..d882ef1b1 100644 --- a/app/vendor/symfony/cache/Adapter/MemcachedAdapter.php +++ b/app/vendor/symfony/cache/Adapter/MemcachedAdapter.php @@ -311,7 +311,7 @@ private function getClient(): \Memcached throw new CacheException('MemcachedAdapter: "serializer" option must be "php" or "igbinary".'); } if ('' !== $prefix = (string) $this->lazyClient->getOption(\Memcached::OPT_PREFIX_KEY)) { - throw new CacheException(sprintf('MemcachedAdapter: "prefix_key" option must be empty when using proxified connections, "%s" given.', $prefix)); + throw new CacheException(\sprintf('MemcachedAdapter: "prefix_key" option must be empty when using proxified connections, "%s" given.', $prefix)); } return $this->client = $this->lazyClient; diff --git a/app/vendor/symfony/cache/Adapter/ParameterNormalizer.php b/app/vendor/symfony/cache/Adapter/ParameterNormalizer.php index a6896402f..483df1c0b 100644 --- a/app/vendor/symfony/cache/Adapter/ParameterNormalizer.php +++ b/app/vendor/symfony/cache/Adapter/ParameterNormalizer.php @@ -29,7 +29,7 @@ public static function normalizeDuration(string $duration): int try { return \DateTimeImmutable::createFromFormat('U', 0)->add(new \DateInterval($duration))->getTimestamp(); } catch (\Exception $e) { - throw new \InvalidArgumentException(sprintf('Cannot parse date interval "%s".', $duration), 0, $e); + throw new \InvalidArgumentException(\sprintf('Cannot parse date interval "%s".', $duration), 0, $e); } } } diff --git a/app/vendor/symfony/cache/Adapter/PdoAdapter.php b/app/vendor/symfony/cache/Adapter/PdoAdapter.php index b18428d67..525e2c6db 100644 --- a/app/vendor/symfony/cache/Adapter/PdoAdapter.php +++ b/app/vendor/symfony/cache/Adapter/PdoAdapter.php @@ -57,16 +57,16 @@ class PdoAdapter extends AbstractAdapter implements PruneableInterface public function __construct(#[\SensitiveParameter] \PDO|string $connOrDsn, string $namespace = '', int $defaultLifetime = 0, array $options = [], ?MarshallerInterface $marshaller = null) { if (\is_string($connOrDsn) && str_contains($connOrDsn, '://')) { - throw new InvalidArgumentException(sprintf('Usage of Doctrine DBAL URL with "%s" is not supported. Use a PDO DSN or "%s" instead.', __CLASS__, DoctrineDbalAdapter::class)); + throw new InvalidArgumentException(\sprintf('Usage of Doctrine DBAL URL with "%s" is not supported. Use a PDO DSN or "%s" instead.', __CLASS__, DoctrineDbalAdapter::class)); } if (isset($namespace[0]) && preg_match('#[^-+.A-Za-z0-9]#', $namespace, $match)) { - throw new InvalidArgumentException(sprintf('Namespace contains "%s" but only characters in [-+.A-Za-z0-9] are allowed.', $match[0])); + throw new InvalidArgumentException(\sprintf('Namespace contains "%s" but only characters in [-+.A-Za-z0-9] are allowed.', $match[0])); } if ($connOrDsn instanceof \PDO) { if (\PDO::ERRMODE_EXCEPTION !== $connOrDsn->getAttribute(\PDO::ATTR_ERRMODE)) { - throw new InvalidArgumentException(sprintf('"%s" requires PDO error mode attribute be set to throw Exceptions (i.e. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)).', __CLASS__)); + throw new InvalidArgumentException(\sprintf('"%s" requires PDO error mode attribute be set to throw Exceptions (i.e. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)).', __CLASS__)); } $this->conn = $connOrDsn; @@ -123,7 +123,7 @@ public function createTable(): void 'pgsql' => "CREATE TABLE $this->table ($this->idCol VARCHAR(255) NOT NULL PRIMARY KEY, $this->dataCol BYTEA NOT NULL, $this->lifetimeCol INTEGER, $this->timeCol INTEGER NOT NULL)", 'oci' => "CREATE TABLE $this->table ($this->idCol VARCHAR2(255) NOT NULL PRIMARY KEY, $this->dataCol BLOB NOT NULL, $this->lifetimeCol INTEGER, $this->timeCol INTEGER NOT NULL)", 'sqlsrv' => "CREATE TABLE $this->table ($this->idCol VARCHAR(255) NOT NULL PRIMARY KEY, $this->dataCol VARBINARY(MAX) NOT NULL, $this->lifetimeCol INTEGER, $this->timeCol INTEGER NOT NULL)", - default => throw new \DomainException(sprintf('Creating the cache table is currently not implemented for PDO driver "%s".', $driver)), + default => throw new \DomainException(\sprintf('Creating the cache table is currently not implemented for PDO driver "%s".', $driver)), }; $this->getConnection()->exec($sql); @@ -147,7 +147,7 @@ public function prune(): bool $delete->bindValue(':time', time(), \PDO::PARAM_INT); if ('' !== $this->namespace) { - $delete->bindValue(':namespace', sprintf('%s%%', $this->namespace), \PDO::PARAM_STR); + $delete->bindValue(':namespace', \sprintf('%s%%', $this->namespace), \PDO::PARAM_STR); } try { return $delete->execute(); diff --git a/app/vendor/symfony/cache/Adapter/PhpArrayAdapter.php b/app/vendor/symfony/cache/Adapter/PhpArrayAdapter.php index f92a2380f..8047a8a28 100644 --- a/app/vendor/symfony/cache/Adapter/PhpArrayAdapter.php +++ b/app/vendor/symfony/cache/Adapter/PhpArrayAdapter.php @@ -41,7 +41,7 @@ class PhpArrayAdapter implements AdapterInterface, CacheInterface, PruneableInte private static array $valuesCache = []; /** - * @param string $file The PHP file were values are cached + * @param string $file The PHP file where values are cached * @param AdapterInterface $fallbackPool A pool to fallback on when an item is not hit */ public function __construct( @@ -111,7 +111,7 @@ public function get(string $key, callable $callback, ?float $beta = null, ?array public function getItem(mixed $key): CacheItem { if (!\is_string($key)) { - throw new InvalidArgumentException(sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); + throw new InvalidArgumentException(\sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); } if (!isset($this->values)) { $this->initialize(); @@ -141,7 +141,7 @@ public function getItems(array $keys = []): iterable { foreach ($keys as $key) { if (!\is_string($key)) { - throw new InvalidArgumentException(sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); + throw new InvalidArgumentException(\sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); } } if (!isset($this->values)) { @@ -154,7 +154,7 @@ public function getItems(array $keys = []): iterable public function hasItem(mixed $key): bool { if (!\is_string($key)) { - throw new InvalidArgumentException(sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); + throw new InvalidArgumentException(\sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); } if (!isset($this->values)) { $this->initialize(); @@ -166,7 +166,7 @@ public function hasItem(mixed $key): bool public function deleteItem(mixed $key): bool { if (!\is_string($key)) { - throw new InvalidArgumentException(sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); + throw new InvalidArgumentException(\sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); } if (!isset($this->values)) { $this->initialize(); @@ -182,7 +182,7 @@ public function deleteItems(array $keys): bool foreach ($keys as $key) { if (!\is_string($key)) { - throw new InvalidArgumentException(sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); + throw new InvalidArgumentException(\sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); } if (isset($this->keys[$key])) { @@ -250,21 +250,21 @@ public function warmUp(array $values): array { if (file_exists($this->file)) { if (!is_file($this->file)) { - throw new InvalidArgumentException(sprintf('Cache path exists and is not a file: "%s".', $this->file)); + throw new InvalidArgumentException(\sprintf('Cache path exists and is not a file: "%s".', $this->file)); } if (!is_writable($this->file)) { - throw new InvalidArgumentException(sprintf('Cache file is not writable: "%s".', $this->file)); + throw new InvalidArgumentException(\sprintf('Cache file is not writable: "%s".', $this->file)); } } else { $directory = \dirname($this->file); if (!is_dir($directory) && !@mkdir($directory, 0777, true)) { - throw new InvalidArgumentException(sprintf('Cache directory does not exist and cannot be created: "%s".', $directory)); + throw new InvalidArgumentException(\sprintf('Cache directory does not exist and cannot be created: "%s".', $directory)); } if (!is_writable($directory)) { - throw new InvalidArgumentException(sprintf('Cache directory is not writable: "%s".', $directory)); + throw new InvalidArgumentException(\sprintf('Cache directory is not writable: "%s".', $directory)); } } @@ -291,7 +291,7 @@ public function warmUp(array $values): array try { $value = VarExporter::export($value, $isStaticValue, $preload); } catch (\Exception $e) { - throw new InvalidArgumentException(sprintf('Cache key "%s" has non-serializable "%s" value.', $key, get_debug_type($value)), 0, $e); + throw new InvalidArgumentException(\sprintf('Cache key "%s" has non-serializable "%s" value.', $key, get_debug_type($value)), 0, $e); } } elseif (\is_string($value)) { // Wrap "N;" in a closure to not confuse it with an encoded `null` @@ -300,7 +300,7 @@ public function warmUp(array $values): array } $value = var_export($value, true); } elseif (!\is_scalar($value)) { - throw new InvalidArgumentException(sprintf('Cache key "%s" has non-serializable "%s" value.', $key, get_debug_type($value))); + throw new InvalidArgumentException(\sprintf('Cache key "%s" has non-serializable "%s" value.', $key, get_debug_type($value))); } else { $value = var_export($value, true); } @@ -321,7 +321,7 @@ public function warmUp(array $values): array $dump .= "\n], [\n\n{$dumpedValues}\n]];\n"; - $tmpFile = uniqid($this->file, true); + $tmpFile = tempnam(\dirname($this->file), basename($this->file)); file_put_contents($tmpFile, $dump); @chmod($tmpFile, 0666 & ~umask()); diff --git a/app/vendor/symfony/cache/Adapter/PhpFilesAdapter.php b/app/vendor/symfony/cache/Adapter/PhpFilesAdapter.php index 917ff161f..df0d0e713 100644 --- a/app/vendor/symfony/cache/Adapter/PhpFilesAdapter.php +++ b/app/vendor/symfony/cache/Adapter/PhpFilesAdapter.php @@ -216,7 +216,7 @@ protected function doSave(array $values, int $lifetime): array|bool try { $value = VarExporter::export($value, $isStaticValue); } catch (\Exception $e) { - throw new InvalidArgumentException(sprintf('Cache key "%s" has non-serializable "%s" value.', $key, get_debug_type($value)), 0, $e); + throw new InvalidArgumentException(\sprintf('Cache key "%s" has non-serializable "%s" value.', $key, get_debug_type($value)), 0, $e); } } elseif (\is_string($value)) { // Wrap "N;" in a closure to not confuse it with an encoded `null` @@ -225,7 +225,7 @@ protected function doSave(array $values, int $lifetime): array|bool } $value = var_export($value, true); } elseif (!\is_scalar($value)) { - throw new InvalidArgumentException(sprintf('Cache key "%s" has non-serializable "%s" value.', $key, get_debug_type($value))); + throw new InvalidArgumentException(\sprintf('Cache key "%s" has non-serializable "%s" value.', $key, get_debug_type($value))); } else { $value = var_export($value, true); } @@ -254,7 +254,7 @@ protected function doSave(array $values, int $lifetime): array|bool } if (!$ok && !is_writable($this->directory)) { - throw new CacheException(sprintf('Cache directory is not writable (%s).', $this->directory)); + throw new CacheException(\sprintf('Cache directory is not writable (%s).', $this->directory)); } return $ok; @@ -305,10 +305,8 @@ private function getFileKey(string $file): string */ class LazyValue { - public string $file; - - public function __construct(string $file) - { - $this->file = $file; + public function __construct( + public string $file, + ) { } } diff --git a/app/vendor/symfony/cache/Adapter/ProxyAdapter.php b/app/vendor/symfony/cache/Adapter/ProxyAdapter.php index c022dd5fa..562122606 100644 --- a/app/vendor/symfony/cache/Adapter/ProxyAdapter.php +++ b/app/vendor/symfony/cache/Adapter/ProxyAdapter.php @@ -73,7 +73,7 @@ static function ($key, $innerItem, $poolHash) { self::$setInnerItem ??= \Closure::bind( static function (CacheItemInterface $innerItem, CacheItem $item, $expiry = null) { $innerItem->set($item->pack()); - $innerItem->expiresAt(($expiry ?? $item->expiry) ? \DateTimeImmutable::createFromFormat('U.u', sprintf('%.6F', $expiry ?? $item->expiry)) : null); + $innerItem->expiresAt(($expiry ?? $item->expiry) ? \DateTimeImmutable::createFromFormat('U.u', \sprintf('%.6F', $expiry ?? $item->expiry)) : null); }, null, CacheItem::class diff --git a/app/vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php b/app/vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php index f71622b6b..7b282375c 100644 --- a/app/vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php +++ b/app/vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php @@ -66,7 +66,7 @@ public function __construct( ?MarshallerInterface $marshaller = null, ) { if ($redis instanceof \Predis\ClientInterface && $redis->getConnection() instanceof ClusterInterface && !$redis->getConnection() instanceof PredisCluster) { - throw new InvalidArgumentException(sprintf('Unsupported Predis cluster connection: only "%s" is, "%s" given.', PredisCluster::class, get_debug_type($redis->getConnection()))); + throw new InvalidArgumentException(\sprintf('Unsupported Predis cluster connection: only "%s" is, "%s" given.', PredisCluster::class, get_debug_type($redis->getConnection()))); } $isRelay = $redis instanceof Relay; @@ -75,7 +75,7 @@ public function __construct( foreach (\is_array($compression) ? $compression : [$compression] as $c) { if ($isRelay ? Relay::COMPRESSION_NONE : \Redis::COMPRESSION_NONE !== $c) { - throw new InvalidArgumentException(sprintf('redis compression must be disabled when using "%s", use "%s" instead.', static::class, DeflateMarshaller::class)); + throw new InvalidArgumentException(\sprintf('redis compression must be disabled when using "%s", use "%s" instead.', static::class, DeflateMarshaller::class)); } } } @@ -87,7 +87,7 @@ protected function doSave(array $values, int $lifetime, array $addTagData = [], { $eviction = $this->getRedisEvictionPolicy(); if ('noeviction' !== $eviction && !str_starts_with($eviction, 'volatile-')) { - throw new LogicException(sprintf('Redis maxmemory-policy setting "%s" is *not* supported by RedisTagAwareAdapter, use "noeviction" or "volatile-*" eviction policies.', $eviction)); + throw new LogicException(\sprintf('Redis maxmemory-policy setting "%s" is *not* supported by RedisTagAwareAdapter, use "noeviction" or "volatile-*" eviction policies.', $eviction)); } // serialize values diff --git a/app/vendor/symfony/cache/Adapter/TagAwareAdapter.php b/app/vendor/symfony/cache/Adapter/TagAwareAdapter.php index 34082db1f..53c989047 100644 --- a/app/vendor/symfony/cache/Adapter/TagAwareAdapter.php +++ b/app/vendor/symfony/cache/Adapter/TagAwareAdapter.php @@ -207,12 +207,10 @@ public function clear(string $prefix = ''): bool unset($this->deferred[$key]); } } - } else { - $this->deferred = []; - } - if ($this->pool instanceof AdapterInterface) { return $this->pool->clear($prefix); + } else { + $this->deferred = []; } return $this->pool->clear(); diff --git a/app/vendor/symfony/cache/Adapter/TraceableAdapter.php b/app/vendor/symfony/cache/Adapter/TraceableAdapter.php index b5bce143f..8fe6cf376 100644 --- a/app/vendor/symfony/cache/Adapter/TraceableAdapter.php +++ b/app/vendor/symfony/cache/Adapter/TraceableAdapter.php @@ -27,18 +27,17 @@ */ class TraceableAdapter implements AdapterInterface, CacheInterface, PruneableInterface, ResettableInterface { - protected AdapterInterface $pool; private array $calls = []; - public function __construct(AdapterInterface $pool) - { - $this->pool = $pool; + public function __construct( + protected AdapterInterface $pool, + ) { } public function get(string $key, callable $callback, ?float $beta = null, ?array &$metadata = null): mixed { if (!$this->pool instanceof CacheInterface) { - throw new \BadMethodCallException(sprintf('Cannot call "%s::get()": this class doesn\'t implement "%s".', get_debug_type($this->pool), CacheInterface::class)); + throw new \BadMethodCallException(\sprintf('Cannot call "%s::get()": this class doesn\'t implement "%s".', get_debug_type($this->pool), CacheInterface::class)); } $isHit = true; diff --git a/app/vendor/symfony/cache/CHANGELOG.md b/app/vendor/symfony/cache/CHANGELOG.md index cab9bf61c..038915c46 100644 --- a/app/vendor/symfony/cache/CHANGELOG.md +++ b/app/vendor/symfony/cache/CHANGELOG.md @@ -1,6 +1,13 @@ CHANGELOG ========= +7.2 +--- + + * `igbinary_serialize()` is no longer used instead of `serialize()` by default when the igbinary extension is installed, + due to behavior compatibilities between the two + * Add optional `Psr\Clock\ClockInterface` parameter to `ArrayAdapter` + 7.1 --- diff --git a/app/vendor/symfony/cache/CacheItem.php b/app/vendor/symfony/cache/CacheItem.php index 1a81706da..ec2c0c5c4 100644 --- a/app/vendor/symfony/cache/CacheItem.php +++ b/app/vendor/symfony/cache/CacheItem.php @@ -81,7 +81,7 @@ public function expiresAfter(mixed $time): static } elseif (\is_int($time)) { $this->expiry = $time + microtime(true); } else { - throw new InvalidArgumentException(sprintf('Expiration date must be an integer, a DateInterval or null, "%s" given.', get_debug_type($time))); + throw new InvalidArgumentException(\sprintf('Expiration date must be an integer, a DateInterval or null, "%s" given.', get_debug_type($time))); } return $this; @@ -90,14 +90,14 @@ public function expiresAfter(mixed $time): static public function tag(mixed $tags): static { if (!$this->isTaggable) { - throw new LogicException(sprintf('Cache item "%s" comes from a non tag-aware pool: you cannot tag it.', $this->key)); + throw new LogicException(\sprintf('Cache item "%s" comes from a non tag-aware pool: you cannot tag it.', $this->key)); } if (!\is_array($tags) && !$tags instanceof \Traversable) { // don't use is_iterable(), it's slow $tags = [$tags]; } foreach ($tags as $tag) { if (!\is_string($tag) && !$tag instanceof \Stringable) { - throw new InvalidArgumentException(sprintf('Cache tag must be string or object that implements __toString(), "%s" given.', get_debug_type($tag))); + throw new InvalidArgumentException(\sprintf('Cache tag must be string or object that implements __toString(), "%s" given.', get_debug_type($tag))); } $tag = (string) $tag; if (isset($this->newMetadata[self::METADATA_TAGS][$tag])) { @@ -107,7 +107,7 @@ public function tag(mixed $tags): static throw new InvalidArgumentException('Cache tag length must be greater than zero.'); } if (false !== strpbrk($tag, self::RESERVED_CHARACTERS)) { - throw new InvalidArgumentException(sprintf('Cache tag "%s" contains reserved characters "%s".', $tag, self::RESERVED_CHARACTERS)); + throw new InvalidArgumentException(\sprintf('Cache tag "%s" contains reserved characters "%s".', $tag, self::RESERVED_CHARACTERS)); } $this->newMetadata[self::METADATA_TAGS][$tag] = $tag; } @@ -130,13 +130,13 @@ public function getMetadata(): array public static function validateKey($key): string { if (!\is_string($key)) { - throw new InvalidArgumentException(sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); + throw new InvalidArgumentException(\sprintf('Cache key must be string, "%s" given.', get_debug_type($key))); } if ('' === $key) { throw new InvalidArgumentException('Cache key length must be greater than zero.'); } if (false !== strpbrk($key, self::RESERVED_CHARACTERS)) { - throw new InvalidArgumentException(sprintf('Cache key "%s" contains reserved characters "%s".', $key, self::RESERVED_CHARACTERS)); + throw new InvalidArgumentException(\sprintf('Cache key "%s" contains reserved characters "%s".', $key, self::RESERVED_CHARACTERS)); } return $key; diff --git a/app/vendor/symfony/cache/DependencyInjection/CachePoolPass.php b/app/vendor/symfony/cache/DependencyInjection/CachePoolPass.php index 081d82cd7..e62febbcb 100644 --- a/app/vendor/symfony/cache/DependencyInjection/CachePoolPass.php +++ b/app/vendor/symfony/cache/DependencyInjection/CachePoolPass.php @@ -106,7 +106,7 @@ public function process(ContainerBuilder $container): void } if (ChainAdapter::class === $chainedClass) { - throw new InvalidArgumentException(sprintf('Invalid service "%s": chain of adapters cannot reference another chain, found "%s".', $id, $chainedPool->getParent())); + throw new InvalidArgumentException(\sprintf('Invalid service "%s": chain of adapters cannot reference another chain, found "%s".', $id, $chainedPool->getParent())); } $i = 0; @@ -164,7 +164,7 @@ public function process(ContainerBuilder $container): void unset($tags[0][$attr]); } if (!empty($tags[0])) { - throw new InvalidArgumentException(sprintf('Invalid "cache.pool" tag for service "%s": accepted attributes are "clearer", "provider", "name", "namespace", "default_lifetime", "early_expiration_message_bus" and "reset", found "%s".', $id, implode('", "', array_keys($tags[0])))); + throw new InvalidArgumentException(\sprintf('Invalid "cache.pool" tag for service "%s": accepted attributes are "clearer", "provider", "name", "namespace", "default_lifetime", "early_expiration_message_bus" and "reset", found "%s".', $id, implode('", "', array_keys($tags[0])))); } if (null !== $clearer) { diff --git a/app/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php b/app/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php index 69b69fb4b..68386f57c 100644 --- a/app/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php +++ b/app/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php @@ -35,7 +35,7 @@ public function process(ContainerBuilder $container): void $class = $container->getParameterBag()->resolveValue($container->getDefinition($id)->getClass()); if (!$reflection = $container->getReflectionClass($class)) { - throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id)); + throw new InvalidArgumentException(\sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id)); } if ($reflection->implementsInterface(PruneableInterface::class)) { diff --git a/app/vendor/symfony/cache/LockRegistry.php b/app/vendor/symfony/cache/LockRegistry.php index c5c5fde89..6923b40b3 100644 --- a/app/vendor/symfony/cache/LockRegistry.php +++ b/app/vendor/symfony/cache/LockRegistry.php @@ -105,7 +105,7 @@ public static function compute(callable $callback, ItemInterface $item, bool &$s $locked = flock($lock, \LOCK_EX | \LOCK_NB, $wouldBlock); if ($locked || !$wouldBlock) { - $logger?->info(sprintf('Lock %s, now computing item "{key}"', $locked ? 'acquired' : 'not supported'), ['key' => $item->getKey()]); + $logger?->info(\sprintf('Lock %s, now computing item "{key}"', $locked ? 'acquired' : 'not supported'), ['key' => $item->getKey()]); self::$lockedFiles[$key] = true; $value = $callback($item, $save); diff --git a/app/vendor/symfony/cache/Marshaller/DefaultMarshaller.php b/app/vendor/symfony/cache/Marshaller/DefaultMarshaller.php index 34bbeb893..02ebcfadf 100644 --- a/app/vendor/symfony/cache/Marshaller/DefaultMarshaller.php +++ b/app/vendor/symfony/cache/Marshaller/DefaultMarshaller.php @@ -20,17 +20,15 @@ */ class DefaultMarshaller implements MarshallerInterface { - private bool $useIgbinarySerialize = true; + private bool $useIgbinarySerialize = false; private bool $throwOnSerializationFailure = false; public function __construct(?bool $useIgbinarySerialize = null, bool $throwOnSerializationFailure = false) { - if (null === $useIgbinarySerialize) { - $useIgbinarySerialize = \extension_loaded('igbinary') && version_compare('3.1.6', phpversion('igbinary'), '<='); - } elseif ($useIgbinarySerialize && (!\extension_loaded('igbinary') || version_compare('3.1.6', phpversion('igbinary'), '>'))) { + if ($useIgbinarySerialize && (!\extension_loaded('igbinary') || version_compare('3.1.6', phpversion('igbinary'), '>'))) { throw new CacheException(\extension_loaded('igbinary') ? 'Please upgrade the "igbinary" PHP extension to v3.1.6 or higher.' : 'The "igbinary" PHP extension is not loaded.'); } - $this->useIgbinarySerialize = $useIgbinarySerialize; + $this->useIgbinarySerialize = true === $useIgbinarySerialize; $this->throwOnSerializationFailure = $throwOnSerializationFailure; } diff --git a/app/vendor/symfony/cache/Messenger/EarlyExpirationMessage.php b/app/vendor/symfony/cache/Messenger/EarlyExpirationMessage.php index 6056ebab4..de8256b9c 100644 --- a/app/vendor/symfony/cache/Messenger/EarlyExpirationMessage.php +++ b/app/vendor/symfony/cache/Messenger/EarlyExpirationMessage.php @@ -20,10 +20,6 @@ */ final class EarlyExpirationMessage { - private CacheItem $item; - private string $pool; - private string|array $callback; - public static function create(ReverseContainer $reverseContainer, callable $callback, CacheItem $item, AdapterInterface $pool): ?self { try { @@ -91,10 +87,10 @@ public function findCallback(ReverseContainer $reverseContainer): callable return $callback; } - private function __construct(CacheItem $item, string $pool, string|array $callback) - { - $this->item = $item; - $this->pool = $pool; - $this->callback = $callback; + private function __construct( + private CacheItem $item, + private string $pool, + private string|array $callback, + ) { } } diff --git a/app/vendor/symfony/cache/Psr16Cache.php b/app/vendor/symfony/cache/Psr16Cache.php index f21384fee..01494d714 100644 --- a/app/vendor/symfony/cache/Psr16Cache.php +++ b/app/vendor/symfony/cache/Psr16Cache.php @@ -135,7 +135,7 @@ public function getMultiple($keys, $default = null): iterable if ($keys instanceof \Traversable) { $keys = iterator_to_array($keys, false); } elseif (!\is_array($keys)) { - throw new InvalidArgumentException(sprintf('Cache keys must be array or Traversable, "%s" given.', get_debug_type($keys))); + throw new InvalidArgumentException(\sprintf('Cache keys must be array or Traversable, "%s" given.', get_debug_type($keys))); } try { @@ -166,7 +166,7 @@ public function setMultiple($values, $ttl = null): bool { $valuesIsArray = \is_array($values); if (!$valuesIsArray && !$values instanceof \Traversable) { - throw new InvalidArgumentException(sprintf('Cache values must be array or Traversable, "%s" given.', get_debug_type($values))); + throw new InvalidArgumentException(\sprintf('Cache values must be array or Traversable, "%s" given.', get_debug_type($values))); } $items = []; @@ -215,7 +215,7 @@ public function deleteMultiple($keys): bool if ($keys instanceof \Traversable) { $keys = iterator_to_array($keys, false); } elseif (!\is_array($keys)) { - throw new InvalidArgumentException(sprintf('Cache keys must be array or Traversable, "%s" given.', get_debug_type($keys))); + throw new InvalidArgumentException(\sprintf('Cache keys must be array or Traversable, "%s" given.', get_debug_type($keys))); } try { diff --git a/app/vendor/symfony/cache/Traits/AbstractAdapterTrait.php b/app/vendor/symfony/cache/Traits/AbstractAdapterTrait.php index 222bc545f..6a716743f 100644 --- a/app/vendor/symfony/cache/Traits/AbstractAdapterTrait.php +++ b/app/vendor/symfony/cache/Traits/AbstractAdapterTrait.php @@ -300,7 +300,7 @@ private function generateItems(iterable $items, array &$keys): \Generator try { foreach ($items as $id => $value) { if (!isset($keys[$id])) { - throw new InvalidArgumentException(sprintf('Could not match value id "%s" to keys "%s".', $id, implode('", "', $keys))); + throw new InvalidArgumentException(\sprintf('Could not match value id "%s" to keys "%s".', $id, implode('", "', $keys))); } $key = $keys[$id]; unset($keys[$id]); diff --git a/app/vendor/symfony/cache/Traits/ContractsTrait.php b/app/vendor/symfony/cache/Traits/ContractsTrait.php index 8d830f0ab..d461582d3 100644 --- a/app/vendor/symfony/cache/Traits/ContractsTrait.php +++ b/app/vendor/symfony/cache/Traits/ContractsTrait.php @@ -62,7 +62,7 @@ public function setCallbackWrapper(?callable $callbackWrapper): callable private function doGet(AdapterInterface $pool, string $key, callable $callback, ?float $beta, ?array &$metadata = null): mixed { if (0 > $beta ??= 1.0) { - throw new InvalidArgumentException(sprintf('Argument "$beta" provided to "%s::get()" must be a positive number, %f given.', static::class, $beta)); + throw new InvalidArgumentException(\sprintf('Argument "$beta" provided to "%s::get()" must be a positive number, %f given.', static::class, $beta)); } static $setMetadata; diff --git a/app/vendor/symfony/cache/Traits/FilesystemCommonTrait.php b/app/vendor/symfony/cache/Traits/FilesystemCommonTrait.php index 3e8c3b1e3..98e0d3ec5 100644 --- a/app/vendor/symfony/cache/Traits/FilesystemCommonTrait.php +++ b/app/vendor/symfony/cache/Traits/FilesystemCommonTrait.php @@ -32,7 +32,7 @@ private function init(string $namespace, ?string $directory): void } if (isset($namespace[0])) { if (preg_match('#[^-+_.A-Za-z0-9]#', $namespace, $match)) { - throw new InvalidArgumentException(sprintf('Namespace contains "%s" but only characters in [-+_.A-Za-z0-9] are allowed.', $match[0])); + throw new InvalidArgumentException(\sprintf('Namespace contains "%s" but only characters in [-+_.A-Za-z0-9] are allowed.', $match[0])); } $directory .= \DIRECTORY_SEPARATOR.$namespace; } else { @@ -44,7 +44,7 @@ private function init(string $namespace, ?string $directory): void $directory .= \DIRECTORY_SEPARATOR; // On Windows the whole path is limited to 258 chars if ('\\' === \DIRECTORY_SEPARATOR && \strlen($directory) > 234) { - throw new InvalidArgumentException(sprintf('Cache directory too long (%s).', $directory)); + throw new InvalidArgumentException(\sprintf('Cache directory too long (%s).', $directory)); } $this->directory = $directory; @@ -108,7 +108,6 @@ private function write(string $file, string $data, ?int $expiresAt = null): bool if ('\\' === \DIRECTORY_SEPARATOR) { $success = copy($tmp, $file); - $unlink = true; } else { $success = rename($tmp, $file); $unlink = !$success; diff --git a/app/vendor/symfony/cache/Traits/FilesystemTrait.php b/app/vendor/symfony/cache/Traits/FilesystemTrait.php index 47e9b838f..05fa10e96 100644 --- a/app/vendor/symfony/cache/Traits/FilesystemTrait.php +++ b/app/vendor/symfony/cache/Traits/FilesystemTrait.php @@ -92,7 +92,7 @@ protected function doSave(array $values, int $lifetime): array|bool } if ($failed && !is_writable($this->directory)) { - throw new CacheException(sprintf('Cache directory is not writable (%s).', $this->directory)); + throw new CacheException(\sprintf('Cache directory is not writable (%s).', $this->directory)); } return $failed; diff --git a/app/vendor/symfony/cache/Traits/Redis5Proxy.php b/app/vendor/symfony/cache/Traits/Redis5Proxy.php index 0b2794ee1..b2402f257 100644 --- a/app/vendor/symfony/cache/Traits/Redis5Proxy.php +++ b/app/vendor/symfony/cache/Traits/Redis5Proxy.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Cache\Traits; use Symfony\Component\VarExporter\LazyObjectInterface; -use Symfony\Component\VarExporter\LazyProxyTrait; use Symfony\Contracts\Service\ResetInterface; // Help opcache.preload discover always-needed symbols @@ -25,1204 +24,1202 @@ class_exists(\Symfony\Component\VarExporter\Internal\LazyObjectState::class); */ class Redis5Proxy extends \Redis implements ResetInterface, LazyObjectInterface { - use LazyProxyTrait { + use RedisProxyTrait { resetLazyObject as reset; } - private const LAZY_OBJECT_PROPERTY_SCOPES = []; - public function __construct() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->__construct(...\func_get_args()); + $this->initializeLazyObject()->__construct(...\func_get_args()); } public function _prefix($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_prefix(...\func_get_args()); + return $this->initializeLazyObject()->_prefix(...\func_get_args()); } public function _serialize($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_serialize(...\func_get_args()); + return $this->initializeLazyObject()->_serialize(...\func_get_args()); } public function _unserialize($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_unserialize(...\func_get_args()); + return $this->initializeLazyObject()->_unserialize(...\func_get_args()); } public function _pack($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_pack(...\func_get_args()); + return $this->initializeLazyObject()->_pack(...\func_get_args()); } public function _unpack($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_unpack(...\func_get_args()); + return $this->initializeLazyObject()->_unpack(...\func_get_args()); } public function _compress($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_compress(...\func_get_args()); + return $this->initializeLazyObject()->_compress(...\func_get_args()); } public function _uncompress($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_uncompress(...\func_get_args()); + return $this->initializeLazyObject()->_uncompress(...\func_get_args()); } public function acl($subcmd, ...$args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->acl(...\func_get_args()); + return $this->initializeLazyObject()->acl(...\func_get_args()); } public function append($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->append(...\func_get_args()); + return $this->initializeLazyObject()->append(...\func_get_args()); } public function auth(#[\SensitiveParameter] $auth) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->auth(...\func_get_args()); + return $this->initializeLazyObject()->auth(...\func_get_args()); } public function bgSave() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgSave(...\func_get_args()); + return $this->initializeLazyObject()->bgSave(...\func_get_args()); } public function bgrewriteaof() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgrewriteaof(...\func_get_args()); + return $this->initializeLazyObject()->bgrewriteaof(...\func_get_args()); } public function bitcount($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitcount(...\func_get_args()); + return $this->initializeLazyObject()->bitcount(...\func_get_args()); } public function bitop($operation, $ret_key, $key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitop(...\func_get_args()); + return $this->initializeLazyObject()->bitop(...\func_get_args()); } public function bitpos($key, $bit, $start = null, $end = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitpos(...\func_get_args()); + return $this->initializeLazyObject()->bitpos(...\func_get_args()); } public function blPop($key, $timeout_or_key, ...$extra_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blPop(...\func_get_args()); + return $this->initializeLazyObject()->blPop(...\func_get_args()); } public function brPop($key, $timeout_or_key, ...$extra_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->brPop(...\func_get_args()); + return $this->initializeLazyObject()->brPop(...\func_get_args()); } public function brpoplpush($src, $dst, $timeout) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->brpoplpush(...\func_get_args()); + return $this->initializeLazyObject()->brpoplpush(...\func_get_args()); } public function bzPopMax($key, $timeout_or_key, ...$extra_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzPopMax(...\func_get_args()); + return $this->initializeLazyObject()->bzPopMax(...\func_get_args()); } public function bzPopMin($key, $timeout_or_key, ...$extra_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzPopMin(...\func_get_args()); + return $this->initializeLazyObject()->bzPopMin(...\func_get_args()); } public function clearLastError() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->clearLastError(...\func_get_args()); + return $this->initializeLazyObject()->clearLastError(...\func_get_args()); } public function client($cmd, ...$args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->client(...\func_get_args()); + return $this->initializeLazyObject()->client(...\func_get_args()); } public function close() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->close(...\func_get_args()); + return $this->initializeLazyObject()->close(...\func_get_args()); } public function command(...$args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->command(...\func_get_args()); + return $this->initializeLazyObject()->command(...\func_get_args()); } public function config($cmd, $key, $value = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->config(...\func_get_args()); + return $this->initializeLazyObject()->config(...\func_get_args()); } public function connect($host, $port = null, $timeout = null, $retry_interval = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->connect(...\func_get_args()); + return $this->initializeLazyObject()->connect(...\func_get_args()); } public function dbSize() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dbSize(...\func_get_args()); + return $this->initializeLazyObject()->dbSize(...\func_get_args()); } public function debug($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->debug(...\func_get_args()); + return $this->initializeLazyObject()->debug(...\func_get_args()); } public function decr($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decr(...\func_get_args()); + return $this->initializeLazyObject()->decr(...\func_get_args()); } public function decrBy($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decrBy(...\func_get_args()); + return $this->initializeLazyObject()->decrBy(...\func_get_args()); } public function del($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->del(...\func_get_args()); + return $this->initializeLazyObject()->del(...\func_get_args()); } public function discard() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->discard(...\func_get_args()); + return $this->initializeLazyObject()->discard(...\func_get_args()); } public function dump($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dump(...\func_get_args()); + return $this->initializeLazyObject()->dump(...\func_get_args()); } public function echo($msg) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->echo(...\func_get_args()); + return $this->initializeLazyObject()->echo(...\func_get_args()); } public function eval($script, $args = null, $num_keys = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->eval(...\func_get_args()); + return $this->initializeLazyObject()->eval(...\func_get_args()); } public function evalsha($script_sha, $args = null, $num_keys = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->evalsha(...\func_get_args()); + return $this->initializeLazyObject()->evalsha(...\func_get_args()); } public function exec() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->exec(...\func_get_args()); + return $this->initializeLazyObject()->exec(...\func_get_args()); } public function exists($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->exists(...\func_get_args()); + return $this->initializeLazyObject()->exists(...\func_get_args()); } public function expire($key, $timeout) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expire(...\func_get_args()); + return $this->initializeLazyObject()->expire(...\func_get_args()); } public function expireAt($key, $timestamp) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expireAt(...\func_get_args()); + return $this->initializeLazyObject()->expireAt(...\func_get_args()); } public function flushAll($async = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushAll(...\func_get_args()); + return $this->initializeLazyObject()->flushAll(...\func_get_args()); } public function flushDB($async = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushDB(...\func_get_args()); + return $this->initializeLazyObject()->flushDB(...\func_get_args()); } public function geoadd($key, $lng, $lat, $member, ...$other_triples) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geoadd(...\func_get_args()); + return $this->initializeLazyObject()->geoadd(...\func_get_args()); } public function geodist($key, $src, $dst, $unit = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geodist(...\func_get_args()); + return $this->initializeLazyObject()->geodist(...\func_get_args()); } public function geohash($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geohash(...\func_get_args()); + return $this->initializeLazyObject()->geohash(...\func_get_args()); } public function geopos($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geopos(...\func_get_args()); + return $this->initializeLazyObject()->geopos(...\func_get_args()); } public function georadius($key, $lng, $lan, $radius, $unit, $opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadius(...\func_get_args()); + return $this->initializeLazyObject()->georadius(...\func_get_args()); } public function georadius_ro($key, $lng, $lan, $radius, $unit, $opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadius_ro(...\func_get_args()); + return $this->initializeLazyObject()->georadius_ro(...\func_get_args()); } public function georadiusbymember($key, $member, $radius, $unit, $opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadiusbymember(...\func_get_args()); + return $this->initializeLazyObject()->georadiusbymember(...\func_get_args()); } public function georadiusbymember_ro($key, $member, $radius, $unit, $opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadiusbymember_ro(...\func_get_args()); + return $this->initializeLazyObject()->georadiusbymember_ro(...\func_get_args()); } public function get($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->get(...\func_get_args()); + return $this->initializeLazyObject()->get(...\func_get_args()); } public function getAuth() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getAuth(...\func_get_args()); + return $this->initializeLazyObject()->getAuth(...\func_get_args()); } public function getBit($key, $offset) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getBit(...\func_get_args()); + return $this->initializeLazyObject()->getBit(...\func_get_args()); } public function getDBNum() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getDBNum(...\func_get_args()); + return $this->initializeLazyObject()->getDBNum(...\func_get_args()); } public function getHost() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getHost(...\func_get_args()); + return $this->initializeLazyObject()->getHost(...\func_get_args()); } public function getLastError() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getLastError(...\func_get_args()); + return $this->initializeLazyObject()->getLastError(...\func_get_args()); } public function getMode() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getMode(...\func_get_args()); + return $this->initializeLazyObject()->getMode(...\func_get_args()); } public function getOption($option) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getOption(...\func_get_args()); + return $this->initializeLazyObject()->getOption(...\func_get_args()); } public function getPersistentID() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getPersistentID(...\func_get_args()); + return $this->initializeLazyObject()->getPersistentID(...\func_get_args()); } public function getPort() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getPort(...\func_get_args()); + return $this->initializeLazyObject()->getPort(...\func_get_args()); } public function getRange($key, $start, $end) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getRange(...\func_get_args()); + return $this->initializeLazyObject()->getRange(...\func_get_args()); } public function getReadTimeout() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getReadTimeout(...\func_get_args()); + return $this->initializeLazyObject()->getReadTimeout(...\func_get_args()); } public function getSet($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getSet(...\func_get_args()); + return $this->initializeLazyObject()->getSet(...\func_get_args()); } public function getTimeout() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getTimeout(...\func_get_args()); + return $this->initializeLazyObject()->getTimeout(...\func_get_args()); } public function hDel($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hDel(...\func_get_args()); + return $this->initializeLazyObject()->hDel(...\func_get_args()); } public function hExists($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hExists(...\func_get_args()); + return $this->initializeLazyObject()->hExists(...\func_get_args()); } public function hGet($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hGet(...\func_get_args()); + return $this->initializeLazyObject()->hGet(...\func_get_args()); } public function hGetAll($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hGetAll(...\func_get_args()); + return $this->initializeLazyObject()->hGetAll(...\func_get_args()); } public function hIncrBy($key, $member, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hIncrBy(...\func_get_args()); + return $this->initializeLazyObject()->hIncrBy(...\func_get_args()); } public function hIncrByFloat($key, $member, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hIncrByFloat(...\func_get_args()); + return $this->initializeLazyObject()->hIncrByFloat(...\func_get_args()); } public function hKeys($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hKeys(...\func_get_args()); + return $this->initializeLazyObject()->hKeys(...\func_get_args()); } public function hLen($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hLen(...\func_get_args()); + return $this->initializeLazyObject()->hLen(...\func_get_args()); } public function hMget($key, $keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hMget(...\func_get_args()); + return $this->initializeLazyObject()->hMget(...\func_get_args()); } public function hMset($key, $pairs) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hMset(...\func_get_args()); + return $this->initializeLazyObject()->hMset(...\func_get_args()); } public function hSet($key, $member, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hSet(...\func_get_args()); + return $this->initializeLazyObject()->hSet(...\func_get_args()); } public function hSetNx($key, $member, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hSetNx(...\func_get_args()); + return $this->initializeLazyObject()->hSetNx(...\func_get_args()); } public function hStrLen($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hStrLen(...\func_get_args()); + return $this->initializeLazyObject()->hStrLen(...\func_get_args()); } public function hVals($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hVals(...\func_get_args()); + return $this->initializeLazyObject()->hVals(...\func_get_args()); } public function hscan($str_key, &$i_iterator, $str_pattern = null, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->hscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); } public function incr($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incr(...\func_get_args()); + return $this->initializeLazyObject()->incr(...\func_get_args()); } public function incrBy($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incrBy(...\func_get_args()); + return $this->initializeLazyObject()->incrBy(...\func_get_args()); } public function incrByFloat($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incrByFloat(...\func_get_args()); + return $this->initializeLazyObject()->incrByFloat(...\func_get_args()); } public function info($option = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->info(...\func_get_args()); + return $this->initializeLazyObject()->info(...\func_get_args()); } public function isConnected() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->isConnected(...\func_get_args()); + return $this->initializeLazyObject()->isConnected(...\func_get_args()); } public function keys($pattern) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->keys(...\func_get_args()); + return $this->initializeLazyObject()->keys(...\func_get_args()); } public function lInsert($key, $position, $pivot, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lInsert(...\func_get_args()); + return $this->initializeLazyObject()->lInsert(...\func_get_args()); } public function lLen($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lLen(...\func_get_args()); + return $this->initializeLazyObject()->lLen(...\func_get_args()); } public function lPop($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lPop(...\func_get_args()); + return $this->initializeLazyObject()->lPop(...\func_get_args()); } public function lPush($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lPush(...\func_get_args()); + return $this->initializeLazyObject()->lPush(...\func_get_args()); } public function lPushx($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lPushx(...\func_get_args()); + return $this->initializeLazyObject()->lPushx(...\func_get_args()); } public function lSet($key, $index, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lSet(...\func_get_args()); + return $this->initializeLazyObject()->lSet(...\func_get_args()); } public function lastSave() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lastSave(...\func_get_args()); + return $this->initializeLazyObject()->lastSave(...\func_get_args()); } public function lindex($key, $index) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lindex(...\func_get_args()); + return $this->initializeLazyObject()->lindex(...\func_get_args()); } public function lrange($key, $start, $end) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lrange(...\func_get_args()); + return $this->initializeLazyObject()->lrange(...\func_get_args()); } public function lrem($key, $value, $count) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lrem(...\func_get_args()); + return $this->initializeLazyObject()->lrem(...\func_get_args()); } public function ltrim($key, $start, $stop) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ltrim(...\func_get_args()); + return $this->initializeLazyObject()->ltrim(...\func_get_args()); } public function mget($keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mget(...\func_get_args()); + return $this->initializeLazyObject()->mget(...\func_get_args()); } public function migrate($host, $port, $key, $db, $timeout, $copy = null, $replace = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->migrate(...\func_get_args()); + return $this->initializeLazyObject()->migrate(...\func_get_args()); } public function move($key, $dbindex) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->move(...\func_get_args()); + return $this->initializeLazyObject()->move(...\func_get_args()); } public function mset($pairs) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mset(...\func_get_args()); + return $this->initializeLazyObject()->mset(...\func_get_args()); } public function msetnx($pairs) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->msetnx(...\func_get_args()); + return $this->initializeLazyObject()->msetnx(...\func_get_args()); } public function multi($mode = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->multi(...\func_get_args()); + return $this->initializeLazyObject()->multi(...\func_get_args()); } public function object($field, $key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->object(...\func_get_args()); + return $this->initializeLazyObject()->object(...\func_get_args()); } public function pconnect($host, $port = null, $timeout = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pconnect(...\func_get_args()); + return $this->initializeLazyObject()->pconnect(...\func_get_args()); } public function persist($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->persist(...\func_get_args()); + return $this->initializeLazyObject()->persist(...\func_get_args()); } public function pexpire($key, $timestamp) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpire(...\func_get_args()); + return $this->initializeLazyObject()->pexpire(...\func_get_args()); } public function pexpireAt($key, $timestamp) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpireAt(...\func_get_args()); + return $this->initializeLazyObject()->pexpireAt(...\func_get_args()); } public function pfadd($key, $elements) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfadd(...\func_get_args()); + return $this->initializeLazyObject()->pfadd(...\func_get_args()); } public function pfcount($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfcount(...\func_get_args()); + return $this->initializeLazyObject()->pfcount(...\func_get_args()); } public function pfmerge($dstkey, $keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfmerge(...\func_get_args()); + return $this->initializeLazyObject()->pfmerge(...\func_get_args()); } public function ping() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ping(...\func_get_args()); + return $this->initializeLazyObject()->ping(...\func_get_args()); } public function pipeline() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pipeline(...\func_get_args()); + return $this->initializeLazyObject()->pipeline(...\func_get_args()); } public function psetex($key, $expire, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->psetex(...\func_get_args()); + return $this->initializeLazyObject()->psetex(...\func_get_args()); } public function psubscribe($patterns, $callback) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->psubscribe(...\func_get_args()); + return $this->initializeLazyObject()->psubscribe(...\func_get_args()); } public function pttl($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pttl(...\func_get_args()); + return $this->initializeLazyObject()->pttl(...\func_get_args()); } public function publish($channel, $message) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->publish(...\func_get_args()); + return $this->initializeLazyObject()->publish(...\func_get_args()); } public function pubsub($cmd, ...$args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pubsub(...\func_get_args()); + return $this->initializeLazyObject()->pubsub(...\func_get_args()); } public function punsubscribe($pattern, ...$other_patterns) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->punsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->punsubscribe(...\func_get_args()); } public function rPop($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rPop(...\func_get_args()); + return $this->initializeLazyObject()->rPop(...\func_get_args()); } public function rPush($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rPush(...\func_get_args()); + return $this->initializeLazyObject()->rPush(...\func_get_args()); } public function rPushx($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rPushx(...\func_get_args()); + return $this->initializeLazyObject()->rPushx(...\func_get_args()); } public function randomKey() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->randomKey(...\func_get_args()); + return $this->initializeLazyObject()->randomKey(...\func_get_args()); } public function rawcommand($cmd, ...$args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rawcommand(...\func_get_args()); + return $this->initializeLazyObject()->rawcommand(...\func_get_args()); } public function rename($key, $newkey) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rename(...\func_get_args()); + return $this->initializeLazyObject()->rename(...\func_get_args()); } public function renameNx($key, $newkey) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->renameNx(...\func_get_args()); + return $this->initializeLazyObject()->renameNx(...\func_get_args()); } public function restore($ttl, $key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->restore(...\func_get_args()); + return $this->initializeLazyObject()->restore(...\func_get_args()); } public function role() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->role(...\func_get_args()); + return $this->initializeLazyObject()->role(...\func_get_args()); } public function rpoplpush($src, $dst) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpoplpush(...\func_get_args()); + return $this->initializeLazyObject()->rpoplpush(...\func_get_args()); } public function sAdd($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sAdd(...\func_get_args()); + return $this->initializeLazyObject()->sAdd(...\func_get_args()); } public function sAddArray($key, $options) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sAddArray(...\func_get_args()); + return $this->initializeLazyObject()->sAddArray(...\func_get_args()); } public function sDiff($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sDiff(...\func_get_args()); + return $this->initializeLazyObject()->sDiff(...\func_get_args()); } public function sDiffStore($dst, $key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sDiffStore(...\func_get_args()); + return $this->initializeLazyObject()->sDiffStore(...\func_get_args()); } public function sInter($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sInter(...\func_get_args()); + return $this->initializeLazyObject()->sInter(...\func_get_args()); } public function sInterStore($dst, $key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sInterStore(...\func_get_args()); + return $this->initializeLazyObject()->sInterStore(...\func_get_args()); } public function sMembers($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sMembers(...\func_get_args()); + return $this->initializeLazyObject()->sMembers(...\func_get_args()); } public function sMisMember($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sMisMember(...\func_get_args()); + return $this->initializeLazyObject()->sMisMember(...\func_get_args()); } public function sMove($src, $dst, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sMove(...\func_get_args()); + return $this->initializeLazyObject()->sMove(...\func_get_args()); } public function sPop($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sPop(...\func_get_args()); + return $this->initializeLazyObject()->sPop(...\func_get_args()); } public function sRandMember($key, $count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sRandMember(...\func_get_args()); + return $this->initializeLazyObject()->sRandMember(...\func_get_args()); } public function sUnion($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sUnion(...\func_get_args()); + return $this->initializeLazyObject()->sUnion(...\func_get_args()); } public function sUnionStore($dst, $key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sUnionStore(...\func_get_args()); + return $this->initializeLazyObject()->sUnionStore(...\func_get_args()); } public function save() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->save(...\func_get_args()); + return $this->initializeLazyObject()->save(...\func_get_args()); } public function scan(&$i_iterator, $str_pattern = null, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->scan($i_iterator, ...\array_slice(\func_get_args(), 1)); + return $this->initializeLazyObject()->scan($i_iterator, ...\array_slice(\func_get_args(), 1)); } public function scard($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->scard(...\func_get_args()); + return $this->initializeLazyObject()->scard(...\func_get_args()); } public function script($cmd, ...$args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->script(...\func_get_args()); + return $this->initializeLazyObject()->script(...\func_get_args()); } public function select($dbindex) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->select(...\func_get_args()); + return $this->initializeLazyObject()->select(...\func_get_args()); } public function set($key, $value, $opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->set(...\func_get_args()); + return $this->initializeLazyObject()->set(...\func_get_args()); } public function setBit($key, $offset, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setBit(...\func_get_args()); + return $this->initializeLazyObject()->setBit(...\func_get_args()); } public function setOption($option, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setOption(...\func_get_args()); + return $this->initializeLazyObject()->setOption(...\func_get_args()); } public function setRange($key, $offset, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setRange(...\func_get_args()); + return $this->initializeLazyObject()->setRange(...\func_get_args()); } public function setex($key, $expire, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setex(...\func_get_args()); + return $this->initializeLazyObject()->setex(...\func_get_args()); } public function setnx($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setnx(...\func_get_args()); + return $this->initializeLazyObject()->setnx(...\func_get_args()); } public function sismember($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sismember(...\func_get_args()); + return $this->initializeLazyObject()->sismember(...\func_get_args()); } public function slaveof($host = null, $port = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->slaveof(...\func_get_args()); + return $this->initializeLazyObject()->slaveof(...\func_get_args()); } public function slowlog($arg, $option = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->slowlog(...\func_get_args()); + return $this->initializeLazyObject()->slowlog(...\func_get_args()); } public function sort($key, $options = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sort(...\func_get_args()); + return $this->initializeLazyObject()->sort(...\func_get_args()); } public function sortAsc($key, $pattern = null, $get = null, $start = null, $end = null, $getList = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sortAsc(...\func_get_args()); + return $this->initializeLazyObject()->sortAsc(...\func_get_args()); } public function sortAscAlpha($key, $pattern = null, $get = null, $start = null, $end = null, $getList = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sortAscAlpha(...\func_get_args()); + return $this->initializeLazyObject()->sortAscAlpha(...\func_get_args()); } public function sortDesc($key, $pattern = null, $get = null, $start = null, $end = null, $getList = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sortDesc(...\func_get_args()); + return $this->initializeLazyObject()->sortDesc(...\func_get_args()); } public function sortDescAlpha($key, $pattern = null, $get = null, $start = null, $end = null, $getList = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sortDescAlpha(...\func_get_args()); + return $this->initializeLazyObject()->sortDescAlpha(...\func_get_args()); } public function srem($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->srem(...\func_get_args()); + return $this->initializeLazyObject()->srem(...\func_get_args()); } public function sscan($str_key, &$i_iterator, $str_pattern = null, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->sscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); } public function strlen($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->strlen(...\func_get_args()); + return $this->initializeLazyObject()->strlen(...\func_get_args()); } public function subscribe($channels, $callback) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->subscribe(...\func_get_args()); + return $this->initializeLazyObject()->subscribe(...\func_get_args()); } public function swapdb($srcdb, $dstdb) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->swapdb(...\func_get_args()); + return $this->initializeLazyObject()->swapdb(...\func_get_args()); } public function time() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->time(...\func_get_args()); + return $this->initializeLazyObject()->time(...\func_get_args()); } public function ttl($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ttl(...\func_get_args()); + return $this->initializeLazyObject()->ttl(...\func_get_args()); } public function type($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->type(...\func_get_args()); + return $this->initializeLazyObject()->type(...\func_get_args()); } public function unlink($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unlink(...\func_get_args()); + return $this->initializeLazyObject()->unlink(...\func_get_args()); } public function unsubscribe($channel, ...$other_channels) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->unsubscribe(...\func_get_args()); } public function unwatch() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unwatch(...\func_get_args()); + return $this->initializeLazyObject()->unwatch(...\func_get_args()); } public function wait($numslaves, $timeout) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->wait(...\func_get_args()); + return $this->initializeLazyObject()->wait(...\func_get_args()); } public function watch($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->watch(...\func_get_args()); + return $this->initializeLazyObject()->watch(...\func_get_args()); } public function xack($str_key, $str_group, $arr_ids) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xack(...\func_get_args()); + return $this->initializeLazyObject()->xack(...\func_get_args()); } public function xadd($str_key, $str_id, $arr_fields, $i_maxlen = null, $boo_approximate = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xadd(...\func_get_args()); + return $this->initializeLazyObject()->xadd(...\func_get_args()); } public function xclaim($str_key, $str_group, $str_consumer, $i_min_idle, $arr_ids, $arr_opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xclaim(...\func_get_args()); + return $this->initializeLazyObject()->xclaim(...\func_get_args()); } public function xdel($str_key, $arr_ids) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xdel(...\func_get_args()); + return $this->initializeLazyObject()->xdel(...\func_get_args()); } public function xgroup($str_operation, $str_key = null, $str_arg1 = null, $str_arg2 = null, $str_arg3 = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xgroup(...\func_get_args()); + return $this->initializeLazyObject()->xgroup(...\func_get_args()); } public function xinfo($str_cmd, $str_key = null, $str_group = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xinfo(...\func_get_args()); + return $this->initializeLazyObject()->xinfo(...\func_get_args()); } public function xlen($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xlen(...\func_get_args()); + return $this->initializeLazyObject()->xlen(...\func_get_args()); } public function xpending($str_key, $str_group, $str_start = null, $str_end = null, $i_count = null, $str_consumer = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xpending(...\func_get_args()); + return $this->initializeLazyObject()->xpending(...\func_get_args()); } public function xrange($str_key, $str_start, $str_end, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xrange(...\func_get_args()); + return $this->initializeLazyObject()->xrange(...\func_get_args()); } public function xread($arr_streams, $i_count = null, $i_block = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xread(...\func_get_args()); + return $this->initializeLazyObject()->xread(...\func_get_args()); } public function xreadgroup($str_group, $str_consumer, $arr_streams, $i_count = null, $i_block = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xreadgroup(...\func_get_args()); + return $this->initializeLazyObject()->xreadgroup(...\func_get_args()); } public function xrevrange($str_key, $str_start, $str_end, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xrevrange(...\func_get_args()); + return $this->initializeLazyObject()->xrevrange(...\func_get_args()); } public function xtrim($str_key, $i_maxlen, $boo_approximate = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xtrim(...\func_get_args()); + return $this->initializeLazyObject()->xtrim(...\func_get_args()); } public function zAdd($key, $score, $value, ...$extra_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zAdd(...\func_get_args()); + return $this->initializeLazyObject()->zAdd(...\func_get_args()); } public function zCard($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zCard(...\func_get_args()); + return $this->initializeLazyObject()->zCard(...\func_get_args()); } public function zCount($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zCount(...\func_get_args()); + return $this->initializeLazyObject()->zCount(...\func_get_args()); } public function zIncrBy($key, $value, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zIncrBy(...\func_get_args()); + return $this->initializeLazyObject()->zIncrBy(...\func_get_args()); } public function zLexCount($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zLexCount(...\func_get_args()); + return $this->initializeLazyObject()->zLexCount(...\func_get_args()); } public function zPopMax($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zPopMax(...\func_get_args()); + return $this->initializeLazyObject()->zPopMax(...\func_get_args()); } public function zPopMin($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zPopMin(...\func_get_args()); + return $this->initializeLazyObject()->zPopMin(...\func_get_args()); } public function zRange($key, $start, $end, $scores = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRange(...\func_get_args()); + return $this->initializeLazyObject()->zRange(...\func_get_args()); } public function zRangeByLex($key, $min, $max, $offset = null, $limit = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRangeByLex(...\func_get_args()); + return $this->initializeLazyObject()->zRangeByLex(...\func_get_args()); } public function zRangeByScore($key, $start, $end, $options = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRangeByScore(...\func_get_args()); + return $this->initializeLazyObject()->zRangeByScore(...\func_get_args()); } public function zRank($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRank(...\func_get_args()); + return $this->initializeLazyObject()->zRank(...\func_get_args()); } public function zRem($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRem(...\func_get_args()); + return $this->initializeLazyObject()->zRem(...\func_get_args()); } public function zRemRangeByLex($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRemRangeByLex(...\func_get_args()); + return $this->initializeLazyObject()->zRemRangeByLex(...\func_get_args()); } public function zRemRangeByRank($key, $start, $end) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRemRangeByRank(...\func_get_args()); + return $this->initializeLazyObject()->zRemRangeByRank(...\func_get_args()); } public function zRemRangeByScore($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRemRangeByScore(...\func_get_args()); + return $this->initializeLazyObject()->zRemRangeByScore(...\func_get_args()); } public function zRevRange($key, $start, $end, $scores = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRevRange(...\func_get_args()); + return $this->initializeLazyObject()->zRevRange(...\func_get_args()); } public function zRevRangeByLex($key, $min, $max, $offset = null, $limit = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRevRangeByLex(...\func_get_args()); + return $this->initializeLazyObject()->zRevRangeByLex(...\func_get_args()); } public function zRevRangeByScore($key, $start, $end, $options = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRevRangeByScore(...\func_get_args()); + return $this->initializeLazyObject()->zRevRangeByScore(...\func_get_args()); } public function zRevRank($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRevRank(...\func_get_args()); + return $this->initializeLazyObject()->zRevRank(...\func_get_args()); } public function zScore($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zScore(...\func_get_args()); + return $this->initializeLazyObject()->zScore(...\func_get_args()); } public function zinterstore($key, $keys, $weights = null, $aggregate = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zinterstore(...\func_get_args()); + return $this->initializeLazyObject()->zinterstore(...\func_get_args()); } public function zscan($str_key, &$i_iterator, $str_pattern = null, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->zscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); } public function zunionstore($key, $keys, $weights = null, $aggregate = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zunionstore(...\func_get_args()); + return $this->initializeLazyObject()->zunionstore(...\func_get_args()); } public function delete($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->delete(...\func_get_args()); + return $this->initializeLazyObject()->delete(...\func_get_args()); } public function evaluate($script, $args = null, $num_keys = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->evaluate(...\func_get_args()); + return $this->initializeLazyObject()->evaluate(...\func_get_args()); } public function evaluateSha($script_sha, $args = null, $num_keys = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->evaluateSha(...\func_get_args()); + return $this->initializeLazyObject()->evaluateSha(...\func_get_args()); } public function getKeys($pattern) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getKeys(...\func_get_args()); + return $this->initializeLazyObject()->getKeys(...\func_get_args()); } public function getMultiple($keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getMultiple(...\func_get_args()); + return $this->initializeLazyObject()->getMultiple(...\func_get_args()); } public function lGet($key, $index) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lGet(...\func_get_args()); + return $this->initializeLazyObject()->lGet(...\func_get_args()); } public function lGetRange($key, $start, $end) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lGetRange(...\func_get_args()); + return $this->initializeLazyObject()->lGetRange(...\func_get_args()); } public function lRemove($key, $value, $count) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lRemove(...\func_get_args()); + return $this->initializeLazyObject()->lRemove(...\func_get_args()); } public function lSize($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lSize(...\func_get_args()); + return $this->initializeLazyObject()->lSize(...\func_get_args()); } public function listTrim($key, $start, $stop) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->listTrim(...\func_get_args()); + return $this->initializeLazyObject()->listTrim(...\func_get_args()); } public function open($host, $port = null, $timeout = null, $retry_interval = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->open(...\func_get_args()); + return $this->initializeLazyObject()->open(...\func_get_args()); } public function popen($host, $port = null, $timeout = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->popen(...\func_get_args()); + return $this->initializeLazyObject()->popen(...\func_get_args()); } public function renameKey($key, $newkey) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->renameKey(...\func_get_args()); + return $this->initializeLazyObject()->renameKey(...\func_get_args()); } public function sContains($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sContains(...\func_get_args()); + return $this->initializeLazyObject()->sContains(...\func_get_args()); } public function sGetMembers($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sGetMembers(...\func_get_args()); + return $this->initializeLazyObject()->sGetMembers(...\func_get_args()); } public function sRemove($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sRemove(...\func_get_args()); + return $this->initializeLazyObject()->sRemove(...\func_get_args()); } public function sSize($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sSize(...\func_get_args()); + return $this->initializeLazyObject()->sSize(...\func_get_args()); } public function sendEcho($msg) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sendEcho(...\func_get_args()); + return $this->initializeLazyObject()->sendEcho(...\func_get_args()); } public function setTimeout($key, $timeout) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setTimeout(...\func_get_args()); + return $this->initializeLazyObject()->setTimeout(...\func_get_args()); } public function substr($key, $start, $end) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->substr(...\func_get_args()); + return $this->initializeLazyObject()->substr(...\func_get_args()); } public function zDelete($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zDelete(...\func_get_args()); + return $this->initializeLazyObject()->zDelete(...\func_get_args()); } public function zDeleteRangeByRank($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zDeleteRangeByRank(...\func_get_args()); + return $this->initializeLazyObject()->zDeleteRangeByRank(...\func_get_args()); } public function zDeleteRangeByScore($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zDeleteRangeByScore(...\func_get_args()); + return $this->initializeLazyObject()->zDeleteRangeByScore(...\func_get_args()); } public function zInter($key, $keys, $weights = null, $aggregate = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zInter(...\func_get_args()); + return $this->initializeLazyObject()->zInter(...\func_get_args()); } public function zRemove($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRemove(...\func_get_args()); + return $this->initializeLazyObject()->zRemove(...\func_get_args()); } public function zRemoveRangeByScore($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRemoveRangeByScore(...\func_get_args()); + return $this->initializeLazyObject()->zRemoveRangeByScore(...\func_get_args()); } public function zReverseRange($key, $start, $end, $scores = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zReverseRange(...\func_get_args()); + return $this->initializeLazyObject()->zReverseRange(...\func_get_args()); } public function zSize($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zSize(...\func_get_args()); + return $this->initializeLazyObject()->zSize(...\func_get_args()); } public function zUnion($key, $keys, $weights = null, $aggregate = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zUnion(...\func_get_args()); + return $this->initializeLazyObject()->zUnion(...\func_get_args()); } } diff --git a/app/vendor/symfony/cache/Traits/Redis6Proxy.php b/app/vendor/symfony/cache/Traits/Redis6Proxy.php index c841d4269..c7e05cd3f 100644 --- a/app/vendor/symfony/cache/Traits/Redis6Proxy.php +++ b/app/vendor/symfony/cache/Traits/Redis6Proxy.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Cache\Traits; use Symfony\Component\VarExporter\LazyObjectInterface; -use Symfony\Component\VarExporter\LazyProxyTrait; use Symfony\Contracts\Service\ResetInterface; // Help opcache.preload discover always-needed symbols @@ -26,1244 +25,1242 @@ class_exists(\Symfony\Component\VarExporter\Internal\LazyObjectState::class); class Redis6Proxy extends \Redis implements ResetInterface, LazyObjectInterface { use Redis6ProxyTrait; - use LazyProxyTrait { + use RedisProxyTrait { resetLazyObject as reset; } - private const LAZY_OBJECT_PROPERTY_SCOPES = []; - public function __construct($options = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->__construct(...\func_get_args()); + $this->initializeLazyObject()->__construct(...\func_get_args()); } public function _compress($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_compress(...\func_get_args()); + return $this->initializeLazyObject()->_compress(...\func_get_args()); } public function _uncompress($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_uncompress(...\func_get_args()); + return $this->initializeLazyObject()->_uncompress(...\func_get_args()); } public function _prefix($key): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_prefix(...\func_get_args()); + return $this->initializeLazyObject()->_prefix(...\func_get_args()); } public function _serialize($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_serialize(...\func_get_args()); + return $this->initializeLazyObject()->_serialize(...\func_get_args()); } public function _unserialize($value): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_unserialize(...\func_get_args()); + return $this->initializeLazyObject()->_unserialize(...\func_get_args()); } public function _pack($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_pack(...\func_get_args()); + return $this->initializeLazyObject()->_pack(...\func_get_args()); } public function _unpack($value): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_unpack(...\func_get_args()); + return $this->initializeLazyObject()->_unpack(...\func_get_args()); } public function acl($subcmd, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->acl(...\func_get_args()); + return $this->initializeLazyObject()->acl(...\func_get_args()); } public function append($key, $value): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->append(...\func_get_args()); + return $this->initializeLazyObject()->append(...\func_get_args()); } public function auth(#[\SensitiveParameter] $credentials): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->auth(...\func_get_args()); + return $this->initializeLazyObject()->auth(...\func_get_args()); } public function bgSave(): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgSave(...\func_get_args()); + return $this->initializeLazyObject()->bgSave(...\func_get_args()); } public function bgrewriteaof(): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgrewriteaof(...\func_get_args()); + return $this->initializeLazyObject()->bgrewriteaof(...\func_get_args()); } public function bitcount($key, $start = 0, $end = -1, $bybit = false): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitcount(...\func_get_args()); + return $this->initializeLazyObject()->bitcount(...\func_get_args()); } public function bitop($operation, $deskey, $srckey, ...$other_keys): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitop(...\func_get_args()); + return $this->initializeLazyObject()->bitop(...\func_get_args()); } public function bitpos($key, $bit, $start = 0, $end = -1, $bybit = false): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitpos(...\func_get_args()); + return $this->initializeLazyObject()->bitpos(...\func_get_args()); } public function blPop($key_or_keys, $timeout_or_key, ...$extra_args): \Redis|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blPop(...\func_get_args()); + return $this->initializeLazyObject()->blPop(...\func_get_args()); } public function brPop($key_or_keys, $timeout_or_key, ...$extra_args): \Redis|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->brPop(...\func_get_args()); + return $this->initializeLazyObject()->brPop(...\func_get_args()); } public function brpoplpush($src, $dst, $timeout): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->brpoplpush(...\func_get_args()); + return $this->initializeLazyObject()->brpoplpush(...\func_get_args()); } public function bzPopMax($key, $timeout_or_key, ...$extra_args): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzPopMax(...\func_get_args()); + return $this->initializeLazyObject()->bzPopMax(...\func_get_args()); } public function bzPopMin($key, $timeout_or_key, ...$extra_args): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzPopMin(...\func_get_args()); + return $this->initializeLazyObject()->bzPopMin(...\func_get_args()); } public function bzmpop($timeout, $keys, $from, $count = 1): \Redis|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzmpop(...\func_get_args()); + return $this->initializeLazyObject()->bzmpop(...\func_get_args()); } public function zmpop($keys, $from, $count = 1): \Redis|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zmpop(...\func_get_args()); + return $this->initializeLazyObject()->zmpop(...\func_get_args()); } public function blmpop($timeout, $keys, $from, $count = 1): \Redis|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blmpop(...\func_get_args()); + return $this->initializeLazyObject()->blmpop(...\func_get_args()); } public function lmpop($keys, $from, $count = 1): \Redis|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lmpop(...\func_get_args()); + return $this->initializeLazyObject()->lmpop(...\func_get_args()); } public function clearLastError(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->clearLastError(...\func_get_args()); + return $this->initializeLazyObject()->clearLastError(...\func_get_args()); } public function client($opt, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->client(...\func_get_args()); + return $this->initializeLazyObject()->client(...\func_get_args()); } public function close(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->close(...\func_get_args()); + return $this->initializeLazyObject()->close(...\func_get_args()); } public function command($opt = null, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->command(...\func_get_args()); + return $this->initializeLazyObject()->command(...\func_get_args()); } public function config($operation, $key_or_settings = null, $value = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->config(...\func_get_args()); + return $this->initializeLazyObject()->config(...\func_get_args()); } public function connect($host, $port = 6379, $timeout = 0, $persistent_id = null, $retry_interval = 0, $read_timeout = 0, $context = null): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->connect(...\func_get_args()); + return $this->initializeLazyObject()->connect(...\func_get_args()); } public function copy($src, $dst, $options = null): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->copy(...\func_get_args()); + return $this->initializeLazyObject()->copy(...\func_get_args()); } public function dbSize(): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dbSize(...\func_get_args()); + return $this->initializeLazyObject()->dbSize(...\func_get_args()); } public function debug($key): \Redis|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->debug(...\func_get_args()); + return $this->initializeLazyObject()->debug(...\func_get_args()); } public function decr($key, $by = 1): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decr(...\func_get_args()); + return $this->initializeLazyObject()->decr(...\func_get_args()); } public function decrBy($key, $value): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decrBy(...\func_get_args()); + return $this->initializeLazyObject()->decrBy(...\func_get_args()); } public function del($key, ...$other_keys): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->del(...\func_get_args()); + return $this->initializeLazyObject()->del(...\func_get_args()); } public function delete($key, ...$other_keys): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->delete(...\func_get_args()); + return $this->initializeLazyObject()->delete(...\func_get_args()); } public function discard(): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->discard(...\func_get_args()); + return $this->initializeLazyObject()->discard(...\func_get_args()); } public function echo($str): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->echo(...\func_get_args()); + return $this->initializeLazyObject()->echo(...\func_get_args()); } public function eval($script, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->eval(...\func_get_args()); + return $this->initializeLazyObject()->eval(...\func_get_args()); } public function eval_ro($script_sha, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->eval_ro(...\func_get_args()); + return $this->initializeLazyObject()->eval_ro(...\func_get_args()); } public function evalsha($sha1, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->evalsha(...\func_get_args()); + return $this->initializeLazyObject()->evalsha(...\func_get_args()); } public function evalsha_ro($sha1, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->evalsha_ro(...\func_get_args()); + return $this->initializeLazyObject()->evalsha_ro(...\func_get_args()); } public function exec(): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->exec(...\func_get_args()); + return $this->initializeLazyObject()->exec(...\func_get_args()); } public function exists($key, ...$other_keys): \Redis|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->exists(...\func_get_args()); + return $this->initializeLazyObject()->exists(...\func_get_args()); } public function expire($key, $timeout, $mode = null): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expire(...\func_get_args()); + return $this->initializeLazyObject()->expire(...\func_get_args()); } public function expireAt($key, $timestamp, $mode = null): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expireAt(...\func_get_args()); + return $this->initializeLazyObject()->expireAt(...\func_get_args()); } public function failover($to = null, $abort = false, $timeout = 0): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->failover(...\func_get_args()); + return $this->initializeLazyObject()->failover(...\func_get_args()); } public function expiretime($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expiretime(...\func_get_args()); + return $this->initializeLazyObject()->expiretime(...\func_get_args()); } public function pexpiretime($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpiretime(...\func_get_args()); + return $this->initializeLazyObject()->pexpiretime(...\func_get_args()); } public function fcall($fn, $keys = [], $args = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->fcall(...\func_get_args()); + return $this->initializeLazyObject()->fcall(...\func_get_args()); } public function fcall_ro($fn, $keys = [], $args = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->fcall_ro(...\func_get_args()); + return $this->initializeLazyObject()->fcall_ro(...\func_get_args()); } public function flushAll($sync = null): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushAll(...\func_get_args()); + return $this->initializeLazyObject()->flushAll(...\func_get_args()); } public function flushDB($sync = null): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushDB(...\func_get_args()); + return $this->initializeLazyObject()->flushDB(...\func_get_args()); } public function function($operation, ...$args): \Redis|array|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->function(...\func_get_args()); + return $this->initializeLazyObject()->function(...\func_get_args()); } public function geoadd($key, $lng, $lat, $member, ...$other_triples_and_options): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geoadd(...\func_get_args()); + return $this->initializeLazyObject()->geoadd(...\func_get_args()); } public function geodist($key, $src, $dst, $unit = null): \Redis|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geodist(...\func_get_args()); + return $this->initializeLazyObject()->geodist(...\func_get_args()); } public function geohash($key, $member, ...$other_members): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geohash(...\func_get_args()); + return $this->initializeLazyObject()->geohash(...\func_get_args()); } public function geopos($key, $member, ...$other_members): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geopos(...\func_get_args()); + return $this->initializeLazyObject()->geopos(...\func_get_args()); } public function georadius($key, $lng, $lat, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadius(...\func_get_args()); + return $this->initializeLazyObject()->georadius(...\func_get_args()); } public function georadius_ro($key, $lng, $lat, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadius_ro(...\func_get_args()); + return $this->initializeLazyObject()->georadius_ro(...\func_get_args()); } public function georadiusbymember($key, $member, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadiusbymember(...\func_get_args()); + return $this->initializeLazyObject()->georadiusbymember(...\func_get_args()); } public function georadiusbymember_ro($key, $member, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadiusbymember_ro(...\func_get_args()); + return $this->initializeLazyObject()->georadiusbymember_ro(...\func_get_args()); } public function geosearch($key, $position, $shape, $unit, $options = []): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geosearch(...\func_get_args()); + return $this->initializeLazyObject()->geosearch(...\func_get_args()); } public function geosearchstore($dst, $src, $position, $shape, $unit, $options = []): \Redis|array|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geosearchstore(...\func_get_args()); + return $this->initializeLazyObject()->geosearchstore(...\func_get_args()); } public function get($key): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->get(...\func_get_args()); + return $this->initializeLazyObject()->get(...\func_get_args()); } public function getAuth(): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getAuth(...\func_get_args()); + return $this->initializeLazyObject()->getAuth(...\func_get_args()); } public function getBit($key, $idx): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getBit(...\func_get_args()); + return $this->initializeLazyObject()->getBit(...\func_get_args()); } public function getEx($key, $options = []): \Redis|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getEx(...\func_get_args()); + return $this->initializeLazyObject()->getEx(...\func_get_args()); } public function getDBNum(): int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getDBNum(...\func_get_args()); + return $this->initializeLazyObject()->getDBNum(...\func_get_args()); } public function getDel($key): \Redis|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getDel(...\func_get_args()); + return $this->initializeLazyObject()->getDel(...\func_get_args()); } public function getHost(): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getHost(...\func_get_args()); + return $this->initializeLazyObject()->getHost(...\func_get_args()); } public function getLastError(): ?string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getLastError(...\func_get_args()); + return $this->initializeLazyObject()->getLastError(...\func_get_args()); } public function getMode(): int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getMode(...\func_get_args()); + return $this->initializeLazyObject()->getMode(...\func_get_args()); } public function getOption($option): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getOption(...\func_get_args()); + return $this->initializeLazyObject()->getOption(...\func_get_args()); } public function getPersistentID(): ?string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getPersistentID(...\func_get_args()); + return $this->initializeLazyObject()->getPersistentID(...\func_get_args()); } public function getPort(): int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getPort(...\func_get_args()); + return $this->initializeLazyObject()->getPort(...\func_get_args()); } public function getRange($key, $start, $end): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getRange(...\func_get_args()); + return $this->initializeLazyObject()->getRange(...\func_get_args()); } public function lcs($key1, $key2, $options = null): \Redis|array|false|int|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lcs(...\func_get_args()); + return $this->initializeLazyObject()->lcs(...\func_get_args()); } public function getReadTimeout(): float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getReadTimeout(...\func_get_args()); + return $this->initializeLazyObject()->getReadTimeout(...\func_get_args()); } public function getset($key, $value): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getset(...\func_get_args()); + return $this->initializeLazyObject()->getset(...\func_get_args()); } public function getTimeout(): false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getTimeout(...\func_get_args()); + return $this->initializeLazyObject()->getTimeout(...\func_get_args()); } public function getTransferredBytes(): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getTransferredBytes(...\func_get_args()); + return $this->initializeLazyObject()->getTransferredBytes(...\func_get_args()); } public function clearTransferredBytes(): void { - ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->clearTransferredBytes(...\func_get_args()); + $this->initializeLazyObject()->clearTransferredBytes(...\func_get_args()); } public function hDel($key, $field, ...$other_fields): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hDel(...\func_get_args()); + return $this->initializeLazyObject()->hDel(...\func_get_args()); } public function hExists($key, $field): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hExists(...\func_get_args()); + return $this->initializeLazyObject()->hExists(...\func_get_args()); } public function hGet($key, $member): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hGet(...\func_get_args()); + return $this->initializeLazyObject()->hGet(...\func_get_args()); } public function hGetAll($key): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hGetAll(...\func_get_args()); + return $this->initializeLazyObject()->hGetAll(...\func_get_args()); } public function hIncrBy($key, $field, $value): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hIncrBy(...\func_get_args()); + return $this->initializeLazyObject()->hIncrBy(...\func_get_args()); } public function hIncrByFloat($key, $field, $value): \Redis|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hIncrByFloat(...\func_get_args()); + return $this->initializeLazyObject()->hIncrByFloat(...\func_get_args()); } public function hKeys($key): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hKeys(...\func_get_args()); + return $this->initializeLazyObject()->hKeys(...\func_get_args()); } public function hLen($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hLen(...\func_get_args()); + return $this->initializeLazyObject()->hLen(...\func_get_args()); } public function hMget($key, $fields): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hMget(...\func_get_args()); + return $this->initializeLazyObject()->hMget(...\func_get_args()); } public function hMset($key, $fieldvals): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hMset(...\func_get_args()); + return $this->initializeLazyObject()->hMset(...\func_get_args()); } public function hSetNx($key, $field, $value): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hSetNx(...\func_get_args()); + return $this->initializeLazyObject()->hSetNx(...\func_get_args()); } public function hStrLen($key, $field): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hStrLen(...\func_get_args()); + return $this->initializeLazyObject()->hStrLen(...\func_get_args()); } public function hVals($key): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hVals(...\func_get_args()); + return $this->initializeLazyObject()->hVals(...\func_get_args()); } public function hscan($key, &$iterator, $pattern = null, $count = 0): \Redis|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->hscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); } public function incr($key, $by = 1): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incr(...\func_get_args()); + return $this->initializeLazyObject()->incr(...\func_get_args()); } public function incrBy($key, $value): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incrBy(...\func_get_args()); + return $this->initializeLazyObject()->incrBy(...\func_get_args()); } public function incrByFloat($key, $value): \Redis|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incrByFloat(...\func_get_args()); + return $this->initializeLazyObject()->incrByFloat(...\func_get_args()); } public function info(...$sections): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->info(...\func_get_args()); + return $this->initializeLazyObject()->info(...\func_get_args()); } public function isConnected(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->isConnected(...\func_get_args()); + return $this->initializeLazyObject()->isConnected(...\func_get_args()); } public function keys($pattern) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->keys(...\func_get_args()); + return $this->initializeLazyObject()->keys(...\func_get_args()); } public function lInsert($key, $pos, $pivot, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lInsert(...\func_get_args()); + return $this->initializeLazyObject()->lInsert(...\func_get_args()); } public function lLen($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lLen(...\func_get_args()); + return $this->initializeLazyObject()->lLen(...\func_get_args()); } public function lMove($src, $dst, $wherefrom, $whereto): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lMove(...\func_get_args()); + return $this->initializeLazyObject()->lMove(...\func_get_args()); } public function blmove($src, $dst, $wherefrom, $whereto, $timeout): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blmove(...\func_get_args()); + return $this->initializeLazyObject()->blmove(...\func_get_args()); } public function lPop($key, $count = 0): \Redis|array|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lPop(...\func_get_args()); + return $this->initializeLazyObject()->lPop(...\func_get_args()); } public function lPos($key, $value, $options = null): \Redis|array|bool|int|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lPos(...\func_get_args()); + return $this->initializeLazyObject()->lPos(...\func_get_args()); } public function lPush($key, ...$elements): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lPush(...\func_get_args()); + return $this->initializeLazyObject()->lPush(...\func_get_args()); } public function rPush($key, ...$elements): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rPush(...\func_get_args()); + return $this->initializeLazyObject()->rPush(...\func_get_args()); } public function lPushx($key, $value): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lPushx(...\func_get_args()); + return $this->initializeLazyObject()->lPushx(...\func_get_args()); } public function rPushx($key, $value): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rPushx(...\func_get_args()); + return $this->initializeLazyObject()->rPushx(...\func_get_args()); } public function lSet($key, $index, $value): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lSet(...\func_get_args()); + return $this->initializeLazyObject()->lSet(...\func_get_args()); } public function lastSave(): int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lastSave(...\func_get_args()); + return $this->initializeLazyObject()->lastSave(...\func_get_args()); } public function lindex($key, $index): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lindex(...\func_get_args()); + return $this->initializeLazyObject()->lindex(...\func_get_args()); } public function lrange($key, $start, $end): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lrange(...\func_get_args()); + return $this->initializeLazyObject()->lrange(...\func_get_args()); } public function lrem($key, $value, $count = 0): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lrem(...\func_get_args()); + return $this->initializeLazyObject()->lrem(...\func_get_args()); } public function ltrim($key, $start, $end): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ltrim(...\func_get_args()); + return $this->initializeLazyObject()->ltrim(...\func_get_args()); } public function migrate($host, $port, $key, $dstdb, $timeout, $copy = false, $replace = false, #[\SensitiveParameter] $credentials = null): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->migrate(...\func_get_args()); + return $this->initializeLazyObject()->migrate(...\func_get_args()); } public function move($key, $index): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->move(...\func_get_args()); + return $this->initializeLazyObject()->move(...\func_get_args()); } public function mset($key_values): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mset(...\func_get_args()); + return $this->initializeLazyObject()->mset(...\func_get_args()); } public function msetnx($key_values): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->msetnx(...\func_get_args()); + return $this->initializeLazyObject()->msetnx(...\func_get_args()); } public function multi($value = \Redis::MULTI): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->multi(...\func_get_args()); + return $this->initializeLazyObject()->multi(...\func_get_args()); } public function object($subcommand, $key): \Redis|false|int|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->object(...\func_get_args()); + return $this->initializeLazyObject()->object(...\func_get_args()); } public function open($host, $port = 6379, $timeout = 0, $persistent_id = null, $retry_interval = 0, $read_timeout = 0, $context = null): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->open(...\func_get_args()); + return $this->initializeLazyObject()->open(...\func_get_args()); } public function pconnect($host, $port = 6379, $timeout = 0, $persistent_id = null, $retry_interval = 0, $read_timeout = 0, $context = null): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pconnect(...\func_get_args()); + return $this->initializeLazyObject()->pconnect(...\func_get_args()); } public function persist($key): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->persist(...\func_get_args()); + return $this->initializeLazyObject()->persist(...\func_get_args()); } public function pexpire($key, $timeout, $mode = null): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpire(...\func_get_args()); + return $this->initializeLazyObject()->pexpire(...\func_get_args()); } public function pexpireAt($key, $timestamp, $mode = null): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpireAt(...\func_get_args()); + return $this->initializeLazyObject()->pexpireAt(...\func_get_args()); } public function pfadd($key, $elements): \Redis|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfadd(...\func_get_args()); + return $this->initializeLazyObject()->pfadd(...\func_get_args()); } public function pfcount($key_or_keys): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfcount(...\func_get_args()); + return $this->initializeLazyObject()->pfcount(...\func_get_args()); } public function pfmerge($dst, $srckeys): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfmerge(...\func_get_args()); + return $this->initializeLazyObject()->pfmerge(...\func_get_args()); } public function ping($message = null): \Redis|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ping(...\func_get_args()); + return $this->initializeLazyObject()->ping(...\func_get_args()); } public function pipeline(): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pipeline(...\func_get_args()); + return $this->initializeLazyObject()->pipeline(...\func_get_args()); } public function popen($host, $port = 6379, $timeout = 0, $persistent_id = null, $retry_interval = 0, $read_timeout = 0, $context = null): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->popen(...\func_get_args()); + return $this->initializeLazyObject()->popen(...\func_get_args()); } public function psetex($key, $expire, $value): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->psetex(...\func_get_args()); + return $this->initializeLazyObject()->psetex(...\func_get_args()); } public function psubscribe($patterns, $cb): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->psubscribe(...\func_get_args()); + return $this->initializeLazyObject()->psubscribe(...\func_get_args()); } public function pttl($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pttl(...\func_get_args()); + return $this->initializeLazyObject()->pttl(...\func_get_args()); } public function publish($channel, $message): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->publish(...\func_get_args()); + return $this->initializeLazyObject()->publish(...\func_get_args()); } public function pubsub($command, $arg = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pubsub(...\func_get_args()); + return $this->initializeLazyObject()->pubsub(...\func_get_args()); } public function punsubscribe($patterns): \Redis|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->punsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->punsubscribe(...\func_get_args()); } public function rPop($key, $count = 0): \Redis|array|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rPop(...\func_get_args()); + return $this->initializeLazyObject()->rPop(...\func_get_args()); } public function randomKey(): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->randomKey(...\func_get_args()); + return $this->initializeLazyObject()->randomKey(...\func_get_args()); } public function rawcommand($command, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rawcommand(...\func_get_args()); + return $this->initializeLazyObject()->rawcommand(...\func_get_args()); } public function rename($old_name, $new_name): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rename(...\func_get_args()); + return $this->initializeLazyObject()->rename(...\func_get_args()); } public function renameNx($key_src, $key_dst): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->renameNx(...\func_get_args()); + return $this->initializeLazyObject()->renameNx(...\func_get_args()); } public function restore($key, $ttl, $value, $options = null): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->restore(...\func_get_args()); + return $this->initializeLazyObject()->restore(...\func_get_args()); } public function role(): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->role(...\func_get_args()); + return $this->initializeLazyObject()->role(...\func_get_args()); } public function rpoplpush($srckey, $dstkey): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpoplpush(...\func_get_args()); + return $this->initializeLazyObject()->rpoplpush(...\func_get_args()); } public function sAdd($key, $value, ...$other_values): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sAdd(...\func_get_args()); + return $this->initializeLazyObject()->sAdd(...\func_get_args()); } public function sAddArray($key, $values): int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sAddArray(...\func_get_args()); + return $this->initializeLazyObject()->sAddArray(...\func_get_args()); } public function sDiff($key, ...$other_keys): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sDiff(...\func_get_args()); + return $this->initializeLazyObject()->sDiff(...\func_get_args()); } public function sDiffStore($dst, $key, ...$other_keys): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sDiffStore(...\func_get_args()); + return $this->initializeLazyObject()->sDiffStore(...\func_get_args()); } public function sInter($key, ...$other_keys): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sInter(...\func_get_args()); + return $this->initializeLazyObject()->sInter(...\func_get_args()); } public function sintercard($keys, $limit = -1): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sintercard(...\func_get_args()); + return $this->initializeLazyObject()->sintercard(...\func_get_args()); } public function sInterStore($key, ...$other_keys): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sInterStore(...\func_get_args()); + return $this->initializeLazyObject()->sInterStore(...\func_get_args()); } public function sMembers($key): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sMembers(...\func_get_args()); + return $this->initializeLazyObject()->sMembers(...\func_get_args()); } public function sMisMember($key, $member, ...$other_members): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sMisMember(...\func_get_args()); + return $this->initializeLazyObject()->sMisMember(...\func_get_args()); } public function sMove($src, $dst, $value): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sMove(...\func_get_args()); + return $this->initializeLazyObject()->sMove(...\func_get_args()); } public function sPop($key, $count = 0): \Redis|array|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sPop(...\func_get_args()); + return $this->initializeLazyObject()->sPop(...\func_get_args()); } public function sUnion($key, ...$other_keys): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sUnion(...\func_get_args()); + return $this->initializeLazyObject()->sUnion(...\func_get_args()); } public function sUnionStore($dst, $key, ...$other_keys): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sUnionStore(...\func_get_args()); + return $this->initializeLazyObject()->sUnionStore(...\func_get_args()); } public function save(): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->save(...\func_get_args()); + return $this->initializeLazyObject()->save(...\func_get_args()); } public function scan(&$iterator, $pattern = null, $count = 0, $type = null): array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->scan($iterator, ...\array_slice(\func_get_args(), 1)); + return $this->initializeLazyObject()->scan($iterator, ...\array_slice(\func_get_args(), 1)); } public function scard($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->scard(...\func_get_args()); + return $this->initializeLazyObject()->scard(...\func_get_args()); } public function script($command, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->script(...\func_get_args()); + return $this->initializeLazyObject()->script(...\func_get_args()); } public function select($db): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->select(...\func_get_args()); + return $this->initializeLazyObject()->select(...\func_get_args()); } public function set($key, $value, $options = null): \Redis|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->set(...\func_get_args()); + return $this->initializeLazyObject()->set(...\func_get_args()); } public function setBit($key, $idx, $value): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setBit(...\func_get_args()); + return $this->initializeLazyObject()->setBit(...\func_get_args()); } public function setRange($key, $index, $value): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setRange(...\func_get_args()); + return $this->initializeLazyObject()->setRange(...\func_get_args()); } public function setOption($option, $value): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setOption(...\func_get_args()); + return $this->initializeLazyObject()->setOption(...\func_get_args()); } public function setex($key, $expire, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setex(...\func_get_args()); + return $this->initializeLazyObject()->setex(...\func_get_args()); } public function setnx($key, $value): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setnx(...\func_get_args()); + return $this->initializeLazyObject()->setnx(...\func_get_args()); } public function sismember($key, $value): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sismember(...\func_get_args()); + return $this->initializeLazyObject()->sismember(...\func_get_args()); } public function slaveof($host = null, $port = 6379): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->slaveof(...\func_get_args()); + return $this->initializeLazyObject()->slaveof(...\func_get_args()); } public function replicaof($host = null, $port = 6379): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->replicaof(...\func_get_args()); + return $this->initializeLazyObject()->replicaof(...\func_get_args()); } public function touch($key_or_array, ...$more_keys): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->touch(...\func_get_args()); + return $this->initializeLazyObject()->touch(...\func_get_args()); } public function slowlog($operation, $length = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->slowlog(...\func_get_args()); + return $this->initializeLazyObject()->slowlog(...\func_get_args()); } public function sort($key, $options = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sort(...\func_get_args()); + return $this->initializeLazyObject()->sort(...\func_get_args()); } public function sort_ro($key, $options = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sort_ro(...\func_get_args()); + return $this->initializeLazyObject()->sort_ro(...\func_get_args()); } public function sortAsc($key, $pattern = null, $get = null, $offset = -1, $count = -1, $store = null): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sortAsc(...\func_get_args()); + return $this->initializeLazyObject()->sortAsc(...\func_get_args()); } public function sortAscAlpha($key, $pattern = null, $get = null, $offset = -1, $count = -1, $store = null): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sortAscAlpha(...\func_get_args()); + return $this->initializeLazyObject()->sortAscAlpha(...\func_get_args()); } public function sortDesc($key, $pattern = null, $get = null, $offset = -1, $count = -1, $store = null): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sortDesc(...\func_get_args()); + return $this->initializeLazyObject()->sortDesc(...\func_get_args()); } public function sortDescAlpha($key, $pattern = null, $get = null, $offset = -1, $count = -1, $store = null): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sortDescAlpha(...\func_get_args()); + return $this->initializeLazyObject()->sortDescAlpha(...\func_get_args()); } public function srem($key, $value, ...$other_values): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->srem(...\func_get_args()); + return $this->initializeLazyObject()->srem(...\func_get_args()); } public function sscan($key, &$iterator, $pattern = null, $count = 0): array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->sscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); } public function ssubscribe($channels, $cb): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ssubscribe(...\func_get_args()); + return $this->initializeLazyObject()->ssubscribe(...\func_get_args()); } public function strlen($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->strlen(...\func_get_args()); + return $this->initializeLazyObject()->strlen(...\func_get_args()); } public function subscribe($channels, $cb): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->subscribe(...\func_get_args()); + return $this->initializeLazyObject()->subscribe(...\func_get_args()); } public function sunsubscribe($channels): \Redis|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sunsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->sunsubscribe(...\func_get_args()); } public function swapdb($src, $dst): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->swapdb(...\func_get_args()); + return $this->initializeLazyObject()->swapdb(...\func_get_args()); } public function time(): \Redis|array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->time(...\func_get_args()); + return $this->initializeLazyObject()->time(...\func_get_args()); } public function ttl($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ttl(...\func_get_args()); + return $this->initializeLazyObject()->ttl(...\func_get_args()); } public function type($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->type(...\func_get_args()); + return $this->initializeLazyObject()->type(...\func_get_args()); } public function unlink($key, ...$other_keys): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unlink(...\func_get_args()); + return $this->initializeLazyObject()->unlink(...\func_get_args()); } public function unsubscribe($channels): \Redis|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->unsubscribe(...\func_get_args()); } public function unwatch(): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unwatch(...\func_get_args()); + return $this->initializeLazyObject()->unwatch(...\func_get_args()); } public function watch($key, ...$other_keys): \Redis|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->watch(...\func_get_args()); + return $this->initializeLazyObject()->watch(...\func_get_args()); } public function wait($numreplicas, $timeout): false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->wait(...\func_get_args()); + return $this->initializeLazyObject()->wait(...\func_get_args()); } public function xack($key, $group, $ids): false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xack(...\func_get_args()); + return $this->initializeLazyObject()->xack(...\func_get_args()); } public function xadd($key, $id, $values, $maxlen = 0, $approx = false, $nomkstream = false): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xadd(...\func_get_args()); + return $this->initializeLazyObject()->xadd(...\func_get_args()); } public function xautoclaim($key, $group, $consumer, $min_idle, $start, $count = -1, $justid = false): \Redis|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xautoclaim(...\func_get_args()); + return $this->initializeLazyObject()->xautoclaim(...\func_get_args()); } public function xclaim($key, $group, $consumer, $min_idle, $ids, $options): \Redis|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xclaim(...\func_get_args()); + return $this->initializeLazyObject()->xclaim(...\func_get_args()); } public function xdel($key, $ids): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xdel(...\func_get_args()); + return $this->initializeLazyObject()->xdel(...\func_get_args()); } public function xgroup($operation, $key = null, $group = null, $id_or_consumer = null, $mkstream = false, $entries_read = -2): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xgroup(...\func_get_args()); + return $this->initializeLazyObject()->xgroup(...\func_get_args()); } public function xinfo($operation, $arg1 = null, $arg2 = null, $count = -1): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xinfo(...\func_get_args()); + return $this->initializeLazyObject()->xinfo(...\func_get_args()); } public function xlen($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xlen(...\func_get_args()); + return $this->initializeLazyObject()->xlen(...\func_get_args()); } public function xpending($key, $group, $start = null, $end = null, $count = -1, $consumer = null): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xpending(...\func_get_args()); + return $this->initializeLazyObject()->xpending(...\func_get_args()); } public function xrange($key, $start, $end, $count = -1): \Redis|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xrange(...\func_get_args()); + return $this->initializeLazyObject()->xrange(...\func_get_args()); } public function xread($streams, $count = -1, $block = -1): \Redis|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xread(...\func_get_args()); + return $this->initializeLazyObject()->xread(...\func_get_args()); } public function xreadgroup($group, $consumer, $streams, $count = 1, $block = 1): \Redis|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xreadgroup(...\func_get_args()); + return $this->initializeLazyObject()->xreadgroup(...\func_get_args()); } public function xrevrange($key, $end, $start, $count = -1): \Redis|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xrevrange(...\func_get_args()); + return $this->initializeLazyObject()->xrevrange(...\func_get_args()); } public function xtrim($key, $threshold, $approx = false, $minid = false, $limit = -1): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xtrim(...\func_get_args()); + return $this->initializeLazyObject()->xtrim(...\func_get_args()); } public function zAdd($key, $score_or_options, ...$more_scores_and_mems): \Redis|false|float|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zAdd(...\func_get_args()); + return $this->initializeLazyObject()->zAdd(...\func_get_args()); } public function zCard($key): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zCard(...\func_get_args()); + return $this->initializeLazyObject()->zCard(...\func_get_args()); } public function zCount($key, $start, $end): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zCount(...\func_get_args()); + return $this->initializeLazyObject()->zCount(...\func_get_args()); } public function zIncrBy($key, $value, $member): \Redis|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zIncrBy(...\func_get_args()); + return $this->initializeLazyObject()->zIncrBy(...\func_get_args()); } public function zLexCount($key, $min, $max): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zLexCount(...\func_get_args()); + return $this->initializeLazyObject()->zLexCount(...\func_get_args()); } public function zMscore($key, $member, ...$other_members): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zMscore(...\func_get_args()); + return $this->initializeLazyObject()->zMscore(...\func_get_args()); } public function zPopMax($key, $count = null): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zPopMax(...\func_get_args()); + return $this->initializeLazyObject()->zPopMax(...\func_get_args()); } public function zPopMin($key, $count = null): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zPopMin(...\func_get_args()); + return $this->initializeLazyObject()->zPopMin(...\func_get_args()); } public function zRange($key, $start, $end, $options = null): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRange(...\func_get_args()); + return $this->initializeLazyObject()->zRange(...\func_get_args()); } public function zRangeByLex($key, $min, $max, $offset = -1, $count = -1): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRangeByLex(...\func_get_args()); + return $this->initializeLazyObject()->zRangeByLex(...\func_get_args()); } public function zRangeByScore($key, $start, $end, $options = []): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRangeByScore(...\func_get_args()); + return $this->initializeLazyObject()->zRangeByScore(...\func_get_args()); } public function zrangestore($dstkey, $srckey, $start, $end, $options = null): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrangestore(...\func_get_args()); + return $this->initializeLazyObject()->zrangestore(...\func_get_args()); } public function zRandMember($key, $options = null): \Redis|array|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRandMember(...\func_get_args()); + return $this->initializeLazyObject()->zRandMember(...\func_get_args()); } public function zRank($key, $member): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRank(...\func_get_args()); + return $this->initializeLazyObject()->zRank(...\func_get_args()); } public function zRem($key, $member, ...$other_members): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRem(...\func_get_args()); + return $this->initializeLazyObject()->zRem(...\func_get_args()); } public function zRemRangeByLex($key, $min, $max): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRemRangeByLex(...\func_get_args()); + return $this->initializeLazyObject()->zRemRangeByLex(...\func_get_args()); } public function zRemRangeByRank($key, $start, $end): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRemRangeByRank(...\func_get_args()); + return $this->initializeLazyObject()->zRemRangeByRank(...\func_get_args()); } public function zRemRangeByScore($key, $start, $end): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRemRangeByScore(...\func_get_args()); + return $this->initializeLazyObject()->zRemRangeByScore(...\func_get_args()); } public function zRevRange($key, $start, $end, $scores = null): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRevRange(...\func_get_args()); + return $this->initializeLazyObject()->zRevRange(...\func_get_args()); } public function zRevRangeByLex($key, $max, $min, $offset = -1, $count = -1): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRevRangeByLex(...\func_get_args()); + return $this->initializeLazyObject()->zRevRangeByLex(...\func_get_args()); } public function zRevRangeByScore($key, $max, $min, $options = []): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRevRangeByScore(...\func_get_args()); + return $this->initializeLazyObject()->zRevRangeByScore(...\func_get_args()); } public function zRevRank($key, $member): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zRevRank(...\func_get_args()); + return $this->initializeLazyObject()->zRevRank(...\func_get_args()); } public function zScore($key, $member): \Redis|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zScore(...\func_get_args()); + return $this->initializeLazyObject()->zScore(...\func_get_args()); } public function zdiff($keys, $options = null): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zdiff(...\func_get_args()); + return $this->initializeLazyObject()->zdiff(...\func_get_args()); } public function zdiffstore($dst, $keys): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zdiffstore(...\func_get_args()); + return $this->initializeLazyObject()->zdiffstore(...\func_get_args()); } public function zinter($keys, $weights = null, $options = null): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zinter(...\func_get_args()); + return $this->initializeLazyObject()->zinter(...\func_get_args()); } public function zintercard($keys, $limit = -1): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zintercard(...\func_get_args()); + return $this->initializeLazyObject()->zintercard(...\func_get_args()); } public function zinterstore($dst, $keys, $weights = null, $aggregate = null): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zinterstore(...\func_get_args()); + return $this->initializeLazyObject()->zinterstore(...\func_get_args()); } public function zscan($key, &$iterator, $pattern = null, $count = 0): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->zscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); } public function zunion($keys, $weights = null, $options = null): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zunion(...\func_get_args()); + return $this->initializeLazyObject()->zunion(...\func_get_args()); } public function zunionstore($dst, $keys, $weights = null, $aggregate = null): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zunionstore(...\func_get_args()); + return $this->initializeLazyObject()->zunionstore(...\func_get_args()); } } diff --git a/app/vendor/symfony/cache/Traits/Redis6ProxyTrait.php b/app/vendor/symfony/cache/Traits/Redis6ProxyTrait.php index 34f60cb10..bb8d97849 100644 --- a/app/vendor/symfony/cache/Traits/Redis6ProxyTrait.php +++ b/app/vendor/symfony/cache/Traits/Redis6ProxyTrait.php @@ -19,32 +19,32 @@ trait Redis6ProxyTrait { public function dump($key): \Redis|string|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dump(...\func_get_args()); + return $this->initializeLazyObject()->dump(...\func_get_args()); } public function hRandField($key, $options = null): \Redis|array|string|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hRandField(...\func_get_args()); + return $this->initializeLazyObject()->hRandField(...\func_get_args()); } public function hSet($key, ...$fields_and_vals): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hSet(...\func_get_args()); + return $this->initializeLazyObject()->hSet(...\func_get_args()); } public function mget($keys): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mget(...\func_get_args()); + return $this->initializeLazyObject()->mget(...\func_get_args()); } public function sRandMember($key, $count = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sRandMember(...\func_get_args()); + return $this->initializeLazyObject()->sRandMember(...\func_get_args()); } public function waitaof($numlocal, $numreplicas, $timeout): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->waitaof(...\func_get_args()); + return $this->initializeLazyObject()->waitaof(...\func_get_args()); } } } else { @@ -55,27 +55,27 @@ trait Redis6ProxyTrait { public function dump($key): \Redis|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dump(...\func_get_args()); + return $this->initializeLazyObject()->dump(...\func_get_args()); } public function hRandField($key, $options = null): \Redis|array|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hRandField(...\func_get_args()); + return $this->initializeLazyObject()->hRandField(...\func_get_args()); } public function hSet($key, $member, $value): \Redis|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hSet(...\func_get_args()); + return $this->initializeLazyObject()->hSet(...\func_get_args()); } public function mget($keys): \Redis|array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mget(...\func_get_args()); + return $this->initializeLazyObject()->mget(...\func_get_args()); } public function sRandMember($key, $count = 0): \Redis|array|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sRandMember(...\func_get_args()); + return $this->initializeLazyObject()->sRandMember(...\func_get_args()); } } } diff --git a/app/vendor/symfony/cache/Traits/RedisCluster5Proxy.php b/app/vendor/symfony/cache/Traits/RedisCluster5Proxy.php index 511c53dd7..43f340478 100644 --- a/app/vendor/symfony/cache/Traits/RedisCluster5Proxy.php +++ b/app/vendor/symfony/cache/Traits/RedisCluster5Proxy.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Cache\Traits; use Symfony\Component\VarExporter\LazyObjectInterface; -use Symfony\Component\VarExporter\LazyProxyTrait; use Symfony\Contracts\Service\ResetInterface; // Help opcache.preload discover always-needed symbols @@ -25,959 +24,957 @@ class_exists(\Symfony\Component\VarExporter\Internal\LazyObjectState::class); */ class RedisCluster5Proxy extends \RedisCluster implements ResetInterface, LazyObjectInterface { - use LazyProxyTrait { + use RedisProxyTrait { resetLazyObject as reset; } - private const LAZY_OBJECT_PROPERTY_SCOPES = []; - public function __construct($name, $seeds = null, $timeout = null, $read_timeout = null, $persistent = null, #[\SensitiveParameter] $auth = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->__construct(...\func_get_args()); + $this->initializeLazyObject()->__construct(...\func_get_args()); } public function _masters() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_masters(...\func_get_args()); + return $this->initializeLazyObject()->_masters(...\func_get_args()); } public function _prefix($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_prefix(...\func_get_args()); + return $this->initializeLazyObject()->_prefix(...\func_get_args()); } public function _redir() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_redir(...\func_get_args()); + return $this->initializeLazyObject()->_redir(...\func_get_args()); } public function _serialize($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_serialize(...\func_get_args()); + return $this->initializeLazyObject()->_serialize(...\func_get_args()); } public function _unserialize($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_unserialize(...\func_get_args()); + return $this->initializeLazyObject()->_unserialize(...\func_get_args()); } public function _compress($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_compress(...\func_get_args()); + return $this->initializeLazyObject()->_compress(...\func_get_args()); } public function _uncompress($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_uncompress(...\func_get_args()); + return $this->initializeLazyObject()->_uncompress(...\func_get_args()); } public function _pack($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_pack(...\func_get_args()); + return $this->initializeLazyObject()->_pack(...\func_get_args()); } public function _unpack($value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_unpack(...\func_get_args()); + return $this->initializeLazyObject()->_unpack(...\func_get_args()); } public function acl($key_or_address, $subcmd, ...$args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->acl(...\func_get_args()); + return $this->initializeLazyObject()->acl(...\func_get_args()); } public function append($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->append(...\func_get_args()); + return $this->initializeLazyObject()->append(...\func_get_args()); } public function bgrewriteaof($key_or_address) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgrewriteaof(...\func_get_args()); + return $this->initializeLazyObject()->bgrewriteaof(...\func_get_args()); } public function bgsave($key_or_address) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgsave(...\func_get_args()); + return $this->initializeLazyObject()->bgsave(...\func_get_args()); } public function bitcount($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitcount(...\func_get_args()); + return $this->initializeLazyObject()->bitcount(...\func_get_args()); } public function bitop($operation, $ret_key, $key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitop(...\func_get_args()); + return $this->initializeLazyObject()->bitop(...\func_get_args()); } public function bitpos($key, $bit, $start = null, $end = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitpos(...\func_get_args()); + return $this->initializeLazyObject()->bitpos(...\func_get_args()); } public function blpop($key, $timeout_or_key, ...$extra_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blpop(...\func_get_args()); + return $this->initializeLazyObject()->blpop(...\func_get_args()); } public function brpop($key, $timeout_or_key, ...$extra_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->brpop(...\func_get_args()); + return $this->initializeLazyObject()->brpop(...\func_get_args()); } public function brpoplpush($src, $dst, $timeout) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->brpoplpush(...\func_get_args()); + return $this->initializeLazyObject()->brpoplpush(...\func_get_args()); } public function clearlasterror() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->clearlasterror(...\func_get_args()); + return $this->initializeLazyObject()->clearlasterror(...\func_get_args()); } public function bzpopmax($key, $timeout_or_key, ...$extra_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzpopmax(...\func_get_args()); + return $this->initializeLazyObject()->bzpopmax(...\func_get_args()); } public function bzpopmin($key, $timeout_or_key, ...$extra_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzpopmin(...\func_get_args()); + return $this->initializeLazyObject()->bzpopmin(...\func_get_args()); } public function client($key_or_address, $arg = null, ...$other_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->client(...\func_get_args()); + return $this->initializeLazyObject()->client(...\func_get_args()); } public function close() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->close(...\func_get_args()); + return $this->initializeLazyObject()->close(...\func_get_args()); } public function cluster($key_or_address, $arg = null, ...$other_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->cluster(...\func_get_args()); + return $this->initializeLazyObject()->cluster(...\func_get_args()); } public function command(...$args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->command(...\func_get_args()); + return $this->initializeLazyObject()->command(...\func_get_args()); } public function config($key_or_address, $arg = null, ...$other_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->config(...\func_get_args()); + return $this->initializeLazyObject()->config(...\func_get_args()); } public function dbsize($key_or_address) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dbsize(...\func_get_args()); + return $this->initializeLazyObject()->dbsize(...\func_get_args()); } public function decr($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decr(...\func_get_args()); + return $this->initializeLazyObject()->decr(...\func_get_args()); } public function decrby($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decrby(...\func_get_args()); + return $this->initializeLazyObject()->decrby(...\func_get_args()); } public function del($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->del(...\func_get_args()); + return $this->initializeLazyObject()->del(...\func_get_args()); } public function discard() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->discard(...\func_get_args()); + return $this->initializeLazyObject()->discard(...\func_get_args()); } public function dump($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dump(...\func_get_args()); + return $this->initializeLazyObject()->dump(...\func_get_args()); } public function echo($msg) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->echo(...\func_get_args()); + return $this->initializeLazyObject()->echo(...\func_get_args()); } public function eval($script, $args = null, $num_keys = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->eval(...\func_get_args()); + return $this->initializeLazyObject()->eval(...\func_get_args()); } public function evalsha($script_sha, $args = null, $num_keys = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->evalsha(...\func_get_args()); + return $this->initializeLazyObject()->evalsha(...\func_get_args()); } public function exec() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->exec(...\func_get_args()); + return $this->initializeLazyObject()->exec(...\func_get_args()); } public function exists($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->exists(...\func_get_args()); + return $this->initializeLazyObject()->exists(...\func_get_args()); } public function expire($key, $timeout) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expire(...\func_get_args()); + return $this->initializeLazyObject()->expire(...\func_get_args()); } public function expireat($key, $timestamp) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expireat(...\func_get_args()); + return $this->initializeLazyObject()->expireat(...\func_get_args()); } public function flushall($key_or_address, $async = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushall(...\func_get_args()); + return $this->initializeLazyObject()->flushall(...\func_get_args()); } public function flushdb($key_or_address, $async = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushdb(...\func_get_args()); + return $this->initializeLazyObject()->flushdb(...\func_get_args()); } public function geoadd($key, $lng, $lat, $member, ...$other_triples) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geoadd(...\func_get_args()); + return $this->initializeLazyObject()->geoadd(...\func_get_args()); } public function geodist($key, $src, $dst, $unit = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geodist(...\func_get_args()); + return $this->initializeLazyObject()->geodist(...\func_get_args()); } public function geohash($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geohash(...\func_get_args()); + return $this->initializeLazyObject()->geohash(...\func_get_args()); } public function geopos($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geopos(...\func_get_args()); + return $this->initializeLazyObject()->geopos(...\func_get_args()); } public function georadius($key, $lng, $lan, $radius, $unit, $opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadius(...\func_get_args()); + return $this->initializeLazyObject()->georadius(...\func_get_args()); } public function georadius_ro($key, $lng, $lan, $radius, $unit, $opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadius_ro(...\func_get_args()); + return $this->initializeLazyObject()->georadius_ro(...\func_get_args()); } public function georadiusbymember($key, $member, $radius, $unit, $opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadiusbymember(...\func_get_args()); + return $this->initializeLazyObject()->georadiusbymember(...\func_get_args()); } public function georadiusbymember_ro($key, $member, $radius, $unit, $opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadiusbymember_ro(...\func_get_args()); + return $this->initializeLazyObject()->georadiusbymember_ro(...\func_get_args()); } public function get($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->get(...\func_get_args()); + return $this->initializeLazyObject()->get(...\func_get_args()); } public function getbit($key, $offset) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getbit(...\func_get_args()); + return $this->initializeLazyObject()->getbit(...\func_get_args()); } public function getlasterror() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getlasterror(...\func_get_args()); + return $this->initializeLazyObject()->getlasterror(...\func_get_args()); } public function getmode() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getmode(...\func_get_args()); + return $this->initializeLazyObject()->getmode(...\func_get_args()); } public function getoption($option) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getoption(...\func_get_args()); + return $this->initializeLazyObject()->getoption(...\func_get_args()); } public function getrange($key, $start, $end) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getrange(...\func_get_args()); + return $this->initializeLazyObject()->getrange(...\func_get_args()); } public function getset($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getset(...\func_get_args()); + return $this->initializeLazyObject()->getset(...\func_get_args()); } public function hdel($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hdel(...\func_get_args()); + return $this->initializeLazyObject()->hdel(...\func_get_args()); } public function hexists($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hexists(...\func_get_args()); + return $this->initializeLazyObject()->hexists(...\func_get_args()); } public function hget($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hget(...\func_get_args()); + return $this->initializeLazyObject()->hget(...\func_get_args()); } public function hgetall($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hgetall(...\func_get_args()); + return $this->initializeLazyObject()->hgetall(...\func_get_args()); } public function hincrby($key, $member, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hincrby(...\func_get_args()); + return $this->initializeLazyObject()->hincrby(...\func_get_args()); } public function hincrbyfloat($key, $member, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hincrbyfloat(...\func_get_args()); + return $this->initializeLazyObject()->hincrbyfloat(...\func_get_args()); } public function hkeys($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hkeys(...\func_get_args()); + return $this->initializeLazyObject()->hkeys(...\func_get_args()); } public function hlen($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hlen(...\func_get_args()); + return $this->initializeLazyObject()->hlen(...\func_get_args()); } public function hmget($key, $keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hmget(...\func_get_args()); + return $this->initializeLazyObject()->hmget(...\func_get_args()); } public function hmset($key, $pairs) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hmset(...\func_get_args()); + return $this->initializeLazyObject()->hmset(...\func_get_args()); } public function hscan($str_key, &$i_iterator, $str_pattern = null, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->hscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); } public function hset($key, $member, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hset(...\func_get_args()); + return $this->initializeLazyObject()->hset(...\func_get_args()); } public function hsetnx($key, $member, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hsetnx(...\func_get_args()); + return $this->initializeLazyObject()->hsetnx(...\func_get_args()); } public function hstrlen($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hstrlen(...\func_get_args()); + return $this->initializeLazyObject()->hstrlen(...\func_get_args()); } public function hvals($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hvals(...\func_get_args()); + return $this->initializeLazyObject()->hvals(...\func_get_args()); } public function incr($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incr(...\func_get_args()); + return $this->initializeLazyObject()->incr(...\func_get_args()); } public function incrby($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incrby(...\func_get_args()); + return $this->initializeLazyObject()->incrby(...\func_get_args()); } public function incrbyfloat($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incrbyfloat(...\func_get_args()); + return $this->initializeLazyObject()->incrbyfloat(...\func_get_args()); } public function info($key_or_address, $option = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->info(...\func_get_args()); + return $this->initializeLazyObject()->info(...\func_get_args()); } public function keys($pattern) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->keys(...\func_get_args()); + return $this->initializeLazyObject()->keys(...\func_get_args()); } public function lastsave($key_or_address) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lastsave(...\func_get_args()); + return $this->initializeLazyObject()->lastsave(...\func_get_args()); } public function lget($key, $index) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lget(...\func_get_args()); + return $this->initializeLazyObject()->lget(...\func_get_args()); } public function lindex($key, $index) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lindex(...\func_get_args()); + return $this->initializeLazyObject()->lindex(...\func_get_args()); } public function linsert($key, $position, $pivot, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->linsert(...\func_get_args()); + return $this->initializeLazyObject()->linsert(...\func_get_args()); } public function llen($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->llen(...\func_get_args()); + return $this->initializeLazyObject()->llen(...\func_get_args()); } public function lpop($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpop(...\func_get_args()); + return $this->initializeLazyObject()->lpop(...\func_get_args()); } public function lpush($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpush(...\func_get_args()); + return $this->initializeLazyObject()->lpush(...\func_get_args()); } public function lpushx($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpushx(...\func_get_args()); + return $this->initializeLazyObject()->lpushx(...\func_get_args()); } public function lrange($key, $start, $end) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lrange(...\func_get_args()); + return $this->initializeLazyObject()->lrange(...\func_get_args()); } public function lrem($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lrem(...\func_get_args()); + return $this->initializeLazyObject()->lrem(...\func_get_args()); } public function lset($key, $index, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lset(...\func_get_args()); + return $this->initializeLazyObject()->lset(...\func_get_args()); } public function ltrim($key, $start, $stop) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ltrim(...\func_get_args()); + return $this->initializeLazyObject()->ltrim(...\func_get_args()); } public function mget($keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mget(...\func_get_args()); + return $this->initializeLazyObject()->mget(...\func_get_args()); } public function mset($pairs) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mset(...\func_get_args()); + return $this->initializeLazyObject()->mset(...\func_get_args()); } public function msetnx($pairs) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->msetnx(...\func_get_args()); + return $this->initializeLazyObject()->msetnx(...\func_get_args()); } public function multi() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->multi(...\func_get_args()); + return $this->initializeLazyObject()->multi(...\func_get_args()); } public function object($field, $key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->object(...\func_get_args()); + return $this->initializeLazyObject()->object(...\func_get_args()); } public function persist($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->persist(...\func_get_args()); + return $this->initializeLazyObject()->persist(...\func_get_args()); } public function pexpire($key, $timestamp) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpire(...\func_get_args()); + return $this->initializeLazyObject()->pexpire(...\func_get_args()); } public function pexpireat($key, $timestamp) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpireat(...\func_get_args()); + return $this->initializeLazyObject()->pexpireat(...\func_get_args()); } public function pfadd($key, $elements) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfadd(...\func_get_args()); + return $this->initializeLazyObject()->pfadd(...\func_get_args()); } public function pfcount($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfcount(...\func_get_args()); + return $this->initializeLazyObject()->pfcount(...\func_get_args()); } public function pfmerge($dstkey, $keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfmerge(...\func_get_args()); + return $this->initializeLazyObject()->pfmerge(...\func_get_args()); } public function ping($key_or_address) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ping(...\func_get_args()); + return $this->initializeLazyObject()->ping(...\func_get_args()); } public function psetex($key, $expire, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->psetex(...\func_get_args()); + return $this->initializeLazyObject()->psetex(...\func_get_args()); } public function psubscribe($patterns, $callback) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->psubscribe(...\func_get_args()); + return $this->initializeLazyObject()->psubscribe(...\func_get_args()); } public function pttl($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pttl(...\func_get_args()); + return $this->initializeLazyObject()->pttl(...\func_get_args()); } public function publish($channel, $message) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->publish(...\func_get_args()); + return $this->initializeLazyObject()->publish(...\func_get_args()); } public function pubsub($key_or_address, $arg = null, ...$other_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pubsub(...\func_get_args()); + return $this->initializeLazyObject()->pubsub(...\func_get_args()); } public function punsubscribe($pattern, ...$other_patterns) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->punsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->punsubscribe(...\func_get_args()); } public function randomkey($key_or_address) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->randomkey(...\func_get_args()); + return $this->initializeLazyObject()->randomkey(...\func_get_args()); } public function rawcommand($cmd, ...$args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rawcommand(...\func_get_args()); + return $this->initializeLazyObject()->rawcommand(...\func_get_args()); } public function rename($key, $newkey) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rename(...\func_get_args()); + return $this->initializeLazyObject()->rename(...\func_get_args()); } public function renamenx($key, $newkey) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->renamenx(...\func_get_args()); + return $this->initializeLazyObject()->renamenx(...\func_get_args()); } public function restore($ttl, $key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->restore(...\func_get_args()); + return $this->initializeLazyObject()->restore(...\func_get_args()); } public function role() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->role(...\func_get_args()); + return $this->initializeLazyObject()->role(...\func_get_args()); } public function rpop($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpop(...\func_get_args()); + return $this->initializeLazyObject()->rpop(...\func_get_args()); } public function rpoplpush($src, $dst) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpoplpush(...\func_get_args()); + return $this->initializeLazyObject()->rpoplpush(...\func_get_args()); } public function rpush($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpush(...\func_get_args()); + return $this->initializeLazyObject()->rpush(...\func_get_args()); } public function rpushx($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpushx(...\func_get_args()); + return $this->initializeLazyObject()->rpushx(...\func_get_args()); } public function sadd($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sadd(...\func_get_args()); + return $this->initializeLazyObject()->sadd(...\func_get_args()); } public function saddarray($key, $options) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->saddarray(...\func_get_args()); + return $this->initializeLazyObject()->saddarray(...\func_get_args()); } public function save($key_or_address) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->save(...\func_get_args()); + return $this->initializeLazyObject()->save(...\func_get_args()); } public function scan(&$i_iterator, $str_node, $str_pattern = null, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->scan($i_iterator, ...\array_slice(\func_get_args(), 1)); + return $this->initializeLazyObject()->scan($i_iterator, ...\array_slice(\func_get_args(), 1)); } public function scard($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->scard(...\func_get_args()); + return $this->initializeLazyObject()->scard(...\func_get_args()); } public function script($key_or_address, $arg = null, ...$other_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->script(...\func_get_args()); + return $this->initializeLazyObject()->script(...\func_get_args()); } public function sdiff($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sdiff(...\func_get_args()); + return $this->initializeLazyObject()->sdiff(...\func_get_args()); } public function sdiffstore($dst, $key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sdiffstore(...\func_get_args()); + return $this->initializeLazyObject()->sdiffstore(...\func_get_args()); } public function set($key, $value, $opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->set(...\func_get_args()); + return $this->initializeLazyObject()->set(...\func_get_args()); } public function setbit($key, $offset, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setbit(...\func_get_args()); + return $this->initializeLazyObject()->setbit(...\func_get_args()); } public function setex($key, $expire, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setex(...\func_get_args()); + return $this->initializeLazyObject()->setex(...\func_get_args()); } public function setnx($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setnx(...\func_get_args()); + return $this->initializeLazyObject()->setnx(...\func_get_args()); } public function setoption($option, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setoption(...\func_get_args()); + return $this->initializeLazyObject()->setoption(...\func_get_args()); } public function setrange($key, $offset, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setrange(...\func_get_args()); + return $this->initializeLazyObject()->setrange(...\func_get_args()); } public function sinter($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sinter(...\func_get_args()); + return $this->initializeLazyObject()->sinter(...\func_get_args()); } public function sinterstore($dst, $key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sinterstore(...\func_get_args()); + return $this->initializeLazyObject()->sinterstore(...\func_get_args()); } public function sismember($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sismember(...\func_get_args()); + return $this->initializeLazyObject()->sismember(...\func_get_args()); } public function slowlog($key_or_address, $arg = null, ...$other_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->slowlog(...\func_get_args()); + return $this->initializeLazyObject()->slowlog(...\func_get_args()); } public function smembers($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->smembers(...\func_get_args()); + return $this->initializeLazyObject()->smembers(...\func_get_args()); } public function smove($src, $dst, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->smove(...\func_get_args()); + return $this->initializeLazyObject()->smove(...\func_get_args()); } public function sort($key, $options = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sort(...\func_get_args()); + return $this->initializeLazyObject()->sort(...\func_get_args()); } public function spop($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->spop(...\func_get_args()); + return $this->initializeLazyObject()->spop(...\func_get_args()); } public function srandmember($key, $count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->srandmember(...\func_get_args()); + return $this->initializeLazyObject()->srandmember(...\func_get_args()); } public function srem($key, $value) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->srem(...\func_get_args()); + return $this->initializeLazyObject()->srem(...\func_get_args()); } public function sscan($str_key, &$i_iterator, $str_pattern = null, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->sscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); } public function strlen($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->strlen(...\func_get_args()); + return $this->initializeLazyObject()->strlen(...\func_get_args()); } public function subscribe($channels, $callback) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->subscribe(...\func_get_args()); + return $this->initializeLazyObject()->subscribe(...\func_get_args()); } public function sunion($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sunion(...\func_get_args()); + return $this->initializeLazyObject()->sunion(...\func_get_args()); } public function sunionstore($dst, $key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sunionstore(...\func_get_args()); + return $this->initializeLazyObject()->sunionstore(...\func_get_args()); } public function time() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->time(...\func_get_args()); + return $this->initializeLazyObject()->time(...\func_get_args()); } public function ttl($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ttl(...\func_get_args()); + return $this->initializeLazyObject()->ttl(...\func_get_args()); } public function type($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->type(...\func_get_args()); + return $this->initializeLazyObject()->type(...\func_get_args()); } public function unsubscribe($channel, ...$other_channels) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->unsubscribe(...\func_get_args()); } public function unlink($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unlink(...\func_get_args()); + return $this->initializeLazyObject()->unlink(...\func_get_args()); } public function unwatch() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unwatch(...\func_get_args()); + return $this->initializeLazyObject()->unwatch(...\func_get_args()); } public function watch($key, ...$other_keys) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->watch(...\func_get_args()); + return $this->initializeLazyObject()->watch(...\func_get_args()); } public function xack($str_key, $str_group, $arr_ids) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xack(...\func_get_args()); + return $this->initializeLazyObject()->xack(...\func_get_args()); } public function xadd($str_key, $str_id, $arr_fields, $i_maxlen = null, $boo_approximate = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xadd(...\func_get_args()); + return $this->initializeLazyObject()->xadd(...\func_get_args()); } public function xclaim($str_key, $str_group, $str_consumer, $i_min_idle, $arr_ids, $arr_opts = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xclaim(...\func_get_args()); + return $this->initializeLazyObject()->xclaim(...\func_get_args()); } public function xdel($str_key, $arr_ids) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xdel(...\func_get_args()); + return $this->initializeLazyObject()->xdel(...\func_get_args()); } public function xgroup($str_operation, $str_key = null, $str_arg1 = null, $str_arg2 = null, $str_arg3 = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xgroup(...\func_get_args()); + return $this->initializeLazyObject()->xgroup(...\func_get_args()); } public function xinfo($str_cmd, $str_key = null, $str_group = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xinfo(...\func_get_args()); + return $this->initializeLazyObject()->xinfo(...\func_get_args()); } public function xlen($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xlen(...\func_get_args()); + return $this->initializeLazyObject()->xlen(...\func_get_args()); } public function xpending($str_key, $str_group, $str_start = null, $str_end = null, $i_count = null, $str_consumer = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xpending(...\func_get_args()); + return $this->initializeLazyObject()->xpending(...\func_get_args()); } public function xrange($str_key, $str_start, $str_end, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xrange(...\func_get_args()); + return $this->initializeLazyObject()->xrange(...\func_get_args()); } public function xread($arr_streams, $i_count = null, $i_block = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xread(...\func_get_args()); + return $this->initializeLazyObject()->xread(...\func_get_args()); } public function xreadgroup($str_group, $str_consumer, $arr_streams, $i_count = null, $i_block = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xreadgroup(...\func_get_args()); + return $this->initializeLazyObject()->xreadgroup(...\func_get_args()); } public function xrevrange($str_key, $str_start, $str_end, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xrevrange(...\func_get_args()); + return $this->initializeLazyObject()->xrevrange(...\func_get_args()); } public function xtrim($str_key, $i_maxlen, $boo_approximate = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xtrim(...\func_get_args()); + return $this->initializeLazyObject()->xtrim(...\func_get_args()); } public function zadd($key, $score, $value, ...$extra_args) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zadd(...\func_get_args()); + return $this->initializeLazyObject()->zadd(...\func_get_args()); } public function zcard($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zcard(...\func_get_args()); + return $this->initializeLazyObject()->zcard(...\func_get_args()); } public function zcount($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zcount(...\func_get_args()); + return $this->initializeLazyObject()->zcount(...\func_get_args()); } public function zincrby($key, $value, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zincrby(...\func_get_args()); + return $this->initializeLazyObject()->zincrby(...\func_get_args()); } public function zinterstore($key, $keys, $weights = null, $aggregate = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zinterstore(...\func_get_args()); + return $this->initializeLazyObject()->zinterstore(...\func_get_args()); } public function zlexcount($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zlexcount(...\func_get_args()); + return $this->initializeLazyObject()->zlexcount(...\func_get_args()); } public function zpopmax($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zpopmax(...\func_get_args()); + return $this->initializeLazyObject()->zpopmax(...\func_get_args()); } public function zpopmin($key) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zpopmin(...\func_get_args()); + return $this->initializeLazyObject()->zpopmin(...\func_get_args()); } public function zrange($key, $start, $end, $scores = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrange(...\func_get_args()); + return $this->initializeLazyObject()->zrange(...\func_get_args()); } public function zrangebylex($key, $min, $max, $offset = null, $limit = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrangebylex(...\func_get_args()); + return $this->initializeLazyObject()->zrangebylex(...\func_get_args()); } public function zrangebyscore($key, $start, $end, $options = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrangebyscore(...\func_get_args()); + return $this->initializeLazyObject()->zrangebyscore(...\func_get_args()); } public function zrank($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrank(...\func_get_args()); + return $this->initializeLazyObject()->zrank(...\func_get_args()); } public function zrem($key, $member, ...$other_members) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrem(...\func_get_args()); + return $this->initializeLazyObject()->zrem(...\func_get_args()); } public function zremrangebylex($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zremrangebylex(...\func_get_args()); + return $this->initializeLazyObject()->zremrangebylex(...\func_get_args()); } public function zremrangebyrank($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zremrangebyrank(...\func_get_args()); + return $this->initializeLazyObject()->zremrangebyrank(...\func_get_args()); } public function zremrangebyscore($key, $min, $max) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zremrangebyscore(...\func_get_args()); + return $this->initializeLazyObject()->zremrangebyscore(...\func_get_args()); } public function zrevrange($key, $start, $end, $scores = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrange(...\func_get_args()); + return $this->initializeLazyObject()->zrevrange(...\func_get_args()); } public function zrevrangebylex($key, $min, $max, $offset = null, $limit = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrangebylex(...\func_get_args()); + return $this->initializeLazyObject()->zrevrangebylex(...\func_get_args()); } public function zrevrangebyscore($key, $start, $end, $options = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrangebyscore(...\func_get_args()); + return $this->initializeLazyObject()->zrevrangebyscore(...\func_get_args()); } public function zrevrank($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrank(...\func_get_args()); + return $this->initializeLazyObject()->zrevrank(...\func_get_args()); } public function zscan($str_key, &$i_iterator, $str_pattern = null, $i_count = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->zscan($str_key, $i_iterator, ...\array_slice(\func_get_args(), 2)); } public function zscore($key, $member) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zscore(...\func_get_args()); + return $this->initializeLazyObject()->zscore(...\func_get_args()); } public function zunionstore($key, $keys, $weights = null, $aggregate = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zunionstore(...\func_get_args()); + return $this->initializeLazyObject()->zunionstore(...\func_get_args()); } } diff --git a/app/vendor/symfony/cache/Traits/RedisCluster6Proxy.php b/app/vendor/symfony/cache/Traits/RedisCluster6Proxy.php index c19aa1620..38dedf7ad 100644 --- a/app/vendor/symfony/cache/Traits/RedisCluster6Proxy.php +++ b/app/vendor/symfony/cache/Traits/RedisCluster6Proxy.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Cache\Traits; use Symfony\Component\VarExporter\LazyObjectInterface; -use Symfony\Component\VarExporter\LazyProxyTrait; use Symfony\Contracts\Service\ResetInterface; // Help opcache.preload discover always-needed symbols @@ -26,1114 +25,1112 @@ class_exists(\Symfony\Component\VarExporter\Internal\LazyObjectState::class); class RedisCluster6Proxy extends \RedisCluster implements ResetInterface, LazyObjectInterface { use RedisCluster6ProxyTrait; - use LazyProxyTrait { + use RedisProxyTrait { resetLazyObject as reset; } - private const LAZY_OBJECT_PROPERTY_SCOPES = []; - public function __construct($name, $seeds = null, $timeout = 0, $read_timeout = 0, $persistent = false, #[\SensitiveParameter] $auth = null, $context = null) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->__construct(...\func_get_args()); + $this->initializeLazyObject()->__construct(...\func_get_args()); } public function _compress($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_compress(...\func_get_args()); + return $this->initializeLazyObject()->_compress(...\func_get_args()); } public function _uncompress($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_uncompress(...\func_get_args()); + return $this->initializeLazyObject()->_uncompress(...\func_get_args()); } public function _serialize($value): bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_serialize(...\func_get_args()); + return $this->initializeLazyObject()->_serialize(...\func_get_args()); } public function _unserialize($value): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_unserialize(...\func_get_args()); + return $this->initializeLazyObject()->_unserialize(...\func_get_args()); } public function _pack($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_pack(...\func_get_args()); + return $this->initializeLazyObject()->_pack(...\func_get_args()); } public function _unpack($value): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_unpack(...\func_get_args()); + return $this->initializeLazyObject()->_unpack(...\func_get_args()); } public function _prefix($key): bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_prefix(...\func_get_args()); + return $this->initializeLazyObject()->_prefix(...\func_get_args()); } public function _masters(): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_masters(...\func_get_args()); + return $this->initializeLazyObject()->_masters(...\func_get_args()); } public function _redir(): ?string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_redir(...\func_get_args()); + return $this->initializeLazyObject()->_redir(...\func_get_args()); } public function acl($key_or_address, $subcmd, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->acl(...\func_get_args()); + return $this->initializeLazyObject()->acl(...\func_get_args()); } public function append($key, $value): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->append(...\func_get_args()); + return $this->initializeLazyObject()->append(...\func_get_args()); } public function bgrewriteaof($key_or_address): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgrewriteaof(...\func_get_args()); + return $this->initializeLazyObject()->bgrewriteaof(...\func_get_args()); } public function bgsave($key_or_address): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgsave(...\func_get_args()); + return $this->initializeLazyObject()->bgsave(...\func_get_args()); } public function bitcount($key, $start = 0, $end = -1, $bybit = false): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitcount(...\func_get_args()); + return $this->initializeLazyObject()->bitcount(...\func_get_args()); } public function bitop($operation, $deskey, $srckey, ...$otherkeys): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitop(...\func_get_args()); + return $this->initializeLazyObject()->bitop(...\func_get_args()); } public function bitpos($key, $bit, $start = 0, $end = -1, $bybit = false): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitpos(...\func_get_args()); + return $this->initializeLazyObject()->bitpos(...\func_get_args()); } public function blpop($key, $timeout_or_key, ...$extra_args): \RedisCluster|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blpop(...\func_get_args()); + return $this->initializeLazyObject()->blpop(...\func_get_args()); } public function brpop($key, $timeout_or_key, ...$extra_args): \RedisCluster|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->brpop(...\func_get_args()); + return $this->initializeLazyObject()->brpop(...\func_get_args()); } public function brpoplpush($srckey, $deskey, $timeout): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->brpoplpush(...\func_get_args()); + return $this->initializeLazyObject()->brpoplpush(...\func_get_args()); } public function lmove($src, $dst, $wherefrom, $whereto): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lmove(...\func_get_args()); + return $this->initializeLazyObject()->lmove(...\func_get_args()); } public function blmove($src, $dst, $wherefrom, $whereto, $timeout): \Redis|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blmove(...\func_get_args()); + return $this->initializeLazyObject()->blmove(...\func_get_args()); } public function bzpopmax($key, $timeout_or_key, ...$extra_args): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzpopmax(...\func_get_args()); + return $this->initializeLazyObject()->bzpopmax(...\func_get_args()); } public function bzpopmin($key, $timeout_or_key, ...$extra_args): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzpopmin(...\func_get_args()); + return $this->initializeLazyObject()->bzpopmin(...\func_get_args()); } public function bzmpop($timeout, $keys, $from, $count = 1): \RedisCluster|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzmpop(...\func_get_args()); + return $this->initializeLazyObject()->bzmpop(...\func_get_args()); } public function zmpop($keys, $from, $count = 1): \RedisCluster|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zmpop(...\func_get_args()); + return $this->initializeLazyObject()->zmpop(...\func_get_args()); } public function blmpop($timeout, $keys, $from, $count = 1): \RedisCluster|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blmpop(...\func_get_args()); + return $this->initializeLazyObject()->blmpop(...\func_get_args()); } public function lmpop($keys, $from, $count = 1): \RedisCluster|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lmpop(...\func_get_args()); + return $this->initializeLazyObject()->lmpop(...\func_get_args()); } public function clearlasterror(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->clearlasterror(...\func_get_args()); + return $this->initializeLazyObject()->clearlasterror(...\func_get_args()); } public function client($key_or_address, $subcommand, $arg = null): array|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->client(...\func_get_args()); + return $this->initializeLazyObject()->client(...\func_get_args()); } public function close(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->close(...\func_get_args()); + return $this->initializeLazyObject()->close(...\func_get_args()); } public function cluster($key_or_address, $command, ...$extra_args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->cluster(...\func_get_args()); + return $this->initializeLazyObject()->cluster(...\func_get_args()); } public function command(...$extra_args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->command(...\func_get_args()); + return $this->initializeLazyObject()->command(...\func_get_args()); } public function config($key_or_address, $subcommand, ...$extra_args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->config(...\func_get_args()); + return $this->initializeLazyObject()->config(...\func_get_args()); } public function dbsize($key_or_address): \RedisCluster|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dbsize(...\func_get_args()); + return $this->initializeLazyObject()->dbsize(...\func_get_args()); } public function copy($src, $dst, $options = null): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->copy(...\func_get_args()); + return $this->initializeLazyObject()->copy(...\func_get_args()); } public function decr($key, $by = 1): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decr(...\func_get_args()); + return $this->initializeLazyObject()->decr(...\func_get_args()); } public function decrby($key, $value): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decrby(...\func_get_args()); + return $this->initializeLazyObject()->decrby(...\func_get_args()); } public function decrbyfloat($key, $value): float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decrbyfloat(...\func_get_args()); + return $this->initializeLazyObject()->decrbyfloat(...\func_get_args()); } public function del($key, ...$other_keys): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->del(...\func_get_args()); + return $this->initializeLazyObject()->del(...\func_get_args()); } public function discard(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->discard(...\func_get_args()); + return $this->initializeLazyObject()->discard(...\func_get_args()); } public function dump($key): \RedisCluster|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dump(...\func_get_args()); + return $this->initializeLazyObject()->dump(...\func_get_args()); } public function echo($key_or_address, $msg): \RedisCluster|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->echo(...\func_get_args()); + return $this->initializeLazyObject()->echo(...\func_get_args()); } public function eval($script, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->eval(...\func_get_args()); + return $this->initializeLazyObject()->eval(...\func_get_args()); } public function eval_ro($script, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->eval_ro(...\func_get_args()); + return $this->initializeLazyObject()->eval_ro(...\func_get_args()); } public function evalsha($script_sha, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->evalsha(...\func_get_args()); + return $this->initializeLazyObject()->evalsha(...\func_get_args()); } public function evalsha_ro($script_sha, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->evalsha_ro(...\func_get_args()); + return $this->initializeLazyObject()->evalsha_ro(...\func_get_args()); } public function exec(): array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->exec(...\func_get_args()); + return $this->initializeLazyObject()->exec(...\func_get_args()); } public function exists($key, ...$other_keys): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->exists(...\func_get_args()); + return $this->initializeLazyObject()->exists(...\func_get_args()); } public function touch($key, ...$other_keys): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->touch(...\func_get_args()); + return $this->initializeLazyObject()->touch(...\func_get_args()); } public function expire($key, $timeout, $mode = null): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expire(...\func_get_args()); + return $this->initializeLazyObject()->expire(...\func_get_args()); } public function expireat($key, $timestamp, $mode = null): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expireat(...\func_get_args()); + return $this->initializeLazyObject()->expireat(...\func_get_args()); } public function expiretime($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expiretime(...\func_get_args()); + return $this->initializeLazyObject()->expiretime(...\func_get_args()); } public function pexpiretime($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpiretime(...\func_get_args()); + return $this->initializeLazyObject()->pexpiretime(...\func_get_args()); } public function flushall($key_or_address, $async = false): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushall(...\func_get_args()); + return $this->initializeLazyObject()->flushall(...\func_get_args()); } public function flushdb($key_or_address, $async = false): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushdb(...\func_get_args()); + return $this->initializeLazyObject()->flushdb(...\func_get_args()); } public function geoadd($key, $lng, $lat, $member, ...$other_triples_and_options): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geoadd(...\func_get_args()); + return $this->initializeLazyObject()->geoadd(...\func_get_args()); } public function geodist($key, $src, $dest, $unit = null): \RedisCluster|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geodist(...\func_get_args()); + return $this->initializeLazyObject()->geodist(...\func_get_args()); } public function geohash($key, $member, ...$other_members): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geohash(...\func_get_args()); + return $this->initializeLazyObject()->geohash(...\func_get_args()); } public function geopos($key, $member, ...$other_members): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geopos(...\func_get_args()); + return $this->initializeLazyObject()->geopos(...\func_get_args()); } public function georadius($key, $lng, $lat, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadius(...\func_get_args()); + return $this->initializeLazyObject()->georadius(...\func_get_args()); } public function georadius_ro($key, $lng, $lat, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadius_ro(...\func_get_args()); + return $this->initializeLazyObject()->georadius_ro(...\func_get_args()); } public function georadiusbymember($key, $member, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadiusbymember(...\func_get_args()); + return $this->initializeLazyObject()->georadiusbymember(...\func_get_args()); } public function georadiusbymember_ro($key, $member, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadiusbymember_ro(...\func_get_args()); + return $this->initializeLazyObject()->georadiusbymember_ro(...\func_get_args()); } public function geosearch($key, $position, $shape, $unit, $options = []): \RedisCluster|array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geosearch(...\func_get_args()); + return $this->initializeLazyObject()->geosearch(...\func_get_args()); } public function geosearchstore($dst, $src, $position, $shape, $unit, $options = []): \RedisCluster|array|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geosearchstore(...\func_get_args()); + return $this->initializeLazyObject()->geosearchstore(...\func_get_args()); } public function get($key): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->get(...\func_get_args()); + return $this->initializeLazyObject()->get(...\func_get_args()); } public function getbit($key, $value): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getbit(...\func_get_args()); + return $this->initializeLazyObject()->getbit(...\func_get_args()); } public function getlasterror(): ?string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getlasterror(...\func_get_args()); + return $this->initializeLazyObject()->getlasterror(...\func_get_args()); } public function getmode(): int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getmode(...\func_get_args()); + return $this->initializeLazyObject()->getmode(...\func_get_args()); } public function getoption($option): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getoption(...\func_get_args()); + return $this->initializeLazyObject()->getoption(...\func_get_args()); } public function getrange($key, $start, $end): \RedisCluster|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getrange(...\func_get_args()); + return $this->initializeLazyObject()->getrange(...\func_get_args()); } public function lcs($key1, $key2, $options = null): \RedisCluster|array|false|int|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lcs(...\func_get_args()); + return $this->initializeLazyObject()->lcs(...\func_get_args()); } public function getset($key, $value): \RedisCluster|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getset(...\func_get_args()); + return $this->initializeLazyObject()->getset(...\func_get_args()); } public function gettransferredbytes(): array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->gettransferredbytes(...\func_get_args()); + return $this->initializeLazyObject()->gettransferredbytes(...\func_get_args()); } public function cleartransferredbytes(): void { - ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->cleartransferredbytes(...\func_get_args()); + $this->initializeLazyObject()->cleartransferredbytes(...\func_get_args()); } public function hdel($key, $member, ...$other_members): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hdel(...\func_get_args()); + return $this->initializeLazyObject()->hdel(...\func_get_args()); } public function hexists($key, $member): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hexists(...\func_get_args()); + return $this->initializeLazyObject()->hexists(...\func_get_args()); } public function hget($key, $member): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hget(...\func_get_args()); + return $this->initializeLazyObject()->hget(...\func_get_args()); } public function hgetall($key): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hgetall(...\func_get_args()); + return $this->initializeLazyObject()->hgetall(...\func_get_args()); } public function hincrby($key, $member, $value): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hincrby(...\func_get_args()); + return $this->initializeLazyObject()->hincrby(...\func_get_args()); } public function hincrbyfloat($key, $member, $value): \RedisCluster|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hincrbyfloat(...\func_get_args()); + return $this->initializeLazyObject()->hincrbyfloat(...\func_get_args()); } public function hkeys($key): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hkeys(...\func_get_args()); + return $this->initializeLazyObject()->hkeys(...\func_get_args()); } public function hlen($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hlen(...\func_get_args()); + return $this->initializeLazyObject()->hlen(...\func_get_args()); } public function hmget($key, $keys): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hmget(...\func_get_args()); + return $this->initializeLazyObject()->hmget(...\func_get_args()); } public function hmset($key, $key_values): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hmset(...\func_get_args()); + return $this->initializeLazyObject()->hmset(...\func_get_args()); } public function hscan($key, &$iterator, $pattern = null, $count = 0): array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->hscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); } public function hrandfield($key, $options = null): \RedisCluster|array|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hrandfield(...\func_get_args()); + return $this->initializeLazyObject()->hrandfield(...\func_get_args()); } public function hset($key, $member, $value): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hset(...\func_get_args()); + return $this->initializeLazyObject()->hset(...\func_get_args()); } public function hsetnx($key, $member, $value): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hsetnx(...\func_get_args()); + return $this->initializeLazyObject()->hsetnx(...\func_get_args()); } public function hstrlen($key, $field): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hstrlen(...\func_get_args()); + return $this->initializeLazyObject()->hstrlen(...\func_get_args()); } public function hvals($key): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hvals(...\func_get_args()); + return $this->initializeLazyObject()->hvals(...\func_get_args()); } public function incr($key, $by = 1): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incr(...\func_get_args()); + return $this->initializeLazyObject()->incr(...\func_get_args()); } public function incrby($key, $value): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incrby(...\func_get_args()); + return $this->initializeLazyObject()->incrby(...\func_get_args()); } public function incrbyfloat($key, $value): \RedisCluster|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incrbyfloat(...\func_get_args()); + return $this->initializeLazyObject()->incrbyfloat(...\func_get_args()); } public function info($key_or_address, ...$sections): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->info(...\func_get_args()); + return $this->initializeLazyObject()->info(...\func_get_args()); } public function keys($pattern): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->keys(...\func_get_args()); + return $this->initializeLazyObject()->keys(...\func_get_args()); } public function lastsave($key_or_address): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lastsave(...\func_get_args()); + return $this->initializeLazyObject()->lastsave(...\func_get_args()); } public function lget($key, $index): \RedisCluster|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lget(...\func_get_args()); + return $this->initializeLazyObject()->lget(...\func_get_args()); } public function lindex($key, $index): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lindex(...\func_get_args()); + return $this->initializeLazyObject()->lindex(...\func_get_args()); } public function linsert($key, $pos, $pivot, $value): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->linsert(...\func_get_args()); + return $this->initializeLazyObject()->linsert(...\func_get_args()); } public function llen($key): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->llen(...\func_get_args()); + return $this->initializeLazyObject()->llen(...\func_get_args()); } public function lpop($key, $count = 0): \RedisCluster|array|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpop(...\func_get_args()); + return $this->initializeLazyObject()->lpop(...\func_get_args()); } public function lpos($key, $value, $options = null): \Redis|array|bool|int|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpos(...\func_get_args()); + return $this->initializeLazyObject()->lpos(...\func_get_args()); } public function lpush($key, $value, ...$other_values): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpush(...\func_get_args()); + return $this->initializeLazyObject()->lpush(...\func_get_args()); } public function lpushx($key, $value): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpushx(...\func_get_args()); + return $this->initializeLazyObject()->lpushx(...\func_get_args()); } public function lrange($key, $start, $end): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lrange(...\func_get_args()); + return $this->initializeLazyObject()->lrange(...\func_get_args()); } public function lrem($key, $value, $count = 0): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lrem(...\func_get_args()); + return $this->initializeLazyObject()->lrem(...\func_get_args()); } public function lset($key, $index, $value): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lset(...\func_get_args()); + return $this->initializeLazyObject()->lset(...\func_get_args()); } public function ltrim($key, $start, $end): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ltrim(...\func_get_args()); + return $this->initializeLazyObject()->ltrim(...\func_get_args()); } public function mget($keys): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mget(...\func_get_args()); + return $this->initializeLazyObject()->mget(...\func_get_args()); } public function mset($key_values): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mset(...\func_get_args()); + return $this->initializeLazyObject()->mset(...\func_get_args()); } public function msetnx($key_values): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->msetnx(...\func_get_args()); + return $this->initializeLazyObject()->msetnx(...\func_get_args()); } public function multi($value = \Redis::MULTI): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->multi(...\func_get_args()); + return $this->initializeLazyObject()->multi(...\func_get_args()); } public function object($subcommand, $key): \RedisCluster|false|int|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->object(...\func_get_args()); + return $this->initializeLazyObject()->object(...\func_get_args()); } public function persist($key): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->persist(...\func_get_args()); + return $this->initializeLazyObject()->persist(...\func_get_args()); } public function pexpire($key, $timeout, $mode = null): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpire(...\func_get_args()); + return $this->initializeLazyObject()->pexpire(...\func_get_args()); } public function pexpireat($key, $timestamp, $mode = null): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpireat(...\func_get_args()); + return $this->initializeLazyObject()->pexpireat(...\func_get_args()); } public function pfadd($key, $elements): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfadd(...\func_get_args()); + return $this->initializeLazyObject()->pfadd(...\func_get_args()); } public function pfcount($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfcount(...\func_get_args()); + return $this->initializeLazyObject()->pfcount(...\func_get_args()); } public function pfmerge($key, $keys): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfmerge(...\func_get_args()); + return $this->initializeLazyObject()->pfmerge(...\func_get_args()); } public function ping($key_or_address, $message = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ping(...\func_get_args()); + return $this->initializeLazyObject()->ping(...\func_get_args()); } public function psetex($key, $timeout, $value): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->psetex(...\func_get_args()); + return $this->initializeLazyObject()->psetex(...\func_get_args()); } public function psubscribe($patterns, $callback): void { - ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->psubscribe(...\func_get_args()); + $this->initializeLazyObject()->psubscribe(...\func_get_args()); } public function pttl($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pttl(...\func_get_args()); + return $this->initializeLazyObject()->pttl(...\func_get_args()); } public function pubsub($key_or_address, ...$values): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pubsub(...\func_get_args()); + return $this->initializeLazyObject()->pubsub(...\func_get_args()); } public function punsubscribe($pattern, ...$other_patterns): array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->punsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->punsubscribe(...\func_get_args()); } public function randomkey($key_or_address): \RedisCluster|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->randomkey(...\func_get_args()); + return $this->initializeLazyObject()->randomkey(...\func_get_args()); } public function rawcommand($key_or_address, $command, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rawcommand(...\func_get_args()); + return $this->initializeLazyObject()->rawcommand(...\func_get_args()); } public function rename($key_src, $key_dst): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rename(...\func_get_args()); + return $this->initializeLazyObject()->rename(...\func_get_args()); } public function renamenx($key, $newkey): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->renamenx(...\func_get_args()); + return $this->initializeLazyObject()->renamenx(...\func_get_args()); } public function restore($key, $timeout, $value, $options = null): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->restore(...\func_get_args()); + return $this->initializeLazyObject()->restore(...\func_get_args()); } public function role($key_or_address): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->role(...\func_get_args()); + return $this->initializeLazyObject()->role(...\func_get_args()); } public function rpop($key, $count = 0): \RedisCluster|array|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpop(...\func_get_args()); + return $this->initializeLazyObject()->rpop(...\func_get_args()); } public function rpoplpush($src, $dst): \RedisCluster|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpoplpush(...\func_get_args()); + return $this->initializeLazyObject()->rpoplpush(...\func_get_args()); } public function rpush($key, ...$elements): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpush(...\func_get_args()); + return $this->initializeLazyObject()->rpush(...\func_get_args()); } public function rpushx($key, $value): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpushx(...\func_get_args()); + return $this->initializeLazyObject()->rpushx(...\func_get_args()); } public function sadd($key, $value, ...$other_values): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sadd(...\func_get_args()); + return $this->initializeLazyObject()->sadd(...\func_get_args()); } public function saddarray($key, $values): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->saddarray(...\func_get_args()); + return $this->initializeLazyObject()->saddarray(...\func_get_args()); } public function save($key_or_address): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->save(...\func_get_args()); + return $this->initializeLazyObject()->save(...\func_get_args()); } public function scan(&$iterator, $key_or_address, $pattern = null, $count = 0): array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->scan($iterator, ...\array_slice(\func_get_args(), 1)); + return $this->initializeLazyObject()->scan($iterator, ...\array_slice(\func_get_args(), 1)); } public function scard($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->scard(...\func_get_args()); + return $this->initializeLazyObject()->scard(...\func_get_args()); } public function script($key_or_address, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->script(...\func_get_args()); + return $this->initializeLazyObject()->script(...\func_get_args()); } public function sdiff($key, ...$other_keys): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sdiff(...\func_get_args()); + return $this->initializeLazyObject()->sdiff(...\func_get_args()); } public function sdiffstore($dst, $key, ...$other_keys): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sdiffstore(...\func_get_args()); + return $this->initializeLazyObject()->sdiffstore(...\func_get_args()); } public function set($key, $value, $options = null): \RedisCluster|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->set(...\func_get_args()); + return $this->initializeLazyObject()->set(...\func_get_args()); } public function setbit($key, $offset, $onoff): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setbit(...\func_get_args()); + return $this->initializeLazyObject()->setbit(...\func_get_args()); } public function setex($key, $expire, $value): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setex(...\func_get_args()); + return $this->initializeLazyObject()->setex(...\func_get_args()); } public function setnx($key, $value): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setnx(...\func_get_args()); + return $this->initializeLazyObject()->setnx(...\func_get_args()); } public function setoption($option, $value): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setoption(...\func_get_args()); + return $this->initializeLazyObject()->setoption(...\func_get_args()); } public function setrange($key, $offset, $value): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setrange(...\func_get_args()); + return $this->initializeLazyObject()->setrange(...\func_get_args()); } public function sinter($key, ...$other_keys): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sinter(...\func_get_args()); + return $this->initializeLazyObject()->sinter(...\func_get_args()); } public function sintercard($keys, $limit = -1): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sintercard(...\func_get_args()); + return $this->initializeLazyObject()->sintercard(...\func_get_args()); } public function sinterstore($key, ...$other_keys): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sinterstore(...\func_get_args()); + return $this->initializeLazyObject()->sinterstore(...\func_get_args()); } public function sismember($key, $value): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sismember(...\func_get_args()); + return $this->initializeLazyObject()->sismember(...\func_get_args()); } public function smismember($key, $member, ...$other_members): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->smismember(...\func_get_args()); + return $this->initializeLazyObject()->smismember(...\func_get_args()); } public function slowlog($key_or_address, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->slowlog(...\func_get_args()); + return $this->initializeLazyObject()->slowlog(...\func_get_args()); } public function smembers($key): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->smembers(...\func_get_args()); + return $this->initializeLazyObject()->smembers(...\func_get_args()); } public function smove($src, $dst, $member): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->smove(...\func_get_args()); + return $this->initializeLazyObject()->smove(...\func_get_args()); } public function sort($key, $options = null): \RedisCluster|array|bool|int|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sort(...\func_get_args()); + return $this->initializeLazyObject()->sort(...\func_get_args()); } public function sort_ro($key, $options = null): \RedisCluster|array|bool|int|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sort_ro(...\func_get_args()); + return $this->initializeLazyObject()->sort_ro(...\func_get_args()); } public function spop($key, $count = 0): \RedisCluster|array|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->spop(...\func_get_args()); + return $this->initializeLazyObject()->spop(...\func_get_args()); } public function srandmember($key, $count = 0): \RedisCluster|array|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->srandmember(...\func_get_args()); + return $this->initializeLazyObject()->srandmember(...\func_get_args()); } public function srem($key, $value, ...$other_values): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->srem(...\func_get_args()); + return $this->initializeLazyObject()->srem(...\func_get_args()); } public function sscan($key, &$iterator, $pattern = null, $count = 0): array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->sscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); } public function strlen($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->strlen(...\func_get_args()); + return $this->initializeLazyObject()->strlen(...\func_get_args()); } public function subscribe($channels, $cb): void { - ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->subscribe(...\func_get_args()); + $this->initializeLazyObject()->subscribe(...\func_get_args()); } public function sunion($key, ...$other_keys): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sunion(...\func_get_args()); + return $this->initializeLazyObject()->sunion(...\func_get_args()); } public function sunionstore($dst, $key, ...$other_keys): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sunionstore(...\func_get_args()); + return $this->initializeLazyObject()->sunionstore(...\func_get_args()); } public function time($key_or_address): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->time(...\func_get_args()); + return $this->initializeLazyObject()->time(...\func_get_args()); } public function ttl($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ttl(...\func_get_args()); + return $this->initializeLazyObject()->ttl(...\func_get_args()); } public function type($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->type(...\func_get_args()); + return $this->initializeLazyObject()->type(...\func_get_args()); } public function unsubscribe($channels): array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->unsubscribe(...\func_get_args()); } public function unlink($key, ...$other_keys): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unlink(...\func_get_args()); + return $this->initializeLazyObject()->unlink(...\func_get_args()); } public function unwatch(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unwatch(...\func_get_args()); + return $this->initializeLazyObject()->unwatch(...\func_get_args()); } public function watch($key, ...$other_keys): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->watch(...\func_get_args()); + return $this->initializeLazyObject()->watch(...\func_get_args()); } public function xack($key, $group, $ids): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xack(...\func_get_args()); + return $this->initializeLazyObject()->xack(...\func_get_args()); } public function xadd($key, $id, $values, $maxlen = 0, $approx = false): \RedisCluster|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xadd(...\func_get_args()); + return $this->initializeLazyObject()->xadd(...\func_get_args()); } public function xclaim($key, $group, $consumer, $min_iddle, $ids, $options): \RedisCluster|array|false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xclaim(...\func_get_args()); + return $this->initializeLazyObject()->xclaim(...\func_get_args()); } public function xdel($key, $ids): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xdel(...\func_get_args()); + return $this->initializeLazyObject()->xdel(...\func_get_args()); } public function xgroup($operation, $key = null, $group = null, $id_or_consumer = null, $mkstream = false, $entries_read = -2): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xgroup(...\func_get_args()); + return $this->initializeLazyObject()->xgroup(...\func_get_args()); } public function xautoclaim($key, $group, $consumer, $min_idle, $start, $count = -1, $justid = false): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xautoclaim(...\func_get_args()); + return $this->initializeLazyObject()->xautoclaim(...\func_get_args()); } public function xinfo($operation, $arg1 = null, $arg2 = null, $count = -1): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xinfo(...\func_get_args()); + return $this->initializeLazyObject()->xinfo(...\func_get_args()); } public function xlen($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xlen(...\func_get_args()); + return $this->initializeLazyObject()->xlen(...\func_get_args()); } public function xpending($key, $group, $start = null, $end = null, $count = -1, $consumer = null): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xpending(...\func_get_args()); + return $this->initializeLazyObject()->xpending(...\func_get_args()); } public function xrange($key, $start, $end, $count = -1): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xrange(...\func_get_args()); + return $this->initializeLazyObject()->xrange(...\func_get_args()); } public function xread($streams, $count = -1, $block = -1): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xread(...\func_get_args()); + return $this->initializeLazyObject()->xread(...\func_get_args()); } public function xreadgroup($group, $consumer, $streams, $count = 1, $block = 1): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xreadgroup(...\func_get_args()); + return $this->initializeLazyObject()->xreadgroup(...\func_get_args()); } public function xrevrange($key, $start, $end, $count = -1): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xrevrange(...\func_get_args()); + return $this->initializeLazyObject()->xrevrange(...\func_get_args()); } public function xtrim($key, $maxlen, $approx = false, $minid = false, $limit = -1): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xtrim(...\func_get_args()); + return $this->initializeLazyObject()->xtrim(...\func_get_args()); } public function zadd($key, $score_or_options, ...$more_scores_and_mems): \RedisCluster|false|float|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zadd(...\func_get_args()); + return $this->initializeLazyObject()->zadd(...\func_get_args()); } public function zcard($key): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zcard(...\func_get_args()); + return $this->initializeLazyObject()->zcard(...\func_get_args()); } public function zcount($key, $start, $end): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zcount(...\func_get_args()); + return $this->initializeLazyObject()->zcount(...\func_get_args()); } public function zincrby($key, $value, $member): \RedisCluster|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zincrby(...\func_get_args()); + return $this->initializeLazyObject()->zincrby(...\func_get_args()); } public function zinterstore($dst, $keys, $weights = null, $aggregate = null): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zinterstore(...\func_get_args()); + return $this->initializeLazyObject()->zinterstore(...\func_get_args()); } public function zintercard($keys, $limit = -1): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zintercard(...\func_get_args()); + return $this->initializeLazyObject()->zintercard(...\func_get_args()); } public function zlexcount($key, $min, $max): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zlexcount(...\func_get_args()); + return $this->initializeLazyObject()->zlexcount(...\func_get_args()); } public function zpopmax($key, $value = null): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zpopmax(...\func_get_args()); + return $this->initializeLazyObject()->zpopmax(...\func_get_args()); } public function zpopmin($key, $value = null): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zpopmin(...\func_get_args()); + return $this->initializeLazyObject()->zpopmin(...\func_get_args()); } public function zrange($key, $start, $end, $options = null): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrange(...\func_get_args()); + return $this->initializeLazyObject()->zrange(...\func_get_args()); } public function zrangestore($dstkey, $srckey, $start, $end, $options = null): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrangestore(...\func_get_args()); + return $this->initializeLazyObject()->zrangestore(...\func_get_args()); } public function zrandmember($key, $options = null): \RedisCluster|array|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrandmember(...\func_get_args()); + return $this->initializeLazyObject()->zrandmember(...\func_get_args()); } public function zrangebylex($key, $min, $max, $offset = -1, $count = -1): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrangebylex(...\func_get_args()); + return $this->initializeLazyObject()->zrangebylex(...\func_get_args()); } public function zrangebyscore($key, $start, $end, $options = []): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrangebyscore(...\func_get_args()); + return $this->initializeLazyObject()->zrangebyscore(...\func_get_args()); } public function zrank($key, $member): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrank(...\func_get_args()); + return $this->initializeLazyObject()->zrank(...\func_get_args()); } public function zrem($key, $value, ...$other_values): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrem(...\func_get_args()); + return $this->initializeLazyObject()->zrem(...\func_get_args()); } public function zremrangebylex($key, $min, $max): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zremrangebylex(...\func_get_args()); + return $this->initializeLazyObject()->zremrangebylex(...\func_get_args()); } public function zremrangebyrank($key, $min, $max): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zremrangebyrank(...\func_get_args()); + return $this->initializeLazyObject()->zremrangebyrank(...\func_get_args()); } public function zremrangebyscore($key, $min, $max): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zremrangebyscore(...\func_get_args()); + return $this->initializeLazyObject()->zremrangebyscore(...\func_get_args()); } public function zrevrange($key, $min, $max, $options = null): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrange(...\func_get_args()); + return $this->initializeLazyObject()->zrevrange(...\func_get_args()); } public function zrevrangebylex($key, $min, $max, $options = null): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrangebylex(...\func_get_args()); + return $this->initializeLazyObject()->zrevrangebylex(...\func_get_args()); } public function zrevrangebyscore($key, $min, $max, $options = null): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrangebyscore(...\func_get_args()); + return $this->initializeLazyObject()->zrevrangebyscore(...\func_get_args()); } public function zrevrank($key, $member): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrank(...\func_get_args()); + return $this->initializeLazyObject()->zrevrank(...\func_get_args()); } public function zscan($key, &$iterator, $pattern = null, $count = 0): \RedisCluster|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->zscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); } public function zscore($key, $member): \RedisCluster|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zscore(...\func_get_args()); + return $this->initializeLazyObject()->zscore(...\func_get_args()); } public function zmscore($key, $member, ...$other_members): \Redis|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zmscore(...\func_get_args()); + return $this->initializeLazyObject()->zmscore(...\func_get_args()); } public function zunionstore($dst, $keys, $weights = null, $aggregate = null): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zunionstore(...\func_get_args()); + return $this->initializeLazyObject()->zunionstore(...\func_get_args()); } public function zinter($keys, $weights = null, $options = null): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zinter(...\func_get_args()); + return $this->initializeLazyObject()->zinter(...\func_get_args()); } public function zdiffstore($dst, $keys): \RedisCluster|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zdiffstore(...\func_get_args()); + return $this->initializeLazyObject()->zdiffstore(...\func_get_args()); } public function zunion($keys, $weights = null, $options = null): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zunion(...\func_get_args()); + return $this->initializeLazyObject()->zunion(...\func_get_args()); } public function zdiff($keys, $options = null): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zdiff(...\func_get_args()); + return $this->initializeLazyObject()->zdiff(...\func_get_args()); } } diff --git a/app/vendor/symfony/cache/Traits/RedisCluster6ProxyTrait.php b/app/vendor/symfony/cache/Traits/RedisCluster6ProxyTrait.php index 9c3169e32..5033c0131 100644 --- a/app/vendor/symfony/cache/Traits/RedisCluster6ProxyTrait.php +++ b/app/vendor/symfony/cache/Traits/RedisCluster6ProxyTrait.php @@ -19,17 +19,17 @@ trait RedisCluster6ProxyTrait { public function getex($key, $options = []): \RedisCluster|string|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getex(...\func_get_args()); + return $this->initializeLazyObject()->getex(...\func_get_args()); } public function publish($channel, $message): \RedisCluster|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->publish(...\func_get_args()); + return $this->initializeLazyObject()->publish(...\func_get_args()); } public function waitaof($key_or_address, $numlocal, $numreplicas, $timeout): \RedisCluster|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->waitaof(...\func_get_args()); + return $this->initializeLazyObject()->waitaof(...\func_get_args()); } } } else { @@ -40,7 +40,7 @@ trait RedisCluster6ProxyTrait { public function publish($channel, $message): \RedisCluster|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->publish(...\func_get_args()); + return $this->initializeLazyObject()->publish(...\func_get_args()); } } } diff --git a/app/vendor/symfony/cache/Traits/RedisProxyTrait.php b/app/vendor/symfony/cache/Traits/RedisProxyTrait.php new file mode 100644 index 000000000..1acbdf19c --- /dev/null +++ b/app/vendor/symfony/cache/Traits/RedisProxyTrait.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Traits; + +/** + * @internal + */ +trait RedisProxyTrait +{ + private \Closure $initializer; + private ?parent $realInstance = null; + + public static function createLazyProxy(\Closure $initializer, ?self $instance = null): static + { + $instance ??= (new \ReflectionClass(static::class))->newInstanceWithoutConstructor(); + $instance->realInstance = null; + $instance->initializer = $initializer; + + return $instance; + } + + public function isLazyObjectInitialized(bool $partial = false): bool + { + return isset($this->realInstance); + } + + public function initializeLazyObject(): object + { + return $this->realInstance ??= ($this->initializer)(); + } + + public function resetLazyObject(): bool + { + $this->realInstance = null; + + return true; + } + + public function __destruct() + { + } +} diff --git a/app/vendor/symfony/cache/Traits/RedisTrait.php b/app/vendor/symfony/cache/Traits/RedisTrait.php index bcd8a8cd6..87c689209 100644 --- a/app/vendor/symfony/cache/Traits/RedisTrait.php +++ b/app/vendor/symfony/cache/Traits/RedisTrait.php @@ -57,7 +57,7 @@ private function init(\Redis|Relay|\RedisArray|\RedisCluster|\Predis\ClientInter parent::__construct($namespace, $defaultLifetime); if (preg_match('#[^-+_.A-Za-z0-9]#', $namespace, $match)) { - throw new InvalidArgumentException(sprintf('RedisAdapter namespace contains "%s" but only characters in [-+_.A-Za-z0-9] are allowed.', $match[0])); + throw new InvalidArgumentException(\sprintf('RedisAdapter namespace contains "%s" but only characters in [-+_.A-Za-z0-9] are allowed.', $match[0])); } if ($redis instanceof \Predis\ClientInterface && $redis->getOptions()->exceptions) { @@ -199,14 +199,14 @@ public static function createConnection(#[\SensitiveParameter] string $dsn, arra \extension_loaded('relay') => Relay::class, default => \Predis\Client::class, }, - 1 < \count($hosts) && \extension_loaded('redis') => 1 < \count($hosts) ? \RedisArray::class : \Redis::class, + 1 < \count($hosts) && \extension_loaded('redis') => \RedisArray::class, \extension_loaded('redis') => \Redis::class, \extension_loaded('relay') => Relay::class, default => \Predis\Client::class, }; if (isset($params['redis_sentinel']) && !is_a($class, \Predis\Client::class, true) && !class_exists(\RedisSentinel::class) && !class_exists(Sentinel::class)) { - throw new CacheException(sprintf('Cannot use Redis Sentinel: class "%s" does not extend "Predis\Client" and neither ext-redis >= 5.2 nor ext-relay have been found.', $class)); + throw new CacheException(\sprintf('Cannot use Redis Sentinel: class "%s" does not extend "Predis\Client" and neither ext-redis >= 5.2 nor ext-relay have been found.', $class)); } $isRedisExt = is_a($class, \Redis::class, true); @@ -263,7 +263,7 @@ public static function createConnection(#[\SensitiveParameter] string $dsn, arra } while (++$hostIndex < \count($hosts) && !$address); if (isset($params['redis_sentinel']) && !$address) { - throw new InvalidArgumentException(sprintf('Failed to retrieve master information from sentinel "%s".', $params['redis_sentinel']), previous: $redisException ?? null); + throw new InvalidArgumentException(\sprintf('Failed to retrieve master information from sentinel "%s".', $params['redis_sentinel']), previous: $redisException ?? null); } try { @@ -298,7 +298,7 @@ public static function createConnection(#[\SensitiveParameter] string $dsn, arra restore_error_handler(); } if (!$isConnected) { - $error = preg_match('/^Redis::p?connect\(\): (.*)/', $error ?? $redis->getLastError() ?? '', $error) ? sprintf(' (%s)', $error[1]) : ''; + $error = preg_match('/^Redis::p?connect\(\): (.*)/', $error ?? $redis->getLastError() ?? '', $error) ? \sprintf(' (%s)', $error[1]) : ''; throw new InvalidArgumentException('Redis connection failed: '.$error.'.'); } @@ -423,9 +423,9 @@ public static function createConnection(#[\SensitiveParameter] string $dsn, arra $redis->getConnection()->setSentinelTimeout($params['timeout']); } } elseif (class_exists($class, false)) { - throw new InvalidArgumentException(sprintf('"%s" is not a subclass of "Redis", "RedisArray", "RedisCluster", "Relay\Relay" nor "Predis\ClientInterface".', $class)); + throw new InvalidArgumentException(\sprintf('"%s" is not a subclass of "Redis", "RedisArray", "RedisCluster", "Relay\Relay" nor "Predis\ClientInterface".', $class)); } else { - throw new InvalidArgumentException(sprintf('Class "%s" does not exist.', $class)); + throw new InvalidArgumentException(\sprintf('Class "%s" does not exist.', $class)); } return $redis; @@ -614,7 +614,7 @@ private function pipeline(\Closure $generator, ?object $redis = null): \Generato } }); } elseif ($redis instanceof \RedisArray) { - $connections = $results = $ids = []; + $connections = $results = []; foreach ($generator() as $command => $args) { $id = 'eval' === $command ? $args[1][0] : $args[0]; if (!isset($connections[$h = $redis->_target($id)])) { diff --git a/app/vendor/symfony/cache/Traits/Relay/CopyTrait.php b/app/vendor/symfony/cache/Traits/Relay/CopyTrait.php new file mode 100644 index 000000000..84d52f44c --- /dev/null +++ b/app/vendor/symfony/cache/Traits/Relay/CopyTrait.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Traits\Relay; + +if (version_compare(phpversion('relay'), '0.8.1', '>=')) { + /** + * @internal + */ + trait CopyTrait + { + public function copy($src, $dst, $options = null): \Relay\Relay|bool + { + return $this->initializeLazyObject()->copy(...\func_get_args()); + } + } +} else { + /** + * @internal + */ + trait CopyTrait + { + public function copy($src, $dst, $options = null): \Relay\Relay|false|int + { + return $this->initializeLazyObject()->copy(...\func_get_args()); + } + } +} diff --git a/app/vendor/symfony/cache/Traits/Relay/GeosearchTrait.php b/app/vendor/symfony/cache/Traits/Relay/GeosearchTrait.php new file mode 100644 index 000000000..a358f80b7 --- /dev/null +++ b/app/vendor/symfony/cache/Traits/Relay/GeosearchTrait.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Traits\Relay; + +if (version_compare(phpversion('relay'), '0.9.0', '>=')) { + /** + * @internal + */ + trait GeosearchTrait + { + public function geosearch($key, $position, $shape, $unit, $options = []): \Relay\Relay|array|false + { + return $this->initializeLazyObject()->geosearch(...\func_get_args()); + } + } +} else { + /** + * @internal + */ + trait GeosearchTrait + { + public function geosearch($key, $position, $shape, $unit, $options = []): \Relay\Relay|array + { + return $this->initializeLazyObject()->geosearch(...\func_get_args()); + } + } +} diff --git a/app/vendor/symfony/cache/Traits/Relay/GetrangeTrait.php b/app/vendor/symfony/cache/Traits/Relay/GetrangeTrait.php new file mode 100644 index 000000000..f26333e9f --- /dev/null +++ b/app/vendor/symfony/cache/Traits/Relay/GetrangeTrait.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Traits\Relay; + +if (version_compare(phpversion('relay'), '0.9.0', '>=')) { + /** + * @internal + */ + trait GetrangeTrait + { + public function getrange($key, $start, $end): mixed + { + return $this->initializeLazyObject()->getrange(...\func_get_args()); + } + } +} else { + /** + * @internal + */ + trait GetrangeTrait + { + public function getrange($key, $start, $end): \Relay\Relay|false|string + { + return $this->initializeLazyObject()->getrange(...\func_get_args()); + } + } +} diff --git a/app/vendor/symfony/cache/Traits/Relay/HsetTrait.php b/app/vendor/symfony/cache/Traits/Relay/HsetTrait.php new file mode 100644 index 000000000..833424460 --- /dev/null +++ b/app/vendor/symfony/cache/Traits/Relay/HsetTrait.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Traits\Relay; + +if (version_compare(phpversion('relay'), '0.9.0', '>=')) { + /** + * @internal + */ + trait HsetTrait + { + public function hset($key, ...$keys_and_vals): \Relay\Relay|false|int + { + return $this->initializeLazyObject()->hset(...\func_get_args()); + } + } +} else { + /** + * @internal + */ + trait HsetTrait + { + public function hset($key, $mem, $val, ...$kvals): \Relay\Relay|false|int + { + return $this->initializeLazyObject()->hset(...\func_get_args()); + } + } +} diff --git a/app/vendor/symfony/cache/Traits/Relay/MoveTrait.php b/app/vendor/symfony/cache/Traits/Relay/MoveTrait.php new file mode 100644 index 000000000..18086f61d --- /dev/null +++ b/app/vendor/symfony/cache/Traits/Relay/MoveTrait.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Traits\Relay; + +if (version_compare(phpversion('relay'), '0.9.0', '>=')) { + /** + * @internal + */ + trait MoveTrait + { + public function blmove($srckey, $dstkey, $srcpos, $dstpos, $timeout): mixed + { + return $this->initializeLazyObject()->blmove(...\func_get_args()); + } + + public function lmove($srckey, $dstkey, $srcpos, $dstpos): mixed + { + return $this->initializeLazyObject()->lmove(...\func_get_args()); + } + } +} else { + /** + * @internal + */ + trait MoveTrait + { + public function blmove($srckey, $dstkey, $srcpos, $dstpos, $timeout): \Relay\Relay|false|string|null + { + return $this->initializeLazyObject()->blmove(...\func_get_args()); + } + + public function lmove($srckey, $dstkey, $srcpos, $dstpos): \Relay\Relay|false|string|null + { + return $this->initializeLazyObject()->lmove(...\func_get_args()); + } + } +} diff --git a/app/vendor/symfony/cache/Traits/Relay/NullableReturnTrait.php b/app/vendor/symfony/cache/Traits/Relay/NullableReturnTrait.php new file mode 100644 index 000000000..661ec4760 --- /dev/null +++ b/app/vendor/symfony/cache/Traits/Relay/NullableReturnTrait.php @@ -0,0 +1,96 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Traits\Relay; + +if (version_compare(phpversion('relay'), '0.9.0', '>=')) { + /** + * @internal + */ + trait NullableReturnTrait + { + public function dump($key): \Relay\Relay|false|string|null + { + return $this->initializeLazyObject()->dump(...\func_get_args()); + } + + public function geodist($key, $src, $dst, $unit = null): \Relay\Relay|false|float|null + { + return $this->initializeLazyObject()->geodist(...\func_get_args()); + } + + public function hrandfield($hash, $options = null): \Relay\Relay|array|false|string|null + { + return $this->initializeLazyObject()->hrandfield(...\func_get_args()); + } + + public function xadd($key, $id, $values, $maxlen = 0, $approx = false, $nomkstream = false): \Relay\Relay|false|string|null + { + return $this->initializeLazyObject()->xadd(...\func_get_args()); + } + + public function zrank($key, $rank, $withscore = false): \Relay\Relay|array|false|int|null + { + return $this->initializeLazyObject()->zrank(...\func_get_args()); + } + + public function zrevrank($key, $rank, $withscore = false): \Relay\Relay|array|false|int|null + { + return $this->initializeLazyObject()->zrevrank(...\func_get_args()); + } + + public function zscore($key, $member): \Relay\Relay|false|float|null + { + return $this->initializeLazyObject()->zscore(...\func_get_args()); + } + } +} else { + /** + * @internal + */ + trait NullableReturnTrait + { + public function dump($key): \Relay\Relay|false|string + { + return $this->initializeLazyObject()->dump(...\func_get_args()); + } + + public function geodist($key, $src, $dst, $unit = null): \Relay\Relay|false|float + { + return $this->initializeLazyObject()->geodist(...\func_get_args()); + } + + public function hrandfield($hash, $options = null): \Relay\Relay|array|false|string + { + return $this->initializeLazyObject()->hrandfield(...\func_get_args()); + } + + public function xadd($key, $id, $values, $maxlen = 0, $approx = false, $nomkstream = false): \Relay\Relay|false|string + { + return $this->initializeLazyObject()->xadd(...\func_get_args()); + } + + public function zrank($key, $rank, $withscore = false): \Relay\Relay|array|false|int + { + return $this->initializeLazyObject()->zrank(...\func_get_args()); + } + + public function zrevrank($key, $rank, $withscore = false): \Relay\Relay|array|false|int + { + return $this->initializeLazyObject()->zrevrank(...\func_get_args()); + } + + public function zscore($key, $member): \Relay\Relay|false|float + { + return $this->initializeLazyObject()->zscore(...\func_get_args()); + } + } +} diff --git a/app/vendor/symfony/cache/Traits/Relay/PfcountTrait.php b/app/vendor/symfony/cache/Traits/Relay/PfcountTrait.php new file mode 100644 index 000000000..84e5c5977 --- /dev/null +++ b/app/vendor/symfony/cache/Traits/Relay/PfcountTrait.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Traits\Relay; + +if (version_compare(phpversion('relay'), '0.9.0', '>=')) { + /** + * @internal + */ + trait PfcountTrait + { + public function pfcount($key_or_keys): \Relay\Relay|false|int + { + return $this->initializeLazyObject()->pfcount(...\func_get_args()); + } + } +} else { + /** + * @internal + */ + trait PfcountTrait + { + public function pfcount($key): \Relay\Relay|false|int + { + return $this->initializeLazyObject()->pfcount(...\func_get_args()); + } + } +} diff --git a/app/vendor/symfony/cache/Traits/RelayProxy.php b/app/vendor/symfony/cache/Traits/RelayProxy.php index 96d7d19b4..e0ca8873a 100644 --- a/app/vendor/symfony/cache/Traits/RelayProxy.php +++ b/app/vendor/symfony/cache/Traits/RelayProxy.php @@ -11,8 +11,14 @@ namespace Symfony\Component\Cache\Traits; +use Symfony\Component\Cache\Traits\Relay\CopyTrait; +use Symfony\Component\Cache\Traits\Relay\GeosearchTrait; +use Symfony\Component\Cache\Traits\Relay\GetrangeTrait; +use Symfony\Component\Cache\Traits\Relay\HsetTrait; +use Symfony\Component\Cache\Traits\Relay\MoveTrait; +use Symfony\Component\Cache\Traits\Relay\NullableReturnTrait; +use Symfony\Component\Cache\Traits\Relay\PfcountTrait; use Symfony\Component\VarExporter\LazyObjectInterface; -use Symfony\Component\VarExporter\LazyProxyTrait; use Symfony\Contracts\Service\ResetInterface; // Help opcache.preload discover always-needed symbols @@ -25,1295 +31,1235 @@ class_exists(\Symfony\Component\VarExporter\Internal\LazyObjectState::class); */ class RelayProxy extends \Relay\Relay implements ResetInterface, LazyObjectInterface { - use LazyProxyTrait { + use CopyTrait; + use GeosearchTrait; + use GetrangeTrait; + use HsetTrait; + use MoveTrait; + use NullableReturnTrait; + use PfcountTrait; + use RedisProxyTrait { resetLazyObject as reset; } use RelayProxyTrait; - private const LAZY_OBJECT_PROPERTY_SCOPES = []; - public function __construct($host = null, $port = 6379, $connect_timeout = 0.0, $command_timeout = 0.0, #[\SensitiveParameter] $context = [], $database = 0) { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->__construct(...\func_get_args()); + $this->initializeLazyObject()->__construct(...\func_get_args()); } public function connect($host, $port = 6379, $timeout = 0.0, $persistent_id = null, $retry_interval = 0, $read_timeout = 0.0, #[\SensitiveParameter] $context = [], $database = 0): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->connect(...\func_get_args()); + return $this->initializeLazyObject()->connect(...\func_get_args()); } public function pconnect($host, $port = 6379, $timeout = 0.0, $persistent_id = null, $retry_interval = 0, $read_timeout = 0.0, #[\SensitiveParameter] $context = [], $database = 0): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pconnect(...\func_get_args()); + return $this->initializeLazyObject()->pconnect(...\func_get_args()); } public function close(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->close(...\func_get_args()); + return $this->initializeLazyObject()->close(...\func_get_args()); } public function pclose(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pclose(...\func_get_args()); + return $this->initializeLazyObject()->pclose(...\func_get_args()); } public function listen($callback): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->listen(...\func_get_args()); + return $this->initializeLazyObject()->listen(...\func_get_args()); } public function onFlushed($callback): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->onFlushed(...\func_get_args()); + return $this->initializeLazyObject()->onFlushed(...\func_get_args()); } public function onInvalidated($callback, $pattern = null): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->onInvalidated(...\func_get_args()); + return $this->initializeLazyObject()->onInvalidated(...\func_get_args()); } public function dispatchEvents(): false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dispatchEvents(...\func_get_args()); + return $this->initializeLazyObject()->dispatchEvents(...\func_get_args()); } public function getOption($option): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getOption(...\func_get_args()); + return $this->initializeLazyObject()->getOption(...\func_get_args()); } public function option($option, $value = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->option(...\func_get_args()); + return $this->initializeLazyObject()->option(...\func_get_args()); } public function setOption($option, $value): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setOption(...\func_get_args()); + return $this->initializeLazyObject()->setOption(...\func_get_args()); } public function addIgnorePatterns(...$pattern): int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->addIgnorePatterns(...\func_get_args()); + return $this->initializeLazyObject()->addIgnorePatterns(...\func_get_args()); } public function addAllowPatterns(...$pattern): int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->addAllowPatterns(...\func_get_args()); + return $this->initializeLazyObject()->addAllowPatterns(...\func_get_args()); } public function getTimeout(): false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getTimeout(...\func_get_args()); + return $this->initializeLazyObject()->getTimeout(...\func_get_args()); } public function timeout(): false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->timeout(...\func_get_args()); + return $this->initializeLazyObject()->timeout(...\func_get_args()); } public function getReadTimeout(): false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getReadTimeout(...\func_get_args()); + return $this->initializeLazyObject()->getReadTimeout(...\func_get_args()); } public function readTimeout(): false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->readTimeout(...\func_get_args()); + return $this->initializeLazyObject()->readTimeout(...\func_get_args()); } public function getBytes(): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getBytes(...\func_get_args()); + return $this->initializeLazyObject()->getBytes(...\func_get_args()); } public function bytes(): array { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bytes(...\func_get_args()); + return $this->initializeLazyObject()->bytes(...\func_get_args()); } public function getHost(): false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getHost(...\func_get_args()); + return $this->initializeLazyObject()->getHost(...\func_get_args()); } public function isConnected(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->isConnected(...\func_get_args()); + return $this->initializeLazyObject()->isConnected(...\func_get_args()); } public function getPort(): false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getPort(...\func_get_args()); + return $this->initializeLazyObject()->getPort(...\func_get_args()); } public function getAuth(): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getAuth(...\func_get_args()); + return $this->initializeLazyObject()->getAuth(...\func_get_args()); } public function getDbNum(): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getDbNum(...\func_get_args()); + return $this->initializeLazyObject()->getDbNum(...\func_get_args()); } public function _serialize($value): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_serialize(...\func_get_args()); + return $this->initializeLazyObject()->_serialize(...\func_get_args()); } public function _unserialize($value): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_unserialize(...\func_get_args()); + return $this->initializeLazyObject()->_unserialize(...\func_get_args()); } public function _compress($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_compress(...\func_get_args()); + return $this->initializeLazyObject()->_compress(...\func_get_args()); } public function _uncompress($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_uncompress(...\func_get_args()); + return $this->initializeLazyObject()->_uncompress(...\func_get_args()); } public function _pack($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_pack(...\func_get_args()); + return $this->initializeLazyObject()->_pack(...\func_get_args()); } public function _unpack($value): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_unpack(...\func_get_args()); + return $this->initializeLazyObject()->_unpack(...\func_get_args()); } public function _prefix($value): string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_prefix(...\func_get_args()); + return $this->initializeLazyObject()->_prefix(...\func_get_args()); } public function getLastError(): ?string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getLastError(...\func_get_args()); + return $this->initializeLazyObject()->getLastError(...\func_get_args()); } public function clearLastError(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->clearLastError(...\func_get_args()); + return $this->initializeLazyObject()->clearLastError(...\func_get_args()); } public function endpointId(): false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->endpointId(...\func_get_args()); + return $this->initializeLazyObject()->endpointId(...\func_get_args()); } public function getPersistentID(): false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getPersistentID(...\func_get_args()); + return $this->initializeLazyObject()->getPersistentID(...\func_get_args()); } public function socketId(): false|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->socketId(...\func_get_args()); + return $this->initializeLazyObject()->socketId(...\func_get_args()); } public function rawCommand($cmd, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rawCommand(...\func_get_args()); + return $this->initializeLazyObject()->rawCommand(...\func_get_args()); } public function select($db): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->select(...\func_get_args()); + return $this->initializeLazyObject()->select(...\func_get_args()); } public function auth(#[\SensitiveParameter] $auth): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->auth(...\func_get_args()); + return $this->initializeLazyObject()->auth(...\func_get_args()); } public function info(...$sections): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->info(...\func_get_args()); + return $this->initializeLazyObject()->info(...\func_get_args()); } public function flushdb($sync = null): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushdb(...\func_get_args()); + return $this->initializeLazyObject()->flushdb(...\func_get_args()); } public function flushall($sync = null): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushall(...\func_get_args()); + return $this->initializeLazyObject()->flushall(...\func_get_args()); } public function fcall($name, $keys = [], $argv = [], $handler = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->fcall(...\func_get_args()); + return $this->initializeLazyObject()->fcall(...\func_get_args()); } public function fcall_ro($name, $keys = [], $argv = [], $handler = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->fcall_ro(...\func_get_args()); + return $this->initializeLazyObject()->fcall_ro(...\func_get_args()); } public function function($op, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->function(...\func_get_args()); + return $this->initializeLazyObject()->function(...\func_get_args()); } public function dbsize(): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dbsize(...\func_get_args()); - } - - public function dump($key): \Relay\Relay|false|string - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->dump(...\func_get_args()); + return $this->initializeLazyObject()->dbsize(...\func_get_args()); } public function replicaof($host = null, $port = 0): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->replicaof(...\func_get_args()); + return $this->initializeLazyObject()->replicaof(...\func_get_args()); } public function waitaof($numlocal, $numremote, $timeout): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->waitaof(...\func_get_args()); + return $this->initializeLazyObject()->waitaof(...\func_get_args()); } public function restore($key, $ttl, $value, $options = null): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->restore(...\func_get_args()); + return $this->initializeLazyObject()->restore(...\func_get_args()); } public function migrate($host, $port, $key, $dstdb, $timeout, $copy = false, $replace = false, #[\SensitiveParameter] $credentials = null): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->migrate(...\func_get_args()); + return $this->initializeLazyObject()->migrate(...\func_get_args()); } public function echo($arg): \Relay\Relay|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->echo(...\func_get_args()); + return $this->initializeLazyObject()->echo(...\func_get_args()); } public function ping($arg = null): \Relay\Relay|bool|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ping(...\func_get_args()); + return $this->initializeLazyObject()->ping(...\func_get_args()); } public function idleTime(): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->idleTime(...\func_get_args()); + return $this->initializeLazyObject()->idleTime(...\func_get_args()); } public function randomkey(): \Relay\Relay|bool|null|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->randomkey(...\func_get_args()); + return $this->initializeLazyObject()->randomkey(...\func_get_args()); } public function time(): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->time(...\func_get_args()); + return $this->initializeLazyObject()->time(...\func_get_args()); } public function bgrewriteaof(): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgrewriteaof(...\func_get_args()); + return $this->initializeLazyObject()->bgrewriteaof(...\func_get_args()); } public function lastsave(): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lastsave(...\func_get_args()); + return $this->initializeLazyObject()->lastsave(...\func_get_args()); } public function lcs($key1, $key2, $options = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lcs(...\func_get_args()); + return $this->initializeLazyObject()->lcs(...\func_get_args()); } public function bgsave($schedule = false): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgsave(...\func_get_args()); + return $this->initializeLazyObject()->bgsave(...\func_get_args()); } public function save(): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->save(...\func_get_args()); + return $this->initializeLazyObject()->save(...\func_get_args()); } public function role(): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->role(...\func_get_args()); + return $this->initializeLazyObject()->role(...\func_get_args()); } public function ttl($key): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ttl(...\func_get_args()); + return $this->initializeLazyObject()->ttl(...\func_get_args()); } public function pttl($key): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pttl(...\func_get_args()); + return $this->initializeLazyObject()->pttl(...\func_get_args()); } public function exists(...$keys): \Relay\Relay|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->exists(...\func_get_args()); + return $this->initializeLazyObject()->exists(...\func_get_args()); } public function eval($script, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->eval(...\func_get_args()); + return $this->initializeLazyObject()->eval(...\func_get_args()); } public function eval_ro($script, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->eval_ro(...\func_get_args()); + return $this->initializeLazyObject()->eval_ro(...\func_get_args()); } public function evalsha($sha, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->evalsha(...\func_get_args()); + return $this->initializeLazyObject()->evalsha(...\func_get_args()); } public function evalsha_ro($sha, $args = [], $num_keys = 0): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->evalsha_ro(...\func_get_args()); + return $this->initializeLazyObject()->evalsha_ro(...\func_get_args()); } public function client($operation, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->client(...\func_get_args()); + return $this->initializeLazyObject()->client(...\func_get_args()); } public function geoadd($key, $lng, $lat, $member, ...$other_triples_and_options): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geoadd(...\func_get_args()); - } - - public function geodist($key, $src, $dst, $unit = null): \Relay\Relay|false|float - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geodist(...\func_get_args()); + return $this->initializeLazyObject()->geoadd(...\func_get_args()); } public function geohash($key, $member, ...$other_members): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geohash(...\func_get_args()); + return $this->initializeLazyObject()->geohash(...\func_get_args()); } public function georadius($key, $lng, $lat, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadius(...\func_get_args()); + return $this->initializeLazyObject()->georadius(...\func_get_args()); } public function georadiusbymember($key, $member, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadiusbymember(...\func_get_args()); + return $this->initializeLazyObject()->georadiusbymember(...\func_get_args()); } public function georadiusbymember_ro($key, $member, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadiusbymember_ro(...\func_get_args()); + return $this->initializeLazyObject()->georadiusbymember_ro(...\func_get_args()); } public function georadius_ro($key, $lng, $lat, $radius, $unit, $options = []): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->georadius_ro(...\func_get_args()); - } - - public function geosearch($key, $position, $shape, $unit, $options = []): \Relay\Relay|array - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geosearch(...\func_get_args()); + return $this->initializeLazyObject()->georadius_ro(...\func_get_args()); } public function geosearchstore($dst, $src, $position, $shape, $unit, $options = []): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geosearchstore(...\func_get_args()); + return $this->initializeLazyObject()->geosearchstore(...\func_get_args()); } public function get($key): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->get(...\func_get_args()); + return $this->initializeLazyObject()->get(...\func_get_args()); } public function getset($key, $value): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getset(...\func_get_args()); - } - - public function getrange($key, $start, $end): \Relay\Relay|false|string - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getrange(...\func_get_args()); + return $this->initializeLazyObject()->getset(...\func_get_args()); } public function setrange($key, $start, $value): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setrange(...\func_get_args()); + return $this->initializeLazyObject()->setrange(...\func_get_args()); } public function getbit($key, $pos): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getbit(...\func_get_args()); + return $this->initializeLazyObject()->getbit(...\func_get_args()); } public function bitcount($key, $start = 0, $end = -1, $by_bit = false): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitcount(...\func_get_args()); + return $this->initializeLazyObject()->bitcount(...\func_get_args()); } public function bitfield($key, ...$args): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitfield(...\func_get_args()); + return $this->initializeLazyObject()->bitfield(...\func_get_args()); } public function config($operation, $key = null, $value = null): \Relay\Relay|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->config(...\func_get_args()); + return $this->initializeLazyObject()->config(...\func_get_args()); } public function command(...$args): \Relay\Relay|array|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->command(...\func_get_args()); + return $this->initializeLazyObject()->command(...\func_get_args()); } public function bitop($operation, $dstkey, $srckey, ...$other_keys): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitop(...\func_get_args()); + return $this->initializeLazyObject()->bitop(...\func_get_args()); } public function bitpos($key, $bit, $start = null, $end = null, $bybit = false): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bitpos(...\func_get_args()); + return $this->initializeLazyObject()->bitpos(...\func_get_args()); } public function setbit($key, $pos, $val): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setbit(...\func_get_args()); + return $this->initializeLazyObject()->setbit(...\func_get_args()); } public function acl($cmd, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->acl(...\func_get_args()); + return $this->initializeLazyObject()->acl(...\func_get_args()); } public function append($key, $value): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->append(...\func_get_args()); + return $this->initializeLazyObject()->append(...\func_get_args()); } public function set($key, $value, $options = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->set(...\func_get_args()); + return $this->initializeLazyObject()->set(...\func_get_args()); } public function getex($key, $options = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getex(...\func_get_args()); + return $this->initializeLazyObject()->getex(...\func_get_args()); } public function getdel($key): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getdel(...\func_get_args()); + return $this->initializeLazyObject()->getdel(...\func_get_args()); } public function setex($key, $seconds, $value): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setex(...\func_get_args()); + return $this->initializeLazyObject()->setex(...\func_get_args()); } public function pfadd($key, $elements): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfadd(...\func_get_args()); - } - - public function pfcount($key): \Relay\Relay|false|int - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfcount(...\func_get_args()); + return $this->initializeLazyObject()->pfadd(...\func_get_args()); } public function pfmerge($dst, $srckeys): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pfmerge(...\func_get_args()); + return $this->initializeLazyObject()->pfmerge(...\func_get_args()); } public function psetex($key, $milliseconds, $value): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->psetex(...\func_get_args()); + return $this->initializeLazyObject()->psetex(...\func_get_args()); } public function publish($channel, $message): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->publish(...\func_get_args()); + return $this->initializeLazyObject()->publish(...\func_get_args()); } public function pubsub($operation, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pubsub(...\func_get_args()); + return $this->initializeLazyObject()->pubsub(...\func_get_args()); } public function spublish($channel, $message): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->spublish(...\func_get_args()); + return $this->initializeLazyObject()->spublish(...\func_get_args()); } public function setnx($key, $value): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->setnx(...\func_get_args()); + return $this->initializeLazyObject()->setnx(...\func_get_args()); } public function mget($keys): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mget(...\func_get_args()); + return $this->initializeLazyObject()->mget(...\func_get_args()); } public function move($key, $db): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->move(...\func_get_args()); + return $this->initializeLazyObject()->move(...\func_get_args()); } public function mset($kvals): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->mset(...\func_get_args()); + return $this->initializeLazyObject()->mset(...\func_get_args()); } public function msetnx($kvals): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->msetnx(...\func_get_args()); + return $this->initializeLazyObject()->msetnx(...\func_get_args()); } public function rename($key, $newkey): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rename(...\func_get_args()); + return $this->initializeLazyObject()->rename(...\func_get_args()); } public function renamenx($key, $newkey): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->renamenx(...\func_get_args()); + return $this->initializeLazyObject()->renamenx(...\func_get_args()); } public function del(...$keys): \Relay\Relay|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->del(...\func_get_args()); + return $this->initializeLazyObject()->del(...\func_get_args()); } public function unlink(...$keys): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unlink(...\func_get_args()); + return $this->initializeLazyObject()->unlink(...\func_get_args()); } public function expire($key, $seconds, $mode = null): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expire(...\func_get_args()); + return $this->initializeLazyObject()->expire(...\func_get_args()); } public function pexpire($key, $milliseconds): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpire(...\func_get_args()); + return $this->initializeLazyObject()->pexpire(...\func_get_args()); } public function expireat($key, $timestamp): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expireat(...\func_get_args()); + return $this->initializeLazyObject()->expireat(...\func_get_args()); } public function expiretime($key): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->expiretime(...\func_get_args()); + return $this->initializeLazyObject()->expiretime(...\func_get_args()); } public function pexpireat($key, $timestamp_ms): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpireat(...\func_get_args()); + return $this->initializeLazyObject()->pexpireat(...\func_get_args()); } public function pexpiretime($key): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pexpiretime(...\func_get_args()); + return $this->initializeLazyObject()->pexpiretime(...\func_get_args()); } public function persist($key): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->persist(...\func_get_args()); + return $this->initializeLazyObject()->persist(...\func_get_args()); } public function type($key): \Relay\Relay|bool|int|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->type(...\func_get_args()); - } - - public function lmove($srckey, $dstkey, $srcpos, $dstpos): \Relay\Relay|false|null|string - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lmove(...\func_get_args()); - } - - public function blmove($srckey, $dstkey, $srcpos, $dstpos, $timeout): \Relay\Relay|false|null|string - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blmove(...\func_get_args()); + return $this->initializeLazyObject()->type(...\func_get_args()); } public function lrange($key, $start, $stop): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lrange(...\func_get_args()); + return $this->initializeLazyObject()->lrange(...\func_get_args()); } public function lpush($key, $mem, ...$mems): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpush(...\func_get_args()); + return $this->initializeLazyObject()->lpush(...\func_get_args()); } public function rpush($key, $mem, ...$mems): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpush(...\func_get_args()); + return $this->initializeLazyObject()->rpush(...\func_get_args()); } public function lpushx($key, $mem, ...$mems): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpushx(...\func_get_args()); + return $this->initializeLazyObject()->lpushx(...\func_get_args()); } public function rpushx($key, $mem, ...$mems): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpushx(...\func_get_args()); + return $this->initializeLazyObject()->rpushx(...\func_get_args()); } public function lset($key, $index, $mem): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lset(...\func_get_args()); + return $this->initializeLazyObject()->lset(...\func_get_args()); } public function lpop($key, $count = 1): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpop(...\func_get_args()); + return $this->initializeLazyObject()->lpop(...\func_get_args()); } public function lpos($key, $value, $options = null): \Relay\Relay|array|false|int|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lpos(...\func_get_args()); + return $this->initializeLazyObject()->lpos(...\func_get_args()); } public function rpop($key, $count = 1): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpop(...\func_get_args()); + return $this->initializeLazyObject()->rpop(...\func_get_args()); } public function rpoplpush($source, $dest): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->rpoplpush(...\func_get_args()); + return $this->initializeLazyObject()->rpoplpush(...\func_get_args()); } public function brpoplpush($source, $dest, $timeout): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->brpoplpush(...\func_get_args()); + return $this->initializeLazyObject()->brpoplpush(...\func_get_args()); } public function blpop($key, $timeout_or_key, ...$extra_args): \Relay\Relay|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blpop(...\func_get_args()); + return $this->initializeLazyObject()->blpop(...\func_get_args()); } public function blmpop($timeout, $keys, $from, $count = 1): \Relay\Relay|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->blmpop(...\func_get_args()); + return $this->initializeLazyObject()->blmpop(...\func_get_args()); } public function bzmpop($timeout, $keys, $from, $count = 1): \Relay\Relay|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzmpop(...\func_get_args()); + return $this->initializeLazyObject()->bzmpop(...\func_get_args()); } public function lmpop($keys, $from, $count = 1): \Relay\Relay|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lmpop(...\func_get_args()); + return $this->initializeLazyObject()->lmpop(...\func_get_args()); } public function zmpop($keys, $from, $count = 1): \Relay\Relay|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zmpop(...\func_get_args()); + return $this->initializeLazyObject()->zmpop(...\func_get_args()); } public function brpop($key, $timeout_or_key, ...$extra_args): \Relay\Relay|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->brpop(...\func_get_args()); + return $this->initializeLazyObject()->brpop(...\func_get_args()); } public function bzpopmax($key, $timeout_or_key, ...$extra_args): \Relay\Relay|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzpopmax(...\func_get_args()); + return $this->initializeLazyObject()->bzpopmax(...\func_get_args()); } public function bzpopmin($key, $timeout_or_key, ...$extra_args): \Relay\Relay|array|false|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bzpopmin(...\func_get_args()); + return $this->initializeLazyObject()->bzpopmin(...\func_get_args()); } public function object($op, $key): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->object(...\func_get_args()); + return $this->initializeLazyObject()->object(...\func_get_args()); } public function geopos($key, ...$members): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->geopos(...\func_get_args()); + return $this->initializeLazyObject()->geopos(...\func_get_args()); } public function lrem($key, $mem, $count = 0): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lrem(...\func_get_args()); + return $this->initializeLazyObject()->lrem(...\func_get_args()); } public function lindex($key, $index): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lindex(...\func_get_args()); + return $this->initializeLazyObject()->lindex(...\func_get_args()); } public function linsert($key, $op, $pivot, $element): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->linsert(...\func_get_args()); + return $this->initializeLazyObject()->linsert(...\func_get_args()); } public function ltrim($key, $start, $end): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ltrim(...\func_get_args()); + return $this->initializeLazyObject()->ltrim(...\func_get_args()); } public function hget($hash, $member): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hget(...\func_get_args()); + return $this->initializeLazyObject()->hget(...\func_get_args()); } public function hstrlen($hash, $member): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hstrlen(...\func_get_args()); + return $this->initializeLazyObject()->hstrlen(...\func_get_args()); } public function hgetall($hash): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hgetall(...\func_get_args()); + return $this->initializeLazyObject()->hgetall(...\func_get_args()); } public function hkeys($hash): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hkeys(...\func_get_args()); + return $this->initializeLazyObject()->hkeys(...\func_get_args()); } public function hvals($hash): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hvals(...\func_get_args()); + return $this->initializeLazyObject()->hvals(...\func_get_args()); } public function hmget($hash, $members): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hmget(...\func_get_args()); - } - - public function hrandfield($hash, $options = null): \Relay\Relay|array|false|string - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hrandfield(...\func_get_args()); + return $this->initializeLazyObject()->hmget(...\func_get_args()); } public function hmset($hash, $members): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hmset(...\func_get_args()); + return $this->initializeLazyObject()->hmset(...\func_get_args()); } public function hexists($hash, $member): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hexists(...\func_get_args()); + return $this->initializeLazyObject()->hexists(...\func_get_args()); } public function hsetnx($hash, $member, $value): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hsetnx(...\func_get_args()); - } - - public function hset($key, $mem, $val, ...$kvals): \Relay\Relay|false|int - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hset(...\func_get_args()); + return $this->initializeLazyObject()->hsetnx(...\func_get_args()); } public function hdel($key, $mem, ...$mems): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hdel(...\func_get_args()); + return $this->initializeLazyObject()->hdel(...\func_get_args()); } public function hincrby($key, $mem, $value): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hincrby(...\func_get_args()); + return $this->initializeLazyObject()->hincrby(...\func_get_args()); } public function hincrbyfloat($key, $mem, $value): \Relay\Relay|bool|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hincrbyfloat(...\func_get_args()); + return $this->initializeLazyObject()->hincrbyfloat(...\func_get_args()); } public function incr($key, $by = 1): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incr(...\func_get_args()); + return $this->initializeLazyObject()->incr(...\func_get_args()); } public function decr($key, $by = 1): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decr(...\func_get_args()); + return $this->initializeLazyObject()->decr(...\func_get_args()); } public function incrby($key, $value): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incrby(...\func_get_args()); + return $this->initializeLazyObject()->incrby(...\func_get_args()); } public function decrby($key, $value): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->decrby(...\func_get_args()); + return $this->initializeLazyObject()->decrby(...\func_get_args()); } public function incrbyfloat($key, $value): \Relay\Relay|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->incrbyfloat(...\func_get_args()); + return $this->initializeLazyObject()->incrbyfloat(...\func_get_args()); } public function sdiff($key, ...$other_keys): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sdiff(...\func_get_args()); + return $this->initializeLazyObject()->sdiff(...\func_get_args()); } public function sdiffstore($key, ...$other_keys): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sdiffstore(...\func_get_args()); + return $this->initializeLazyObject()->sdiffstore(...\func_get_args()); } public function sinter($key, ...$other_keys): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sinter(...\func_get_args()); + return $this->initializeLazyObject()->sinter(...\func_get_args()); } public function sintercard($keys, $limit = -1): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sintercard(...\func_get_args()); + return $this->initializeLazyObject()->sintercard(...\func_get_args()); } public function sinterstore($key, ...$other_keys): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sinterstore(...\func_get_args()); + return $this->initializeLazyObject()->sinterstore(...\func_get_args()); } public function sunion($key, ...$other_keys): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sunion(...\func_get_args()); + return $this->initializeLazyObject()->sunion(...\func_get_args()); } public function sunionstore($key, ...$other_keys): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sunionstore(...\func_get_args()); + return $this->initializeLazyObject()->sunionstore(...\func_get_args()); } public function subscribe($channels, $callback): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->subscribe(...\func_get_args()); + return $this->initializeLazyObject()->subscribe(...\func_get_args()); } public function unsubscribe($channels = []): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->unsubscribe(...\func_get_args()); } public function psubscribe($patterns, $callback): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->psubscribe(...\func_get_args()); + return $this->initializeLazyObject()->psubscribe(...\func_get_args()); } public function punsubscribe($patterns = []): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->punsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->punsubscribe(...\func_get_args()); } public function ssubscribe($channels, $callback): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->ssubscribe(...\func_get_args()); + return $this->initializeLazyObject()->ssubscribe(...\func_get_args()); } public function sunsubscribe($channels = []): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sunsubscribe(...\func_get_args()); + return $this->initializeLazyObject()->sunsubscribe(...\func_get_args()); } public function touch($key_or_array, ...$more_keys): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->touch(...\func_get_args()); + return $this->initializeLazyObject()->touch(...\func_get_args()); } public function pipeline(): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->pipeline(...\func_get_args()); + return $this->initializeLazyObject()->pipeline(...\func_get_args()); } public function multi($mode = 0): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->multi(...\func_get_args()); + return $this->initializeLazyObject()->multi(...\func_get_args()); } public function exec(): \Relay\Relay|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->exec(...\func_get_args()); + return $this->initializeLazyObject()->exec(...\func_get_args()); } public function wait($replicas, $timeout): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->wait(...\func_get_args()); + return $this->initializeLazyObject()->wait(...\func_get_args()); } public function watch($key, ...$other_keys): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->watch(...\func_get_args()); + return $this->initializeLazyObject()->watch(...\func_get_args()); } public function unwatch(): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->unwatch(...\func_get_args()); + return $this->initializeLazyObject()->unwatch(...\func_get_args()); } public function discard(): bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->discard(...\func_get_args()); + return $this->initializeLazyObject()->discard(...\func_get_args()); } public function getMode($masked = false): int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->getMode(...\func_get_args()); + return $this->initializeLazyObject()->getMode(...\func_get_args()); } public function clearBytes(): void { - ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->clearBytes(...\func_get_args()); + $this->initializeLazyObject()->clearBytes(...\func_get_args()); } public function scan(&$iterator, $match = null, $count = 0, $type = null): array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->scan($iterator, ...\array_slice(\func_get_args(), 1)); + return $this->initializeLazyObject()->scan($iterator, ...\array_slice(\func_get_args(), 1)); } public function hscan($key, &$iterator, $match = null, $count = 0): array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->hscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); } public function sscan($key, &$iterator, $match = null, $count = 0): array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->sscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); } public function zscan($key, &$iterator, $match = null, $count = 0): array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); + return $this->initializeLazyObject()->zscan($key, $iterator, ...\array_slice(\func_get_args(), 2)); } public function keys($pattern): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->keys(...\func_get_args()); + return $this->initializeLazyObject()->keys(...\func_get_args()); } public function slowlog($operation, ...$extra_args): \Relay\Relay|array|bool|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->slowlog(...\func_get_args()); + return $this->initializeLazyObject()->slowlog(...\func_get_args()); } public function smembers($set): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->smembers(...\func_get_args()); + return $this->initializeLazyObject()->smembers(...\func_get_args()); } public function sismember($set, $member): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sismember(...\func_get_args()); + return $this->initializeLazyObject()->sismember(...\func_get_args()); } public function smismember($set, ...$members): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->smismember(...\func_get_args()); + return $this->initializeLazyObject()->smismember(...\func_get_args()); } public function srem($set, $member, ...$members): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->srem(...\func_get_args()); + return $this->initializeLazyObject()->srem(...\func_get_args()); } public function sadd($set, $member, ...$members): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sadd(...\func_get_args()); + return $this->initializeLazyObject()->sadd(...\func_get_args()); } public function sort($key, $options = []): \Relay\Relay|array|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sort(...\func_get_args()); + return $this->initializeLazyObject()->sort(...\func_get_args()); } public function sort_ro($key, $options = []): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->sort_ro(...\func_get_args()); + return $this->initializeLazyObject()->sort_ro(...\func_get_args()); } public function smove($srcset, $dstset, $member): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->smove(...\func_get_args()); + return $this->initializeLazyObject()->smove(...\func_get_args()); } public function spop($set, $count = 1): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->spop(...\func_get_args()); + return $this->initializeLazyObject()->spop(...\func_get_args()); } public function srandmember($set, $count = 1): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->srandmember(...\func_get_args()); + return $this->initializeLazyObject()->srandmember(...\func_get_args()); } public function scard($key): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->scard(...\func_get_args()); + return $this->initializeLazyObject()->scard(...\func_get_args()); } public function script($command, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->script(...\func_get_args()); + return $this->initializeLazyObject()->script(...\func_get_args()); } public function strlen($key): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->strlen(...\func_get_args()); + return $this->initializeLazyObject()->strlen(...\func_get_args()); } public function hlen($key): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->hlen(...\func_get_args()); + return $this->initializeLazyObject()->hlen(...\func_get_args()); } public function llen($key): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->llen(...\func_get_args()); + return $this->initializeLazyObject()->llen(...\func_get_args()); } public function xack($key, $group, $ids): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xack(...\func_get_args()); - } - - public function xadd($key, $id, $values, $maxlen = 0, $approx = false, $nomkstream = false): \Relay\Relay|false|string - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xadd(...\func_get_args()); + return $this->initializeLazyObject()->xack(...\func_get_args()); } public function xclaim($key, $group, $consumer, $min_idle, $ids, $options): \Relay\Relay|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xclaim(...\func_get_args()); + return $this->initializeLazyObject()->xclaim(...\func_get_args()); } public function xautoclaim($key, $group, $consumer, $min_idle, $start, $count = -1, $justid = false): \Relay\Relay|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xautoclaim(...\func_get_args()); + return $this->initializeLazyObject()->xautoclaim(...\func_get_args()); } public function xlen($key): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xlen(...\func_get_args()); + return $this->initializeLazyObject()->xlen(...\func_get_args()); } public function xgroup($operation, $key = null, $group = null, $id_or_consumer = null, $mkstream = false, $entries_read = -2): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xgroup(...\func_get_args()); + return $this->initializeLazyObject()->xgroup(...\func_get_args()); } public function xdel($key, $ids): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xdel(...\func_get_args()); + return $this->initializeLazyObject()->xdel(...\func_get_args()); } public function xinfo($operation, $arg1 = null, $arg2 = null, $count = -1): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xinfo(...\func_get_args()); + return $this->initializeLazyObject()->xinfo(...\func_get_args()); } public function xpending($key, $group, $start = null, $end = null, $count = -1, $consumer = null, $idle = 0): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xpending(...\func_get_args()); + return $this->initializeLazyObject()->xpending(...\func_get_args()); } public function xrange($key, $start, $end, $count = -1): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xrange(...\func_get_args()); + return $this->initializeLazyObject()->xrange(...\func_get_args()); } public function xrevrange($key, $end, $start, $count = -1): \Relay\Relay|array|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xrevrange(...\func_get_args()); + return $this->initializeLazyObject()->xrevrange(...\func_get_args()); } public function xread($streams, $count = -1, $block = -1): \Relay\Relay|array|bool|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xread(...\func_get_args()); + return $this->initializeLazyObject()->xread(...\func_get_args()); } public function xreadgroup($group, $consumer, $streams, $count = 1, $block = 1): \Relay\Relay|array|bool|null { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xreadgroup(...\func_get_args()); + return $this->initializeLazyObject()->xreadgroup(...\func_get_args()); } public function xtrim($key, $threshold, $approx = false, $minid = false, $limit = -1): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->xtrim(...\func_get_args()); + return $this->initializeLazyObject()->xtrim(...\func_get_args()); } public function zadd($key, ...$args): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zadd(...\func_get_args()); + return $this->initializeLazyObject()->zadd(...\func_get_args()); } public function zrandmember($key, $options = null): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrandmember(...\func_get_args()); + return $this->initializeLazyObject()->zrandmember(...\func_get_args()); } public function zrange($key, $start, $end, $options = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrange(...\func_get_args()); + return $this->initializeLazyObject()->zrange(...\func_get_args()); } public function zrevrange($key, $start, $end, $options = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrange(...\func_get_args()); + return $this->initializeLazyObject()->zrevrange(...\func_get_args()); } public function zrangebyscore($key, $start, $end, $options = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrangebyscore(...\func_get_args()); + return $this->initializeLazyObject()->zrangebyscore(...\func_get_args()); } public function zrevrangebyscore($key, $start, $end, $options = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrangebyscore(...\func_get_args()); + return $this->initializeLazyObject()->zrevrangebyscore(...\func_get_args()); } public function zrangestore($dst, $src, $start, $end, $options = null): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrangestore(...\func_get_args()); + return $this->initializeLazyObject()->zrangestore(...\func_get_args()); } public function zrangebylex($key, $min, $max, $offset = -1, $count = -1): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrangebylex(...\func_get_args()); + return $this->initializeLazyObject()->zrangebylex(...\func_get_args()); } public function zrevrangebylex($key, $max, $min, $offset = -1, $count = -1): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrangebylex(...\func_get_args()); - } - - public function zrank($key, $rank, $withscore = false): \Relay\Relay|array|false|int - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrank(...\func_get_args()); - } - - public function zrevrank($key, $rank, $withscore = false): \Relay\Relay|array|false|int - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrevrank(...\func_get_args()); + return $this->initializeLazyObject()->zrevrangebylex(...\func_get_args()); } public function zrem($key, ...$args): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zrem(...\func_get_args()); + return $this->initializeLazyObject()->zrem(...\func_get_args()); } public function zremrangebylex($key, $min, $max): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zremrangebylex(...\func_get_args()); + return $this->initializeLazyObject()->zremrangebylex(...\func_get_args()); } public function zremrangebyrank($key, $start, $end): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zremrangebyrank(...\func_get_args()); + return $this->initializeLazyObject()->zremrangebyrank(...\func_get_args()); } public function zremrangebyscore($key, $min, $max): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zremrangebyscore(...\func_get_args()); + return $this->initializeLazyObject()->zremrangebyscore(...\func_get_args()); } public function zcard($key): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zcard(...\func_get_args()); + return $this->initializeLazyObject()->zcard(...\func_get_args()); } public function zcount($key, $min, $max): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zcount(...\func_get_args()); + return $this->initializeLazyObject()->zcount(...\func_get_args()); } public function zdiff($keys, $options = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zdiff(...\func_get_args()); + return $this->initializeLazyObject()->zdiff(...\func_get_args()); } public function zdiffstore($dst, $keys): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zdiffstore(...\func_get_args()); + return $this->initializeLazyObject()->zdiffstore(...\func_get_args()); } public function zincrby($key, $score, $mem): \Relay\Relay|false|float { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zincrby(...\func_get_args()); + return $this->initializeLazyObject()->zincrby(...\func_get_args()); } public function zlexcount($key, $min, $max): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zlexcount(...\func_get_args()); + return $this->initializeLazyObject()->zlexcount(...\func_get_args()); } public function zmscore($key, ...$mems): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zmscore(...\func_get_args()); - } - - public function zscore($key, $member): \Relay\Relay|false|float - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zscore(...\func_get_args()); + return $this->initializeLazyObject()->zmscore(...\func_get_args()); } public function zinter($keys, $weights = null, $options = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zinter(...\func_get_args()); + return $this->initializeLazyObject()->zinter(...\func_get_args()); } public function zintercard($keys, $limit = -1): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zintercard(...\func_get_args()); + return $this->initializeLazyObject()->zintercard(...\func_get_args()); } public function zinterstore($dst, $keys, $weights = null, $options = null): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zinterstore(...\func_get_args()); + return $this->initializeLazyObject()->zinterstore(...\func_get_args()); } public function zunion($keys, $weights = null, $options = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zunion(...\func_get_args()); + return $this->initializeLazyObject()->zunion(...\func_get_args()); } public function zunionstore($dst, $keys, $weights = null, $options = null): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zunionstore(...\func_get_args()); + return $this->initializeLazyObject()->zunionstore(...\func_get_args()); } public function zpopmin($key, $count = 1): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zpopmin(...\func_get_args()); + return $this->initializeLazyObject()->zpopmin(...\func_get_args()); } public function zpopmax($key, $count = 1): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->zpopmax(...\func_get_args()); + return $this->initializeLazyObject()->zpopmax(...\func_get_args()); } public function _getKeys() { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->_getKeys(...\func_get_args()); + return $this->initializeLazyObject()->_getKeys(...\func_get_args()); } } diff --git a/app/vendor/symfony/cache/Traits/RelayProxyTrait.php b/app/vendor/symfony/cache/Traits/RelayProxyTrait.php index a1d252b96..6077b44f3 100644 --- a/app/vendor/symfony/cache/Traits/RelayProxyTrait.php +++ b/app/vendor/symfony/cache/Traits/RelayProxyTrait.php @@ -17,129 +17,124 @@ */ trait RelayProxyTrait { - public function copy($src, $dst, $options = null): \Relay\Relay|bool - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->copy(...\func_get_args()); - } - public function jsonArrAppend($key, $value_or_array, $path = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonArrAppend(...\func_get_args()); + return $this->initializeLazyObject()->jsonArrAppend(...\func_get_args()); } public function jsonArrIndex($key, $path, $value, $start = 0, $stop = -1): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonArrIndex(...\func_get_args()); + return $this->initializeLazyObject()->jsonArrIndex(...\func_get_args()); } public function jsonArrInsert($key, $path, $index, $value, ...$other_values): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonArrInsert(...\func_get_args()); + return $this->initializeLazyObject()->jsonArrInsert(...\func_get_args()); } public function jsonArrLen($key, $path = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonArrLen(...\func_get_args()); + return $this->initializeLazyObject()->jsonArrLen(...\func_get_args()); } public function jsonArrPop($key, $path = null, $index = -1): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonArrPop(...\func_get_args()); + return $this->initializeLazyObject()->jsonArrPop(...\func_get_args()); } public function jsonArrTrim($key, $path, $start, $stop): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonArrTrim(...\func_get_args()); + return $this->initializeLazyObject()->jsonArrTrim(...\func_get_args()); } public function jsonClear($key, $path = null): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonClear(...\func_get_args()); + return $this->initializeLazyObject()->jsonClear(...\func_get_args()); } public function jsonDebug($command, $key, $path = null): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonDebug(...\func_get_args()); + return $this->initializeLazyObject()->jsonDebug(...\func_get_args()); } public function jsonDel($key, $path = null): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonDel(...\func_get_args()); + return $this->initializeLazyObject()->jsonDel(...\func_get_args()); } public function jsonForget($key, $path = null): \Relay\Relay|false|int { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonForget(...\func_get_args()); + return $this->initializeLazyObject()->jsonForget(...\func_get_args()); } public function jsonGet($key, $options = [], ...$paths): mixed { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonGet(...\func_get_args()); + return $this->initializeLazyObject()->jsonGet(...\func_get_args()); } public function jsonMerge($key, $path, $value): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonMerge(...\func_get_args()); + return $this->initializeLazyObject()->jsonMerge(...\func_get_args()); } public function jsonMget($key_or_array, $path): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonMget(...\func_get_args()); + return $this->initializeLazyObject()->jsonMget(...\func_get_args()); } public function jsonMset($key, $path, $value, ...$other_triples): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonMset(...\func_get_args()); + return $this->initializeLazyObject()->jsonMset(...\func_get_args()); } public function jsonNumIncrBy($key, $path, $value): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonNumIncrBy(...\func_get_args()); + return $this->initializeLazyObject()->jsonNumIncrBy(...\func_get_args()); } public function jsonNumMultBy($key, $path, $value): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonNumMultBy(...\func_get_args()); + return $this->initializeLazyObject()->jsonNumMultBy(...\func_get_args()); } public function jsonObjKeys($key, $path = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonObjKeys(...\func_get_args()); + return $this->initializeLazyObject()->jsonObjKeys(...\func_get_args()); } public function jsonObjLen($key, $path = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonObjLen(...\func_get_args()); + return $this->initializeLazyObject()->jsonObjLen(...\func_get_args()); } public function jsonResp($key, $path = null): \Relay\Relay|array|false|int|string { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonResp(...\func_get_args()); + return $this->initializeLazyObject()->jsonResp(...\func_get_args()); } public function jsonSet($key, $path, $value, $condition = null): \Relay\Relay|bool { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonSet(...\func_get_args()); + return $this->initializeLazyObject()->jsonSet(...\func_get_args()); } public function jsonStrAppend($key, $value, $path = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonStrAppend(...\func_get_args()); + return $this->initializeLazyObject()->jsonStrAppend(...\func_get_args()); } public function jsonStrLen($key, $path = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonStrLen(...\func_get_args()); + return $this->initializeLazyObject()->jsonStrLen(...\func_get_args()); } public function jsonToggle($key, $path): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonToggle(...\func_get_args()); + return $this->initializeLazyObject()->jsonToggle(...\func_get_args()); } public function jsonType($key, $path = null): \Relay\Relay|array|false { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->jsonType(...\func_get_args()); + return $this->initializeLazyObject()->jsonType(...\func_get_args()); } } } else { @@ -148,9 +143,5 @@ public function jsonType($key, $path = null): \Relay\Relay|array|false */ trait RelayProxyTrait { - public function copy($src, $dst, $options = null): \Relay\Relay|false|int - { - return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->copy(...\func_get_args()); - } } } diff --git a/app/vendor/symfony/cache/composer.json b/app/vendor/symfony/cache/composer.json index d537037ae..bdb461be8 100644 --- a/app/vendor/symfony/cache/composer.json +++ b/app/vendor/symfony/cache/composer.json @@ -34,6 +34,7 @@ "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", "psr/simple-cache": "^1.0|^2.0|^3.0", + "symfony/clock": "^6.4|^7.0", "symfony/config": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", "symfony/filesystem": "^6.4|^7.0", diff --git a/app/vendor/symfony/config/Builder/ClassBuilder.php b/app/vendor/symfony/config/Builder/ClassBuilder.php index f34ab8519..5ae8bda16 100644 --- a/app/vendor/symfony/config/Builder/ClassBuilder.php +++ b/app/vendor/symfony/config/Builder/ClassBuilder.php @@ -63,11 +63,11 @@ public function build(): string } unset($path[$key]); } - $require .= sprintf('require_once __DIR__.\DIRECTORY_SEPARATOR.\'%s\';', implode('\'.\DIRECTORY_SEPARATOR.\'', $path))."\n"; + $require .= \sprintf('require_once __DIR__.\DIRECTORY_SEPARATOR.\'%s\';', implode('\'.\DIRECTORY_SEPARATOR.\'', $path))."\n"; } $use = $require ? "\n" : ''; foreach (array_keys($this->use) as $statement) { - $use .= sprintf('use %s;', $statement)."\n"; + $use .= \sprintf('use %s;', $statement)."\n"; } $implements = [] === $this->implements ? '' : 'implements '.implode(', ', $this->implements); @@ -82,7 +82,7 @@ public function build(): string } } - $content = strtr(' $this->namespace, 'REQUIRE' => $require, 'USE' => $use, 'CLASS' => $this->getName(), 'IMPLEMENTS' => $implements, 'BODY' => $body]); - - return $content; } public function addRequire(self $class): void @@ -126,8 +124,8 @@ public function addProperty(string $name, ?string $classType = null, ?string $de $property->setType($classType); } $this->properties[] = $property; - $defaultValue = null !== $defaultValue ? sprintf(' = %s', $defaultValue) : ''; - $property->setContent(sprintf('private $%s%s;', $property->getName(), $defaultValue)); + $defaultValue = null !== $defaultValue ? \sprintf(' = %s', $defaultValue) : ''; + $property->setContent(\sprintf('private $%s%s;', $property->getName(), $defaultValue)); return $property; } diff --git a/app/vendor/symfony/config/Builder/ConfigBuilderGenerator.php b/app/vendor/symfony/config/Builder/ConfigBuilderGenerator.php index 4923eaf25..08e91c2d1 100644 --- a/app/vendor/symfony/config/Builder/ConfigBuilderGenerator.php +++ b/app/vendor/symfony/config/Builder/ConfigBuilderGenerator.php @@ -114,7 +114,7 @@ private function buildNode(NodeInterface $node, ClassBuilder $class, string $nam $child instanceof PrototypedArrayNode => $this->handlePrototypedArrayNode($child, $class, $namespace), $child instanceof VariableNode => $this->handleVariableNode($child, $class), $child instanceof ArrayNode => $this->handleArrayNode($child, $class, $namespace), - default => throw new \RuntimeException(sprintf('Unknown node "%s".', $child::class)), + default => throw new \RuntimeException(\sprintf('Unknown node "%s".', $child::class)), }; } } @@ -129,9 +129,9 @@ private function handleArrayNode(ArrayNode $node, ClassBuilder $class, string $n $hasNormalizationClosures = $this->hasNormalizationClosures($node); $comment = $this->getComment($node); if ($hasNormalizationClosures) { - $comment = sprintf(" * @template TValue\n * @param TValue \$value\n%s", $comment); - $comment .= sprintf(' * @return %s|$this'."\n", $childClass->getFqcn()); - $comment .= sprintf(' * @psalm-return (TValue is array ? %s : static)'."\n ", $childClass->getFqcn()); + $comment = \sprintf(" * @template TValue\n * @param TValue \$value\n%s", $comment); + $comment .= \sprintf(' * @return %s|$this'."\n", $childClass->getFqcn()); + $comment .= \sprintf(' * @psalm-return (TValue is array ? %s : static)'."\n ", $childClass->getFqcn()); } if ('' !== $comment) { $comment = "/**\n$comment*/\n"; @@ -281,9 +281,9 @@ public function NAME(string $VAR, TYPE $VALUE): static $comment = $this->getComment($node); if ($hasNormalizationClosures) { - $comment = sprintf(" * @template TValue\n * @param TValue \$value\n%s", $comment); - $comment .= sprintf(' * @return %s|$this'."\n", $childClass->getFqcn()); - $comment .= sprintf(' * @psalm-return (TValue is array ? %s : static)'."\n ", $childClass->getFqcn()); + $comment = \sprintf(" * @template TValue\n * @param TValue \$value\n%s", $comment); + $comment .= \sprintf(' * @return %s|$this'."\n", $childClass->getFqcn()); + $comment .= \sprintf(' * @psalm-return (TValue is array ? %s : static)'."\n ", $childClass->getFqcn()); } if ('' !== $comment) { $comment = "/**\n$comment*/\n"; @@ -425,7 +425,7 @@ private function getComment(BaseNode $node): string } if ($node instanceof EnumNode) { - $comment .= sprintf(' * @param ParamConfigurator|%s $value', implode('|', array_unique(array_map(fn ($a) => !$a instanceof \UnitEnum ? var_export($a, true) : '\\'.ltrim(var_export($a, true), '\\'), $node->getValues()))))."\n"; + $comment .= \sprintf(' * @param ParamConfigurator|%s $value', implode('|', array_unique(array_map(fn ($a) => !$a instanceof \UnitEnum ? var_export($a, true) : '\\'.ltrim(var_export($a, true), '\\'), $node->getValues()))))."\n"; } else { $parameterTypes = $this->getParameterTypes($node); $comment .= ' * @param ParamConfigurator|'.implode('|', $parameterTypes).' $value'."\n"; @@ -578,7 +578,7 @@ public function NAME(string $key, mixed $value): static private function getSubNamespace(ClassBuilder $rootClass): string { - return sprintf('%s\\%s', $rootClass->getNamespace(), substr($rootClass->getName(), 0, -6)); + return \sprintf('%s\\%s', $rootClass->getNamespace(), substr($rootClass->getName(), 0, -6)); } private function hasNormalizationClosures(NodeInterface $node): bool diff --git a/app/vendor/symfony/config/CHANGELOG.md b/app/vendor/symfony/config/CHANGELOG.md index 169798955..e38639e4d 100644 --- a/app/vendor/symfony/config/CHANGELOG.md +++ b/app/vendor/symfony/config/CHANGELOG.md @@ -1,6 +1,17 @@ CHANGELOG ========= +7.2 +--- + + * Add `#[WhenNot]` attribute to prevent service from being registered in a specific environment + * Generate a meta file in JSON format for resource tracking + * Add `SkippingResourceChecker` + * Add support for `defaultNull()` on `BooleanNode` + * Add `StringNode` and `StringNodeDefinition` + * Add `ArrayNodeDefinition::stringPrototype()` method + * Add `NodeBuilder::stringNode()` method + 7.1 --- diff --git a/app/vendor/symfony/config/ConfigCache.php b/app/vendor/symfony/config/ConfigCache.php index 7c87b9b9e..400b6162c 100644 --- a/app/vendor/symfony/config/ConfigCache.php +++ b/app/vendor/symfony/config/ConfigCache.php @@ -11,7 +11,9 @@ namespace Symfony\Component\Config; +use Symfony\Component\Config\Resource\ResourceInterface; use Symfony\Component\Config\Resource\SelfCheckingResourceChecker; +use Symfony\Component\Config\Resource\SkippingResourceChecker; /** * ConfigCache caches arbitrary content in files on disk. @@ -26,18 +28,23 @@ class ConfigCache extends ResourceCheckerConfigCache { /** - * @param string $file The absolute cache path - * @param bool $debug Whether debugging is enabled or not - * @param string|null $metaFile The absolute path to the meta file + * @param string $file The absolute cache path + * @param bool $debug Whether debugging is enabled or not + * @param string|null $metaFile The absolute path to the meta file + * @param class-string[]|null $skippedResourceTypes */ public function __construct( string $file, private bool $debug, ?string $metaFile = null, + array|null $skippedResourceTypes = null, ) { $checkers = []; - if (true === $this->debug) { - $checkers = [new SelfCheckingResourceChecker()]; + if ($this->debug) { + if (null !== $skippedResourceTypes) { + $checkers[] = new SkippingResourceChecker($skippedResourceTypes); + } + $checkers[] = new SelfCheckingResourceChecker(); } parent::__construct($file, $checkers, $metaFile); diff --git a/app/vendor/symfony/config/Definition/ArrayNode.php b/app/vendor/symfony/config/Definition/ArrayNode.php index 15ad47862..5301b7243 100644 --- a/app/vendor/symfony/config/Definition/ArrayNode.php +++ b/app/vendor/symfony/config/Definition/ArrayNode.php @@ -159,7 +159,7 @@ public function hasDefaultValue(): bool public function getDefaultValue(): mixed { if (!$this->hasDefaultValue()) { - throw new \RuntimeException(sprintf('The node at path "%s" has no default value.', $this->getPath())); + throw new \RuntimeException(\sprintf('The node at path "%s" has no default value.', $this->getPath())); } $defaults = []; @@ -185,7 +185,7 @@ public function addChild(NodeInterface $node): void throw new \InvalidArgumentException('Child nodes must be named.'); } if (isset($this->children[$name])) { - throw new \InvalidArgumentException(sprintf('A child node named "%s" already exists.', $name)); + throw new \InvalidArgumentException(\sprintf('A child node named "%s" already exists.', $name)); } $this->children[$name] = $node; @@ -198,15 +198,15 @@ public function addChild(NodeInterface $node): void protected function finalizeValue(mixed $value): mixed { if (false === $value) { - throw new UnsetKeyException(sprintf('Unsetting key for path "%s", value: %s.', $this->getPath(), json_encode($value))); + throw new UnsetKeyException(\sprintf('Unsetting key for path "%s", value: false.', $this->getPath())); } foreach ($this->children as $name => $child) { if (!\array_key_exists($name, $value)) { if ($child->isRequired()) { - $message = sprintf('The child config "%s" under "%s" must be configured', $name, $this->getPath()); + $message = \sprintf('The child config "%s" under "%s" must be configured', $name, $this->getPath()); if ($child->getInfo()) { - $message .= sprintf(': %s', $child->getInfo()); + $message .= \sprintf(': %s', $child->getInfo()); } else { $message .= '.'; } @@ -241,7 +241,7 @@ protected function finalizeValue(mixed $value): mixed protected function validateType(mixed $value): void { if (!\is_array($value) && (!$this->allowFalse || false !== $value)) { - $ex = new InvalidTypeException(sprintf('Invalid type for path "%s". Expected "array", but got "%s"', $this->getPath(), get_debug_type($value))); + $ex = new InvalidTypeException(\sprintf('Invalid type for path "%s". Expected "array", but got "%s"', $this->getPath(), get_debug_type($value))); if ($hint = $this->getInfo()) { $ex->addHint($hint); } @@ -292,13 +292,13 @@ protected function normalizeValue(mixed $value): mixed } } - $msg = sprintf('Unrecognized option%s "%s" under "%s"', 1 === \count($value) ? '' : 's', implode(', ', array_keys($value)), $this->getPath()); + $msg = \sprintf('Unrecognized option%s "%s" under "%s"', 1 === \count($value) ? '' : 's', implode(', ', array_keys($value)), $this->getPath()); if (\count($guesses)) { asort($guesses); - $msg .= sprintf('. Did you mean "%s"?', implode('", "', array_keys($guesses))); + $msg .= \sprintf('. Did you mean "%s"?', implode('", "', array_keys($guesses))); } else { - $msg .= sprintf('. Available option%s %s "%s".', 1 === \count($proposals) ? '' : 's', 1 === \count($proposals) ? 'is' : 'are', implode('", "', $proposals)); + $msg .= \sprintf('. Available option%s %s "%s".', 1 === \count($proposals) ? '' : 's', 1 === \count($proposals) ? 'is' : 'are', implode('", "', $proposals)); } $ex = new InvalidConfigurationException($msg); @@ -347,7 +347,7 @@ protected function mergeValues(mixed $leftSide, mixed $rightSide): mixed // no conflict if (!\array_key_exists($k, $leftSide)) { if (!$this->allowNewKeys) { - $ex = new InvalidConfigurationException(sprintf('You are not allowed to define new elements for path "%s". Please define all elements for this path in one config file. If you are trying to overwrite an element, make sure you redefine it with the same name.', $this->getPath())); + $ex = new InvalidConfigurationException(\sprintf('You are not allowed to define new elements for path "%s". Please define all elements for this path in one config file. If you are trying to overwrite an element, make sure you redefine it with the same name.', $this->getPath())); $ex->setPath($this->getPath()); throw $ex; diff --git a/app/vendor/symfony/config/Definition/BaseNode.php b/app/vendor/symfony/config/Definition/BaseNode.php index 180d59708..9cfd69239 100644 --- a/app/vendor/symfony/config/Definition/BaseNode.php +++ b/app/vendor/symfony/config/Definition/BaseNode.php @@ -285,7 +285,7 @@ public function getPath(): string final public function merge(mixed $leftSide, mixed $rightSide): mixed { if (!$this->allowOverwrite) { - throw new ForbiddenOverwriteException(sprintf('Configuration path "%s" cannot be overwritten. You have to define all options for this path, and any of its sub-paths in one configuration section.', $this->getPath())); + throw new ForbiddenOverwriteException(\sprintf('Configuration path "%s" cannot be overwritten. You have to define all options for this path, and any of its sub-paths in one configuration section.', $this->getPath())); } if ($leftSide !== $leftPlaceholders = self::resolvePlaceholderValue($leftSide)) { @@ -404,7 +404,7 @@ final public function finalize(mixed $value): mixed throw $e; } catch (\Exception $e) { - throw new InvalidConfigurationException(sprintf('Invalid configuration for path "%s": ', $this->getPath()).$e->getMessage(), $e->getCode(), $e); + throw new InvalidConfigurationException(\sprintf('Invalid configuration for path "%s": ', $this->getPath()).$e->getMessage(), $e->getCode(), $e); } } @@ -477,7 +477,7 @@ private static function resolvePlaceholderValue(mixed $value): mixed private function doValidateType(mixed $value): void { if (null !== $this->handlingPlaceholder && !$this->allowPlaceholders()) { - $e = new InvalidTypeException(sprintf('A dynamic value is not compatible with a "%s" node type at path "%s".', static::class, $this->getPath())); + $e = new InvalidTypeException(\sprintf('A dynamic value is not compatible with a "%s" node type at path "%s".', static::class, $this->getPath())); $e->setPath($this->getPath()); throw $e; @@ -493,7 +493,7 @@ private function doValidateType(mixed $value): void $validTypes = $this->getValidPlaceholderTypes(); if ($validTypes && array_diff($knownTypes, $validTypes)) { - $e = new InvalidTypeException(sprintf( + $e = new InvalidTypeException(\sprintf( 'Invalid type for path "%s". Expected %s, but got %s.', $this->getPath(), 1 === \count($validTypes) ? '"'.reset($validTypes).'"' : 'one of "'.implode('", "', $validTypes).'"', diff --git a/app/vendor/symfony/config/Definition/BooleanNode.php b/app/vendor/symfony/config/Definition/BooleanNode.php index f6ab5bfb1..b4ed0f0eb 100644 --- a/app/vendor/symfony/config/Definition/BooleanNode.php +++ b/app/vendor/symfony/config/Definition/BooleanNode.php @@ -20,10 +20,23 @@ */ class BooleanNode extends ScalarNode { + public function __construct( + ?string $name, + ?NodeInterface $parent = null, + string $pathSeparator = self::DEFAULT_PATH_SEPARATOR, + private bool $nullable = false, + ) { + parent::__construct($name, $parent, $pathSeparator); + } + protected function validateType(mixed $value): void { if (!\is_bool($value)) { - $ex = new InvalidTypeException(sprintf('Invalid type for path "%s". Expected "bool", but got "%s".', $this->getPath(), get_debug_type($value))); + if (null === $value && $this->nullable) { + return; + } + + $ex = new InvalidTypeException(\sprintf('Invalid type for path "%s". Expected "bool%s", but got "%s".', $this->getPath(), $this->nullable ? '" or "null' : '', get_debug_type($value))); if ($hint = $this->getInfo()) { $ex->addHint($hint); } diff --git a/app/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php b/app/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php index 4596151fb..6b75ba137 100644 --- a/app/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php +++ b/app/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php @@ -73,6 +73,11 @@ public function scalarPrototype(): ScalarNodeDefinition return $this->prototype('scalar'); } + public function stringPrototype(): StringNodeDefinition + { + return $this->prototype('string'); + } + public function booleanPrototype(): BooleanNodeDefinition { return $this->prototype('boolean'); @@ -371,7 +376,7 @@ protected function createNode(): NodeInterface if ($this->default) { if (!\is_array($this->defaultValue)) { - throw new \InvalidArgumentException(sprintf('%s: the default value of an array node has to be an array.', $node->getPath())); + throw new \InvalidArgumentException(\sprintf('%s: the default value of an array node has to be an array.', $node->getPath())); } $node->setDefaultValue($this->defaultValue); @@ -429,23 +434,23 @@ protected function validateConcreteNode(ArrayNode $node): void $path = $node->getPath(); if (null !== $this->key) { - throw new InvalidDefinitionException(sprintf('->useAttributeAsKey() is not applicable to concrete nodes at path "%s".', $path)); + throw new InvalidDefinitionException(\sprintf('->useAttributeAsKey() is not applicable to concrete nodes at path "%s".', $path)); } if (false === $this->allowEmptyValue) { - throw new InvalidDefinitionException(sprintf('->cannotBeEmpty() is not applicable to concrete nodes at path "%s".', $path)); + throw new InvalidDefinitionException(\sprintf('->cannotBeEmpty() is not applicable to concrete nodes at path "%s".', $path)); } if (true === $this->atLeastOne) { - throw new InvalidDefinitionException(sprintf('->requiresAtLeastOneElement() is not applicable to concrete nodes at path "%s".', $path)); + throw new InvalidDefinitionException(\sprintf('->requiresAtLeastOneElement() is not applicable to concrete nodes at path "%s".', $path)); } if ($this->default) { - throw new InvalidDefinitionException(sprintf('->defaultValue() is not applicable to concrete nodes at path "%s".', $path)); + throw new InvalidDefinitionException(\sprintf('->defaultValue() is not applicable to concrete nodes at path "%s".', $path)); } if (false !== $this->addDefaultChildren) { - throw new InvalidDefinitionException(sprintf('->addDefaultChildrenIfNoneSet() is not applicable to concrete nodes at path "%s".', $path)); + throw new InvalidDefinitionException(\sprintf('->addDefaultChildrenIfNoneSet() is not applicable to concrete nodes at path "%s".', $path)); } } @@ -459,20 +464,20 @@ protected function validatePrototypeNode(PrototypedArrayNode $node): void $path = $node->getPath(); if ($this->addDefaults) { - throw new InvalidDefinitionException(sprintf('->addDefaultsIfNotSet() is not applicable to prototype nodes at path "%s".', $path)); + throw new InvalidDefinitionException(\sprintf('->addDefaultsIfNotSet() is not applicable to prototype nodes at path "%s".', $path)); } if (false !== $this->addDefaultChildren) { if ($this->default) { - throw new InvalidDefinitionException(sprintf('A default value and default children might not be used together at path "%s".', $path)); + throw new InvalidDefinitionException(\sprintf('A default value and default children might not be used together at path "%s".', $path)); } if (null !== $this->key && (null === $this->addDefaultChildren || \is_int($this->addDefaultChildren) && $this->addDefaultChildren > 0)) { - throw new InvalidDefinitionException(sprintf('->addDefaultChildrenIfNoneSet() should set default children names as ->useAttributeAsKey() is used at path "%s".', $path)); + throw new InvalidDefinitionException(\sprintf('->addDefaultChildrenIfNoneSet() should set default children names as ->useAttributeAsKey() is used at path "%s".', $path)); } if (null === $this->key && (\is_string($this->addDefaultChildren) || \is_array($this->addDefaultChildren))) { - throw new InvalidDefinitionException(sprintf('->addDefaultChildrenIfNoneSet() might not set default children names as ->useAttributeAsKey() is not used at path "%s".', $path)); + throw new InvalidDefinitionException(\sprintf('->addDefaultChildrenIfNoneSet() might not set default children names as ->useAttributeAsKey() is not used at path "%s".', $path)); } } } @@ -497,7 +502,7 @@ public function find(string $nodePath): NodeDefinition : substr($nodePath, 0, $pathSeparatorPos); if (null === $node = ($this->children[$firstPathSegment] ?? null)) { - throw new \RuntimeException(sprintf('Node with name "%s" does not exist in the current node "%s".', $firstPathSegment, $this->name)); + throw new \RuntimeException(\sprintf('Node with name "%s" does not exist in the current node "%s".', $firstPathSegment, $this->name)); } if (false === $pathSeparatorPos) { diff --git a/app/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php b/app/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php index 15e63961a..bc03c9c94 100644 --- a/app/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php +++ b/app/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php @@ -33,7 +33,7 @@ public function __construct(?string $name, ?NodeParentInterface $parent = null) */ protected function instantiateNode(): BooleanNode { - return new BooleanNode($this->name, $this->parent, $this->pathSeparator); + return new BooleanNode($this->name, $this->parent, $this->pathSeparator, null === $this->nullEquivalent); } /** @@ -43,4 +43,20 @@ public function cannotBeEmpty(): static { throw new InvalidDefinitionException('->cannotBeEmpty() is not applicable to BooleanNodeDefinition.'); } + + public function defaultNull(): static + { + $this->nullEquivalent = null; + + return parent::defaultNull(); + } + + public function defaultValue(mixed $value): static + { + if (null === $value) { + $this->nullEquivalent = null; + } + + return parent::defaultValue($value); + } } diff --git a/app/vendor/symfony/config/Definition/Builder/ExprBuilder.php b/app/vendor/symfony/config/Definition/Builder/ExprBuilder.php index d391f8524..e802df2ee 100644 --- a/app/vendor/symfony/config/Definition/Builder/ExprBuilder.php +++ b/app/vendor/symfony/config/Definition/Builder/ExprBuilder.php @@ -194,7 +194,7 @@ public function thenEmptyArray(): static */ public function thenInvalid(string $message): static { - $this->thenPart = static fn ($v) => throw new \InvalidArgumentException(sprintf($message, json_encode($v))); + $this->thenPart = static fn ($v) => throw new \InvalidArgumentException(\sprintf($message, json_encode($v))); return $this; } diff --git a/app/vendor/symfony/config/Definition/Builder/NodeBuilder.php b/app/vendor/symfony/config/Definition/Builder/NodeBuilder.php index d79075a91..b3fa7bfd5 100644 --- a/app/vendor/symfony/config/Definition/Builder/NodeBuilder.php +++ b/app/vendor/symfony/config/Definition/Builder/NodeBuilder.php @@ -31,6 +31,7 @@ public function __construct() 'float' => FloatNodeDefinition::class, 'array' => ArrayNodeDefinition::class, 'enum' => EnumNodeDefinition::class, + 'string' => StringNodeDefinition::class, ]; } @@ -102,6 +103,14 @@ public function variableNode(string $name): VariableNodeDefinition return $this->node($name, 'variable'); } + /** + * Creates a child string node. + */ + public function stringNode(string $name): StringNodeDefinition + { + return $this->node($name, 'string'); + } + /** * Returns the parent node. */ @@ -185,13 +194,13 @@ protected function getNodeClass(string $type): string $type = strtolower($type); if (!isset($this->nodeMapping[$type])) { - throw new \RuntimeException(sprintf('The node type "%s" is not registered.', $type)); + throw new \RuntimeException(\sprintf('The node type "%s" is not registered.', $type)); } $class = $this->nodeMapping[$type]; if (!class_exists($class)) { - throw new \RuntimeException(sprintf('The node class "%s" does not exist.', $class)); + throw new \RuntimeException(\sprintf('The node class "%s" does not exist.', $class)); } return $class; diff --git a/app/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php b/app/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php index 41129a2ff..06dc97994 100644 --- a/app/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php +++ b/app/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php @@ -33,7 +33,7 @@ abstract class NumericNodeDefinition extends ScalarNodeDefinition public function max(int|float $max): static { if (isset($this->min) && $this->min > $max) { - throw new \InvalidArgumentException(sprintf('You cannot define a max(%s) as you already have a min(%s).', $max, $this->min)); + throw new \InvalidArgumentException(\sprintf('You cannot define a max(%s) as you already have a min(%s).', $max, $this->min)); } $this->max = $max; @@ -50,7 +50,7 @@ public function max(int|float $max): static public function min(int|float $min): static { if (isset($this->max) && $this->max < $min) { - throw new \InvalidArgumentException(sprintf('You cannot define a min(%s) as you already have a max(%s).', $min, $this->max)); + throw new \InvalidArgumentException(\sprintf('You cannot define a min(%s) as you already have a max(%s).', $min, $this->max)); } $this->min = $min; diff --git a/app/vendor/symfony/config/Definition/Builder/StringNodeDefinition.php b/app/vendor/symfony/config/Definition/Builder/StringNodeDefinition.php new file mode 100644 index 000000000..c86f1bfd7 --- /dev/null +++ b/app/vendor/symfony/config/Definition/Builder/StringNodeDefinition.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Builder; + +use Symfony\Component\Config\Definition\StringNode; + +/** + * This class provides a fluent interface for defining a node. + * + * @author Raffaele Carelle + */ +class StringNodeDefinition extends ScalarNodeDefinition +{ + public function __construct(?string $name, ?NodeParentInterface $parent = null) + { + parent::__construct($name, $parent); + + $this->nullEquivalent = ''; + } + + protected function instantiateNode(): StringNode + { + return new StringNode($this->name, $this->parent, $this->pathSeparator); + } +} diff --git a/app/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php b/app/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php index dd6f76c73..2131c7131 100644 --- a/app/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php +++ b/app/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php @@ -145,7 +145,7 @@ private function writeNode(NodeInterface $node, int $depth = 0, bool $root = fal if ($child instanceof BaseNode && $child->isDeprecated()) { $deprecation = $child->getDeprecation($child->getName(), $node->getPath()); - $comments[] = sprintf('Deprecated (%s)', ($deprecation['package'] || $deprecation['version'] ? "Since {$deprecation['package']} {$deprecation['version']}: " : '').$deprecation['message']); + $comments[] = \sprintf('Deprecated (%s)', ($deprecation['package'] || $deprecation['version'] ? "Since {$deprecation['package']} {$deprecation['version']}: " : '').$deprecation['message']); } if ($child instanceof EnumNode) { @@ -199,7 +199,7 @@ private function writeNode(NodeInterface $node, int $depth = 0, bool $root = fal $rootOpenTag = '<'.$rootName; if (1 >= ($attributesCount = \count($rootAttributes))) { if (1 === $attributesCount) { - $rootOpenTag .= sprintf(' %s="%s"', current(array_keys($rootAttributes)), $this->writeValue(current($rootAttributes))); + $rootOpenTag .= \sprintf(' %s="%s"', current(array_keys($rootAttributes)), $this->writeValue(current($rootAttributes))); } $rootOpenTag .= $rootIsEmptyTag ? ' />' : '>'; @@ -215,7 +215,7 @@ private function writeNode(NodeInterface $node, int $depth = 0, bool $root = fal $i = 1; foreach ($rootAttributes as $attrName => $attrValue) { - $attr = sprintf('%s="%s"', $attrName, $this->writeValue($attrValue)); + $attr = \sprintf('%s="%s"', $attrName, $this->writeValue($attrValue)); $this->writeLine($attr, $depth + 4); @@ -252,7 +252,7 @@ private function writeLine(string $text, int $indent = 0): void $indent = \strlen($text) + $indent; $format = '%'.$indent.'s'; - $this->reference .= sprintf($format, $text).\PHP_EOL; + $this->reference .= \sprintf($format, $text).\PHP_EOL; } /** diff --git a/app/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php b/app/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php index e8d7f5cfa..267444d92 100644 --- a/app/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php +++ b/app/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php @@ -40,7 +40,7 @@ public function dumpAtPath(ConfigurationInterface $configuration, string $path): foreach (explode('.', $path) as $step) { if (!$node instanceof ArrayNode) { - throw new \UnexpectedValueException(sprintf('Unable to find node at path "%s.%s".', $rootNode->getName(), $path)); + throw new \UnexpectedValueException(\sprintf('Unable to find node at path "%s.%s".', $rootNode->getName(), $path)); } /** @var NodeInterface[] $children */ @@ -54,7 +54,7 @@ public function dumpAtPath(ConfigurationInterface $configuration, string $path): } } - throw new \UnexpectedValueException(sprintf('Unable to find node at path "%s.%s".', $rootNode->getName(), $path)); + throw new \UnexpectedValueException(\sprintf('Unable to find node at path "%s.%s".', $rootNode->getName(), $path)); } return $this->dumpNode($node); @@ -121,7 +121,7 @@ private function writeNode(NodeInterface $node, ?NodeInterface $parentNode = nul // deprecated? if ($node instanceof BaseNode && $node->isDeprecated()) { $deprecation = $node->getDeprecation($node->getName(), $parentNode ? $parentNode->getPath() : $node->getPath()); - $comments[] = sprintf('Deprecated (%s)', ($deprecation['package'] || $deprecation['version'] ? "Since {$deprecation['package']} {$deprecation['version']}: " : '').$deprecation['message']); + $comments[] = \sprintf('Deprecated (%s)', ($deprecation['package'] || $deprecation['version'] ? "Since {$deprecation['package']} {$deprecation['version']}: " : '').$deprecation['message']); } // example @@ -133,12 +133,12 @@ private function writeNode(NodeInterface $node, ?NodeInterface $parentNode = nul $comments = \count($comments) ? '# '.implode(', ', $comments) : ''; $key = $prototypedArray ? '-' : $node->getName().':'; - $text = rtrim(sprintf('%-21s%s %s', $key, $default, $comments), ' '); + $text = rtrim(\sprintf('%-21s%s %s', $key, $default, $comments), ' '); if ($node instanceof BaseNode && $info = $node->getInfo()) { $this->writeLine(''); // indenting multi-line info - $info = str_replace("\n", sprintf("\n%".($depth * 4).'s# ', ' '), $info); + $info = str_replace("\n", \sprintf("\n%".($depth * 4).'s# ', ' '), $info); $this->writeLine('# '.$info, $depth * 4); } @@ -180,7 +180,7 @@ private function writeLine(string $text, int $indent = 0): void $indent = \strlen($text) + $indent; $format = '%'.$indent.'s'; - $this->reference .= sprintf($format, $text)."\n"; + $this->reference .= \sprintf($format, $text)."\n"; } private function writeArray(array $array, int $depth, bool $asComment = false): void @@ -193,14 +193,13 @@ private function writeArray(array $array, int $depth, bool $asComment = false): } else { $val = $value; } - $prefix = $asComment ? '# ' : ''; $prefix = $asComment ? '# ' : ''; if ($isIndexed) { $this->writeLine($prefix.'- '.$val, $depth * 4); } else { - $this->writeLine(sprintf('%s%-20s %s', $prefix, $key.':', $val), $depth * 4); + $this->writeLine(\sprintf('%s%-20s %s', $prefix, $key.':', $val), $depth * 4); } if (\is_array($value)) { diff --git a/app/vendor/symfony/config/Definition/EnumNode.php b/app/vendor/symfony/config/Definition/EnumNode.php index 29fe0bdfb..b253406c8 100644 --- a/app/vendor/symfony/config/Definition/EnumNode.php +++ b/app/vendor/symfony/config/Definition/EnumNode.php @@ -34,11 +34,11 @@ public function __construct(?string $name, ?NodeInterface $parent = null, array } if (!$value instanceof \UnitEnum) { - throw new \InvalidArgumentException(sprintf('"%s" only supports scalar, enum, or null values, "%s" given.', __CLASS__, get_debug_type($value))); + throw new \InvalidArgumentException(\sprintf('"%s" only supports scalar, enum, or null values, "%s" given.', __CLASS__, get_debug_type($value))); } if ($value::class !== ($enumClass ??= $value::class)) { - throw new \InvalidArgumentException(sprintf('"%s" only supports one type of enum, "%s" and "%s" passed.', __CLASS__, $enumClass, $value::class)); + throw new \InvalidArgumentException(\sprintf('"%s" only supports one type of enum, "%s" and "%s" passed.', __CLASS__, $enumClass, $value::class)); } } @@ -79,7 +79,7 @@ protected function finalizeValue(mixed $value): mixed $value = parent::finalizeValue($value); if (!\in_array($value, $this->values, true)) { - $ex = new InvalidConfigurationException(sprintf('The value %s is not allowed for path "%s". Permissible values: %s', json_encode($value), $this->getPath(), $this->getPermissibleValues(', '))); + $ex = new InvalidConfigurationException(\sprintf('The value %s is not allowed for path "%s". Permissible values: %s', json_encode($value), $this->getPath(), $this->getPermissibleValues(', '))); $ex->setPath($this->getPath()); throw $ex; diff --git a/app/vendor/symfony/config/Definition/FloatNode.php b/app/vendor/symfony/config/Definition/FloatNode.php index 1023a1674..8b922804b 100644 --- a/app/vendor/symfony/config/Definition/FloatNode.php +++ b/app/vendor/symfony/config/Definition/FloatNode.php @@ -28,7 +28,7 @@ protected function validateType(mixed $value): void } if (!\is_float($value)) { - $ex = new InvalidTypeException(sprintf('Invalid type for path "%s". Expected "float", but got "%s".', $this->getPath(), get_debug_type($value))); + $ex = new InvalidTypeException(\sprintf('Invalid type for path "%s". Expected "float", but got "%s".', $this->getPath(), get_debug_type($value))); if ($hint = $this->getInfo()) { $ex->addHint($hint); } diff --git a/app/vendor/symfony/config/Definition/IntegerNode.php b/app/vendor/symfony/config/Definition/IntegerNode.php index 3fe70f621..6fa3e6032 100644 --- a/app/vendor/symfony/config/Definition/IntegerNode.php +++ b/app/vendor/symfony/config/Definition/IntegerNode.php @@ -23,7 +23,7 @@ class IntegerNode extends NumericNode protected function validateType(mixed $value): void { if (!\is_int($value)) { - $ex = new InvalidTypeException(sprintf('Invalid type for path "%s". Expected "int", but got "%s".', $this->getPath(), get_debug_type($value))); + $ex = new InvalidTypeException(\sprintf('Invalid type for path "%s". Expected "int", but got "%s".', $this->getPath(), get_debug_type($value))); if ($hint = $this->getInfo()) { $ex->addHint($hint); } diff --git a/app/vendor/symfony/config/Definition/Loader/DefinitionFileLoader.php b/app/vendor/symfony/config/Definition/Loader/DefinitionFileLoader.php index 940b894f7..09147f791 100644 --- a/app/vendor/symfony/config/Definition/Loader/DefinitionFileLoader.php +++ b/app/vendor/symfony/config/Definition/Loader/DefinitionFileLoader.php @@ -81,7 +81,7 @@ private function executeCallback(callable $callback, DefinitionConfigurator $con $reflectionType = $parameter->getType(); if (!$reflectionType instanceof \ReflectionNamedType) { - throw new \InvalidArgumentException(sprintf('Could not resolve argument "$%s" for "%s". You must typehint it (for example with "%s").', $parameter->getName(), $path, DefinitionConfigurator::class)); + throw new \InvalidArgumentException(\sprintf('Could not resolve argument "$%s" for "%s". You must typehint it (for example with "%s").', $parameter->getName(), $path, DefinitionConfigurator::class)); } $arguments[] = match ($reflectionType->getName()) { diff --git a/app/vendor/symfony/config/Definition/NumericNode.php b/app/vendor/symfony/config/Definition/NumericNode.php index b55ee922b..a97850c9d 100644 --- a/app/vendor/symfony/config/Definition/NumericNode.php +++ b/app/vendor/symfony/config/Definition/NumericNode.php @@ -20,14 +20,14 @@ */ class NumericNode extends ScalarNode { - protected int|float|null $min; - protected int|float|null $max; - - public function __construct(?string $name, ?NodeInterface $parent = null, int|float|null $min = null, int|float|null $max = null, string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR) - { + public function __construct( + ?string $name, + ?NodeInterface $parent = null, + protected int|float|null $min = null, + protected int|float|null $max = null, + string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR, + ) { parent::__construct($name, $parent, $pathSeparator); - $this->min = $min; - $this->max = $max; } protected function finalizeValue(mixed $value): mixed @@ -36,10 +36,10 @@ protected function finalizeValue(mixed $value): mixed $errorMsg = null; if (isset($this->min) && $value < $this->min) { - $errorMsg = sprintf('The value %s is too small for path "%s". Should be greater than or equal to %s', $value, $this->getPath(), $this->min); + $errorMsg = \sprintf('The value %s is too small for path "%s". Should be greater than or equal to %s', $value, $this->getPath(), $this->min); } if (isset($this->max) && $value > $this->max) { - $errorMsg = sprintf('The value %s is too big for path "%s". Should be less than or equal to %s', $value, $this->getPath(), $this->max); + $errorMsg = \sprintf('The value %s is too big for path "%s". Should be less than or equal to %s', $value, $this->getPath(), $this->max); } if (isset($errorMsg)) { $ex = new InvalidConfigurationException($errorMsg); diff --git a/app/vendor/symfony/config/Definition/PrototypedArrayNode.php b/app/vendor/symfony/config/Definition/PrototypedArrayNode.php index a11e72638..a901dab78 100644 --- a/app/vendor/symfony/config/Definition/PrototypedArrayNode.php +++ b/app/vendor/symfony/config/Definition/PrototypedArrayNode.php @@ -156,7 +156,7 @@ public function addChild(NodeInterface $node): never protected function finalizeValue(mixed $value): mixed { if (false === $value) { - throw new UnsetKeyException(sprintf('Unsetting key for path "%s", value: %s.', $this->getPath(), json_encode($value))); + throw new UnsetKeyException(\sprintf('Unsetting key for path "%s", value: false.', $this->getPath())); } foreach ($value as $k => $v) { @@ -169,7 +169,7 @@ protected function finalizeValue(mixed $value): mixed } if (\count($value) < $this->minNumberOfElements) { - $ex = new InvalidConfigurationException(sprintf('The path "%s" should have at least %d element(s) defined.', $this->getPath(), $this->minNumberOfElements)); + $ex = new InvalidConfigurationException(\sprintf('The path "%s" should have at least %d element(s) defined.', $this->getPath(), $this->minNumberOfElements)); $ex->setPath($this->getPath()); throw $ex; @@ -194,7 +194,7 @@ protected function normalizeValue(mixed $value): mixed foreach ($value as $k => $v) { if (null !== $this->keyAttribute && \is_array($v)) { if (!isset($v[$this->keyAttribute]) && \is_int($k) && $isList) { - $ex = new InvalidConfigurationException(sprintf('The attribute "%s" must be set for path "%s".', $this->keyAttribute, $this->getPath())); + $ex = new InvalidConfigurationException(\sprintf('The attribute "%s" must be set for path "%s".', $this->keyAttribute, $this->getPath())); $ex->setPath($this->getPath()); throw $ex; @@ -217,17 +217,15 @@ protected function normalizeValue(mixed $value): mixed $valuePrototype = current($this->valuePrototypes) ?: clone $children['value']; $valuePrototype->parent = $this; $originalClosures = $this->prototype->normalizationClosures; - if (\is_array($originalClosures)) { - $valuePrototypeClosures = $valuePrototype->normalizationClosures; - $valuePrototype->normalizationClosures = \is_array($valuePrototypeClosures) ? array_merge($originalClosures, $valuePrototypeClosures) : $originalClosures; - } + $valuePrototypeClosures = $valuePrototype->normalizationClosures; + $valuePrototype->normalizationClosures = array_merge($originalClosures, $valuePrototypeClosures); $this->valuePrototypes[$k] = $valuePrototype; } } } if (\array_key_exists($k, $normalized)) { - $ex = new DuplicateKeyException(sprintf('Duplicate key "%s" for path "%s".', $k, $this->getPath())); + $ex = new DuplicateKeyException(\sprintf('Duplicate key "%s" for path "%s".', $k, $this->getPath())); $ex->setPath($this->getPath()); throw $ex; @@ -268,7 +266,7 @@ protected function mergeValues(mixed $leftSide, mixed $rightSide): mixed // no conflict if (!\array_key_exists($k, $leftSide)) { if (!$this->allowNewKeys) { - $ex = new InvalidConfigurationException(sprintf('You are not allowed to define new elements for path "%s". Please define all elements for this path in one config file.', $this->getPath())); + $ex = new InvalidConfigurationException(\sprintf('You are not allowed to define new elements for path "%s". Please define all elements for this path in one config file.', $this->getPath())); $ex->setPath($this->getPath()); throw $ex; diff --git a/app/vendor/symfony/config/Definition/ScalarNode.php b/app/vendor/symfony/config/Definition/ScalarNode.php index a7ccb917c..341769249 100644 --- a/app/vendor/symfony/config/Definition/ScalarNode.php +++ b/app/vendor/symfony/config/Definition/ScalarNode.php @@ -30,7 +30,7 @@ class ScalarNode extends VariableNode protected function validateType(mixed $value): void { if (!\is_scalar($value) && null !== $value) { - $ex = new InvalidTypeException(sprintf('Invalid type for path "%s". Expected "scalar", but got "%s".', $this->getPath(), get_debug_type($value))); + $ex = new InvalidTypeException(\sprintf('Invalid type for path "%s". Expected "scalar", but got "%s".', $this->getPath(), get_debug_type($value))); if ($hint = $this->getInfo()) { $ex->addHint($hint); } diff --git a/app/vendor/symfony/config/Definition/StringNode.php b/app/vendor/symfony/config/Definition/StringNode.php new file mode 100644 index 000000000..6687b8825 --- /dev/null +++ b/app/vendor/symfony/config/Definition/StringNode.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 Symfony\Component\Config\Definition; + +use Symfony\Component\Config\Definition\Exception\InvalidTypeException; + +/** + * This node represents a String value in the config tree. + * + * @author Raffaele Carelle + */ +class StringNode extends ScalarNode +{ + protected function validateType(mixed $value): void + { + if (!\is_string($value)) { + $ex = new InvalidTypeException(\sprintf('Invalid type for path "%s". Expected "string", but got "%s".', $this->getPath(), get_debug_type($value))); + if ($hint = $this->getInfo()) { + $ex->addHint($hint); + } + $ex->setPath($this->getPath()); + + throw $ex; + } + } + + protected function getValidPlaceholderTypes(): array + { + return ['string']; + } +} diff --git a/app/vendor/symfony/config/Definition/VariableNode.php b/app/vendor/symfony/config/Definition/VariableNode.php index 22c28500f..ed1b903a1 100644 --- a/app/vendor/symfony/config/Definition/VariableNode.php +++ b/app/vendor/symfony/config/Definition/VariableNode.php @@ -69,7 +69,7 @@ protected function finalizeValue(mixed $value): mixed // deny environment variables only when using custom validators // this avoids ever passing an empty value to final validation closures if (!$this->allowEmptyValue && $this->isHandlingPlaceholder() && $this->finalValidationClosures) { - $e = new InvalidConfigurationException(sprintf('The path "%s" cannot contain an environment variable when empty values are not allowed by definition and are validated.', $this->getPath())); + $e = new InvalidConfigurationException(\sprintf('The path "%s" cannot contain an environment variable when empty values are not allowed by definition and are validated.', $this->getPath())); if ($hint = $this->getInfo()) { $e->addHint($hint); } @@ -79,7 +79,7 @@ protected function finalizeValue(mixed $value): mixed } if (!$this->allowEmptyValue && $this->isValueEmpty($value)) { - $ex = new InvalidConfigurationException(sprintf('The path "%s" cannot contain an empty value, but got %s.', $this->getPath(), json_encode($value))); + $ex = new InvalidConfigurationException(\sprintf('The path "%s" cannot contain an empty value, but got %s.', $this->getPath(), json_encode($value))); if ($hint = $this->getInfo()) { $ex->addHint($hint); } diff --git a/app/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php b/app/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php index 2d2a4de00..d39bde046 100644 --- a/app/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php +++ b/app/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php @@ -20,7 +20,7 @@ class FileLoaderImportCircularReferenceException extends LoaderLoadException { public function __construct(array $resources, int $code = 0, ?\Throwable $previous = null) { - $message = sprintf('Circular reference detected in "%s" ("%s" > "%s").', $this->varToString($resources[0]), implode('" > "', $resources), $resources[0]); + $message = \sprintf('Circular reference detected in "%s" ("%s" > "%s").', $this->varToString($resources[0]), implode('" > "', $resources), $resources[0]); \Exception::__construct($message, $code, $previous); } diff --git a/app/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php b/app/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php index 5641a3145..d9e5b4f36 100644 --- a/app/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php +++ b/app/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php @@ -18,13 +18,13 @@ */ class FileLocatorFileNotFoundException extends \InvalidArgumentException { - private array $paths; - - public function __construct(string $message = '', int $code = 0, ?\Throwable $previous = null, array $paths = []) - { + public function __construct( + string $message = '', + int $code = 0, + ?\Throwable $previous = null, + private array $paths = [], + ) { parent::__construct($message, $code, $previous); - - $this->paths = $paths; } public function getPaths(): array diff --git a/app/vendor/symfony/config/Exception/LoaderLoadException.php b/app/vendor/symfony/config/Exception/LoaderLoadException.php index a2d5e33c7..ce486a35f 100644 --- a/app/vendor/symfony/config/Exception/LoaderLoadException.php +++ b/app/vendor/symfony/config/Exception/LoaderLoadException.php @@ -31,7 +31,7 @@ public function __construct(mixed $resource, ?string $sourceResource = null, int try { $resource = json_encode($resource, \JSON_THROW_ON_ERROR); } catch (\JsonException) { - $resource = sprintf('resource of type "%s"', get_debug_type($resource)); + $resource = \sprintf('resource of type "%s"', get_debug_type($resource)); } } @@ -42,35 +42,35 @@ public function __construct(mixed $resource, ?string $sourceResource = null, int // Trim the trailing period of the previous message. We only want 1 period remove so no rtrim... if (str_ends_with($previous->getMessage(), '.')) { $trimmedMessage = substr($previous->getMessage(), 0, -1); - $message .= sprintf('%s', $trimmedMessage).' in '; + $message .= \sprintf('%s', $trimmedMessage).' in '; } else { - $message .= sprintf('%s', $previous->getMessage()).' in '; + $message .= \sprintf('%s', $previous->getMessage()).' in '; } $message .= $resource.' '; // show tweaked trace to complete the human readable sentence if (null === $sourceResource) { - $message .= sprintf('(which is loaded in resource "%s")', $resource); + $message .= \sprintf('(which is loaded in resource "%s")', $resource); } else { - $message .= sprintf('(which is being imported from "%s")', $sourceResource); + $message .= \sprintf('(which is being imported from "%s")', $sourceResource); } $message .= '.'; // if there's no previous message, present it the default way } elseif (null === $sourceResource) { - $message .= sprintf('Cannot load resource "%s".', $resource); + $message .= \sprintf('Cannot load resource "%s".', $resource); } else { - $message .= sprintf('Cannot import resource "%s" from "%s".', $resource, $sourceResource); + $message .= \sprintf('Cannot import resource "%s" from "%s".', $resource, $sourceResource); } // Is the resource located inside a bundle? if ('@' === $resource[0]) { $parts = explode(\DIRECTORY_SEPARATOR, $resource); $bundle = substr($parts[0], 1); - $message .= sprintf(' Make sure the "%s" bundle is correctly registered and loaded in the application kernel class.', $bundle); - $message .= sprintf(' If the bundle is registered, make sure the bundle path "%s" is not empty.', $resource); + $message .= \sprintf(' Make sure the "%s" bundle is correctly registered and loaded in the application kernel class.', $bundle); + $message .= \sprintf(' If the bundle is registered, make sure the bundle path "%s" is not empty.', $resource); } elseif (null !== $type) { - $message .= sprintf(' Make sure there is a loader supporting the "%s" type.', $type); + $message .= \sprintf(' Make sure there is a loader supporting the "%s" type.', $type); } parent::__construct($message, $code, $previous); @@ -79,20 +79,20 @@ public function __construct(mixed $resource, ?string $sourceResource = null, int protected function varToString(mixed $var): string { if (\is_object($var)) { - return sprintf('Object(%s)', $var::class); + return \sprintf('Object(%s)', $var::class); } if (\is_array($var)) { $a = []; foreach ($var as $k => $v) { - $a[] = sprintf('%s => %s', $k, $this->varToString($v)); + $a[] = \sprintf('%s => %s', $k, $this->varToString($v)); } - return sprintf('Array(%s)', implode(', ', $a)); + return \sprintf('Array(%s)', implode(', ', $a)); } if (\is_resource($var)) { - return sprintf('Resource(%s)', get_resource_type($var)); + return \sprintf('Resource(%s)', get_resource_type($var)); } if (null === $var) { diff --git a/app/vendor/symfony/config/FileLocator.php b/app/vendor/symfony/config/FileLocator.php index ed8f01447..3a5064edc 100644 --- a/app/vendor/symfony/config/FileLocator.php +++ b/app/vendor/symfony/config/FileLocator.php @@ -43,7 +43,7 @@ public function locate(string $name, ?string $currentPath = null, bool $first = if ($this->isAbsolutePath($name)) { if (!file_exists($name)) { - throw new FileLocatorFileNotFoundException(sprintf('The file "%s" does not exist.', $name), 0, null, [$name]); + throw new FileLocatorFileNotFoundException(\sprintf('The file "%s" does not exist.', $name), 0, null, [$name]); } return $name; @@ -70,7 +70,7 @@ public function locate(string $name, ?string $currentPath = null, bool $first = } if (!$filepaths) { - throw new FileLocatorFileNotFoundException(sprintf('The file "%s" does not exist (in: "%s").', $name, implode('", "', $paths)), 0, null, $notfound); + throw new FileLocatorFileNotFoundException(\sprintf('The file "%s" does not exist (in: "%s").', $name, implode('", "', $paths)), 0, null, $notfound); } return $filepaths; diff --git a/app/vendor/symfony/config/Loader/FileLoader.php b/app/vendor/symfony/config/Loader/FileLoader.php index c217cd85b..8d9d84627 100644 --- a/app/vendor/symfony/config/Loader/FileLoader.php +++ b/app/vendor/symfony/config/Loader/FileLoader.php @@ -27,13 +27,12 @@ abstract class FileLoader extends Loader { protected static array $loading = []; - protected FileLocatorInterface $locator; - private ?string $currentDir = null; - public function __construct(FileLocatorInterface $locator, ?string $env = null) - { - $this->locator = $locator; + public function __construct( + protected FileLocatorInterface $locator, + ?string $env = null, + ) { parent::__construct($env); } diff --git a/app/vendor/symfony/config/Resource/ClassExistenceResource.php b/app/vendor/symfony/config/Resource/ClassExistenceResource.php index e2175b9ba..e7851740c 100644 --- a/app/vendor/symfony/config/Resource/ClassExistenceResource.php +++ b/app/vendor/symfony/config/Resource/ClassExistenceResource.php @@ -158,10 +158,10 @@ public static function throwOnRequiredClass(string $class, ?\Exception $previous throw $previous; } - $message = sprintf('Class "%s" not found.', $class); + $message = \sprintf('Class "%s" not found.', $class); if ($class !== (self::$autoloadedClass ?? $class)) { - $message = substr_replace($message, sprintf(' while loading "%s"', self::$autoloadedClass), -1, 0); + $message = substr_replace($message, \sprintf(' while loading "%s"', self::$autoloadedClass), -1, 0); } if (null !== $previous) { diff --git a/app/vendor/symfony/config/Resource/DirectoryResource.php b/app/vendor/symfony/config/Resource/DirectoryResource.php index 372a895c1..5fd5f65c9 100644 --- a/app/vendor/symfony/config/Resource/DirectoryResource.php +++ b/app/vendor/symfony/config/Resource/DirectoryResource.php @@ -35,7 +35,7 @@ public function __construct( $resolvedResource = realpath($resource) ?: (file_exists($resource) ? $resource : false); if (false === $resolvedResource || !is_dir($resolvedResource)) { - throw new \InvalidArgumentException(sprintf('The directory "%s" does not exist.', $resource)); + throw new \InvalidArgumentException(\sprintf('The directory "%s" does not exist.', $resource)); } $this->resource = $resolvedResource; diff --git a/app/vendor/symfony/config/Resource/FileResource.php b/app/vendor/symfony/config/Resource/FileResource.php index 6e8f9bdb3..44e5bbc57 100644 --- a/app/vendor/symfony/config/Resource/FileResource.php +++ b/app/vendor/symfony/config/Resource/FileResource.php @@ -34,7 +34,7 @@ public function __construct(string $resource) $resolvedResource = realpath($resource) ?: (file_exists($resource) ? $resource : false); if (false === $resolvedResource) { - throw new \InvalidArgumentException(sprintf('The file "%s" does not exist.', $resource)); + throw new \InvalidArgumentException(\sprintf('The file "%s" does not exist.', $resource)); } $this->resource = $resolvedResource; diff --git a/app/vendor/symfony/config/Resource/GlobResource.php b/app/vendor/symfony/config/Resource/GlobResource.php index 1cc627b21..e6a348e11 100644 --- a/app/vendor/symfony/config/Resource/GlobResource.php +++ b/app/vendor/symfony/config/Resource/GlobResource.php @@ -52,7 +52,7 @@ public function __construct( $this->globBrace = \defined('GLOB_BRACE') ? \GLOB_BRACE : 0; if (false === $resolvedPrefix) { - throw new \InvalidArgumentException(sprintf('The path "%s" does not exist.', $prefix)); + throw new \InvalidArgumentException(\sprintf('The path "%s" does not exist.', $prefix)); } $this->prefix = $resolvedPrefix; diff --git a/app/vendor/symfony/config/Resource/ReflectionClassResource.php b/app/vendor/symfony/config/Resource/ReflectionClassResource.php index dbc927b59..e039329ca 100644 --- a/app/vendor/symfony/config/Resource/ReflectionClassResource.php +++ b/app/vendor/symfony/config/Resource/ReflectionClassResource.php @@ -23,14 +23,14 @@ class ReflectionClassResource implements SelfCheckingResourceInterface { private array $files = []; private string $className; - private \ReflectionClass $classReflector; private array $excludedVendors = []; private string $hash; - public function __construct(\ReflectionClass $classReflector, array $excludedVendors = []) - { + public function __construct( + private \ReflectionClass $classReflector, + array $excludedVendors = [], + ) { $this->className = $classReflector->name; - $this->classReflector = $classReflector; $this->excludedVendors = $excludedVendors; } @@ -81,7 +81,7 @@ private function loadFiles(\ReflectionClass $class): void $file = $class->getFileName(); if (false !== $file && is_file($file)) { foreach ($this->excludedVendors as $vendor) { - if (str_starts_with($file, $vendor) && false !== strpbrk(substr($file, \strlen($vendor), 1), '/'.\DIRECTORY_SEPARATOR)) { + if (\in_array($file[\strlen($vendor)] ?? '', ['/', \DIRECTORY_SEPARATOR], true) && str_starts_with($file, $vendor)) { $file = false; break; } @@ -154,6 +154,13 @@ private function generateSignature(\ReflectionClass $class): iterable } foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) as $m) { + foreach ($this->excludedVendors as $vendor) { + $file = $m->getFileName(); + if (\in_array($file[\strlen($vendor)] ?? '', ['/', \DIRECTORY_SEPARATOR], true) && str_starts_with($file, $vendor)) { + continue 2; + } + } + foreach ($m->getAttributes() as $a) { $attributes[] = [$a->getName(), (string) $a]; } diff --git a/app/vendor/symfony/config/Resource/SkippingResourceChecker.php b/app/vendor/symfony/config/Resource/SkippingResourceChecker.php new file mode 100644 index 000000000..0f0934c82 --- /dev/null +++ b/app/vendor/symfony/config/Resource/SkippingResourceChecker.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Resource; + +use Symfony\Component\Config\ResourceCheckerInterface; + +class SkippingResourceChecker implements ResourceCheckerInterface +{ + private array $skippedResourceTypes; + + /** + * @param class-string[] $skippedResourceTypes + */ + public function __construct(array $skippedResourceTypes = []) + { + $this->skippedResourceTypes = array_flip($skippedResourceTypes); + } + + public function supports(ResourceInterface $metadata): bool + { + return !$this->skippedResourceTypes || isset($this->skippedResourceTypes[$metadata::class]); + } + + public function isFresh(ResourceInterface $resource, int $timestamp): bool + { + return true; + } +} diff --git a/app/vendor/symfony/config/ResourceCheckerConfigCache.php b/app/vendor/symfony/config/ResourceCheckerConfigCache.php index b7307489c..c201a3dcb 100644 --- a/app/vendor/symfony/config/ResourceCheckerConfigCache.php +++ b/app/vendor/symfony/config/ResourceCheckerConfigCache.php @@ -118,12 +118,26 @@ public function write(string $content, ?array $metadata = null): void } if (null !== $metadata) { - $filesystem->dumpFile($this->metaFile, serialize($metadata)); + $filesystem->dumpFile($this->metaFile, $ser = serialize($metadata)); try { $filesystem->chmod($this->metaFile, $mode, $umask); } catch (IOException) { // discard chmod failure (some filesystem may not support it) } + + $ser = preg_replace_callback('/;O:(\d+):"/', static fn ($m) => ';O:'.(9 + $m[1]).':"Tracking\\', $ser); + $ser = preg_replace_callback('/s:(\d+):"\0[^\0]++\0/', static fn ($m) => 's:'.($m[1] - \strlen($m[0]) + 6).':"', $ser); + $ser = unserialize($ser); + $ser = @json_encode($ser) ?: []; + $ser = str_replace('"__PHP_Incomplete_Class_Name":"Tracking\\\\', '"@type":"', $ser); + $ser = \sprintf('{"resources":%s}', $ser); + + $filesystem->dumpFile($this->metaFile.'.json', $ser); + try { + $filesystem->chmod($this->metaFile.'.json', $mode, $umask); + } catch (IOException) { + // discard chmod failure (some filesystem may not support it) + } } if (\function_exists('opcache_invalidate') && filter_var(\ini_get('opcache.enable'), \FILTER_VALIDATE_BOOL)) { diff --git a/app/vendor/symfony/config/Util/XmlUtils.php b/app/vendor/symfony/config/Util/XmlUtils.php index a7a43555b..02ebe7dbe 100644 --- a/app/vendor/symfony/config/Util/XmlUtils.php +++ b/app/vendor/symfony/config/Util/XmlUtils.php @@ -80,12 +80,12 @@ public static function parse(string $content, string|callable|null $schemaOrCall $valid = false; } } elseif (is_file($schemaOrCallable)) { - $schemaSource = (new Filesystem())->readFile((string) $schemaOrCallable); + $schemaSource = (new Filesystem())->readFile($schemaOrCallable); $valid = @$dom->schemaValidateSource($schemaSource); } else { libxml_use_internal_errors($internalErrors); - throw new XmlParsingException(sprintf('Invalid XSD file: "%s".', $schemaOrCallable)); + throw new XmlParsingException(\sprintf('Invalid XSD file: "%s".', $schemaOrCallable)); } if (!$valid) { @@ -116,23 +116,23 @@ public static function parse(string $content, string|callable|null $schemaOrCall public static function loadFile(string $file, string|callable|null $schemaOrCallable = null): \DOMDocument { if (!is_file($file)) { - throw new \InvalidArgumentException(sprintf('Resource "%s" is not a file.', $file)); + throw new \InvalidArgumentException(\sprintf('Resource "%s" is not a file.', $file)); } if (!is_readable($file)) { - throw new \InvalidArgumentException(sprintf('File "%s" is not readable.', $file)); + throw new \InvalidArgumentException(\sprintf('File "%s" is not readable.', $file)); } $content = (new Filesystem())->readFile($file); if ('' === trim($content)) { - throw new \InvalidArgumentException(sprintf('File "%s" does not contain valid XML, it is empty.', $file)); + throw new \InvalidArgumentException(\sprintf('File "%s" does not contain valid XML, it is empty.', $file)); } try { return static::parse($content, $schemaOrCallable); } catch (InvalidXmlException $e) { - throw new XmlParsingException(sprintf('The XML file "%s" is not valid.', $file), 0, $e->getPrevious()); + throw new XmlParsingException(\sprintf('The XML file "%s" is not valid.', $file), 0, $e->getPrevious()); } } @@ -156,7 +156,7 @@ public static function loadFile(string $file, string|callable|null $schemaOrCall */ public static function convertDomElementToArray(\DOMElement $element, bool $checkPrefix = true): mixed { - $prefix = (string) $element->prefix; + $prefix = $element->prefix; $empty = true; $config = []; foreach ($element->attributes as $name => $node) { @@ -174,7 +174,7 @@ public static function convertDomElementToArray(\DOMElement $element, bool $chec $nodeValue = trim($node->nodeValue); $empty = false; } - } elseif ($checkPrefix && $prefix != (string) $node->prefix) { + } elseif ($checkPrefix && $prefix != $node->prefix) { continue; } elseif (!$node instanceof \DOMComment) { $value = static::convertDomElementToArray($node, $checkPrefix); @@ -243,7 +243,7 @@ protected static function getXmlErrors(bool $internalErrors): array { $errors = []; foreach (libxml_get_errors() as $error) { - $errors[] = sprintf('[%s %s] %s (in %s - line %d, column %d)', + $errors[] = \sprintf('[%s %s] %s (in %s - line %d, column %d)', \LIBXML_ERR_WARNING == $error->level ? 'WARNING' : 'ERROR', $error->code, trim($error->message), diff --git a/app/vendor/symfony/filesystem/Exception/FileNotFoundException.php b/app/vendor/symfony/filesystem/Exception/FileNotFoundException.php index 06b732b16..d0d27977d 100644 --- a/app/vendor/symfony/filesystem/Exception/FileNotFoundException.php +++ b/app/vendor/symfony/filesystem/Exception/FileNotFoundException.php @@ -25,7 +25,7 @@ public function __construct(?string $message = null, int $code = 0, ?\Throwable if (null === $path) { $message = 'File could not be found.'; } else { - $message = sprintf('File "%s" could not be found.', $path); + $message = \sprintf('File "%s" could not be found.', $path); } } diff --git a/app/vendor/symfony/filesystem/Filesystem.php b/app/vendor/symfony/filesystem/Filesystem.php index 3c259b07d..f97c8b2fe 100644 --- a/app/vendor/symfony/filesystem/Filesystem.php +++ b/app/vendor/symfony/filesystem/Filesystem.php @@ -38,7 +38,7 @@ public function copy(string $originFile, string $targetFile, bool $overwriteNewe { $originIsLocal = stream_is_local($originFile) || 0 === stripos($originFile, 'file://'); if ($originIsLocal && !is_file($originFile)) { - throw new FileNotFoundException(sprintf('Failed to copy "%s" because file does not exist.', $originFile), 0, null, $originFile); + throw new FileNotFoundException(\sprintf('Failed to copy "%s" because file does not exist.', $originFile), 0, null, $originFile); } $this->mkdir(\dirname($targetFile)); @@ -51,12 +51,12 @@ public function copy(string $originFile, string $targetFile, bool $overwriteNewe if ($doCopy) { // https://bugs.php.net/64634 if (!$source = self::box('fopen', $originFile, 'r')) { - throw new IOException(sprintf('Failed to copy "%s" to "%s" because source file could not be opened for reading: ', $originFile, $targetFile).self::$lastError, 0, null, $originFile); + throw new IOException(\sprintf('Failed to copy "%s" to "%s" because source file could not be opened for reading: ', $originFile, $targetFile).self::$lastError, 0, null, $originFile); } // Stream context created to allow files overwrite when using FTP stream wrapper - disabled by default if (!$target = self::box('fopen', $targetFile, 'w', false, stream_context_create(['ftp' => ['overwrite' => true]]))) { - throw new IOException(sprintf('Failed to copy "%s" to "%s" because target file could not be opened for writing: ', $originFile, $targetFile).self::$lastError, 0, null, $originFile); + throw new IOException(\sprintf('Failed to copy "%s" to "%s" because target file could not be opened for writing: ', $originFile, $targetFile).self::$lastError, 0, null, $originFile); } $bytesCopied = stream_copy_to_stream($source, $target); @@ -65,7 +65,7 @@ public function copy(string $originFile, string $targetFile, bool $overwriteNewe unset($source, $target); if (!is_file($targetFile)) { - throw new IOException(sprintf('Failed to copy "%s" to "%s".', $originFile, $targetFile), 0, null, $originFile); + throw new IOException(\sprintf('Failed to copy "%s" to "%s".', $originFile, $targetFile), 0, null, $originFile); } if ($originIsLocal) { @@ -76,7 +76,7 @@ public function copy(string $originFile, string $targetFile, bool $overwriteNewe self::box('touch', $targetFile, filemtime($originFile)); if ($bytesCopied !== $bytesOrigin = filesize($originFile)) { - throw new IOException(sprintf('Failed to copy the whole content of "%s" to "%s" (%g of %g bytes copied).', $originFile, $targetFile, $bytesCopied, $bytesOrigin), 0, null, $originFile); + throw new IOException(\sprintf('Failed to copy the whole content of "%s" to "%s" (%g of %g bytes copied).', $originFile, $targetFile, $bytesCopied, $bytesOrigin), 0, null, $originFile); } } } @@ -95,7 +95,7 @@ public function mkdir(string|iterable $dirs, int $mode = 0777): void } if (!self::box('mkdir', $dir, $mode, true) && !is_dir($dir)) { - throw new IOException(sprintf('Failed to create "%s": ', $dir).self::$lastError, 0, null, $dir); + throw new IOException(\sprintf('Failed to create "%s": ', $dir).self::$lastError, 0, null, $dir); } } } @@ -109,7 +109,7 @@ public function exists(string|iterable $files): bool foreach ($this->toIterable($files) as $file) { if (\strlen($file) > $maxPathLength) { - throw new IOException(sprintf('Could not check if file exist because path length exceeds %d characters.', $maxPathLength), 0, null, $file); + throw new IOException(\sprintf('Could not check if file exist because path length exceeds %d characters.', $maxPathLength), 0, null, $file); } if (!file_exists($file)) { @@ -132,7 +132,7 @@ public function touch(string|iterable $files, ?int $time = null, ?int $atime = n { foreach ($this->toIterable($files) as $file) { if (!($time ? self::box('touch', $file, $time, $atime) : self::box('touch', $file))) { - throw new IOException(sprintf('Failed to touch "%s": ', $file).self::$lastError, 0, null, $file); + throw new IOException(\sprintf('Failed to touch "%s": ', $file).self::$lastError, 0, null, $file); } } } @@ -160,7 +160,7 @@ private static function doRemove(array $files, bool $isRecursive): void if (is_link($file)) { // See https://bugs.php.net/52176 if (!(self::box('unlink', $file) || '\\' !== \DIRECTORY_SEPARATOR || self::box('rmdir', $file)) && file_exists($file)) { - throw new IOException(sprintf('Failed to remove symlink "%s": ', $file).self::$lastError); + throw new IOException(\sprintf('Failed to remove symlink "%s": ', $file).self::$lastError); } } elseif (is_dir($file)) { if (!$isRecursive) { @@ -191,10 +191,10 @@ private static function doRemove(array $files, bool $isRecursive): void $file = $origFile; } - throw new IOException(sprintf('Failed to remove directory "%s": ', $file).$lastError); + throw new IOException(\sprintf('Failed to remove directory "%s": ', $file).$lastError); } } elseif (!self::box('unlink', $file) && ((self::$lastError && str_contains(self::$lastError, 'Permission denied')) || file_exists($file))) { - throw new IOException(sprintf('Failed to remove file "%s": ', $file).self::$lastError); + throw new IOException(\sprintf('Failed to remove file "%s": ', $file).self::$lastError); } } } @@ -212,7 +212,7 @@ public function chmod(string|iterable $files, int $mode, int $umask = 0000, bool { foreach ($this->toIterable($files) as $file) { if (!self::box('chmod', $file, $mode & ~$umask)) { - throw new IOException(sprintf('Failed to chmod file "%s": ', $file).self::$lastError, 0, null, $file); + throw new IOException(\sprintf('Failed to chmod file "%s": ', $file).self::$lastError, 0, null, $file); } if ($recursive && is_dir($file) && !is_link($file)) { $this->chmod(new \FilesystemIterator($file), $mode, $umask, true); @@ -240,11 +240,11 @@ public function chown(string|iterable $files, string|int $user, bool $recursive } if (is_link($file) && \function_exists('lchown')) { if (!self::box('lchown', $file, $user)) { - throw new IOException(sprintf('Failed to chown file "%s": ', $file).self::$lastError, 0, null, $file); + throw new IOException(\sprintf('Failed to chown file "%s": ', $file).self::$lastError, 0, null, $file); } } else { if (!self::box('chown', $file, $user)) { - throw new IOException(sprintf('Failed to chown file "%s": ', $file).self::$lastError, 0, null, $file); + throw new IOException(\sprintf('Failed to chown file "%s": ', $file).self::$lastError, 0, null, $file); } } } @@ -270,11 +270,11 @@ public function chgrp(string|iterable $files, string|int $group, bool $recursive } if (is_link($file) && \function_exists('lchgrp')) { if (!self::box('lchgrp', $file, $group)) { - throw new IOException(sprintf('Failed to chgrp file "%s": ', $file).self::$lastError, 0, null, $file); + throw new IOException(\sprintf('Failed to chgrp file "%s": ', $file).self::$lastError, 0, null, $file); } } else { if (!self::box('chgrp', $file, $group)) { - throw new IOException(sprintf('Failed to chgrp file "%s": ', $file).self::$lastError, 0, null, $file); + throw new IOException(\sprintf('Failed to chgrp file "%s": ', $file).self::$lastError, 0, null, $file); } } } @@ -290,7 +290,7 @@ public function rename(string $origin, string $target, bool $overwrite = false): { // we check that target does not exist if (!$overwrite && $this->isReadable($target)) { - throw new IOException(sprintf('Cannot rename because the target "%s" already exists.', $target), 0, null, $target); + throw new IOException(\sprintf('Cannot rename because the target "%s" already exists.', $target), 0, null, $target); } if (!self::box('rename', $origin, $target)) { @@ -301,7 +301,7 @@ public function rename(string $origin, string $target, bool $overwrite = false): return; } - throw new IOException(sprintf('Cannot rename "%s" to "%s": ', $origin, $target).self::$lastError, 0, null, $target); + throw new IOException(\sprintf('Cannot rename "%s" to "%s": ', $origin, $target).self::$lastError, 0, null, $target); } } @@ -315,7 +315,7 @@ private function isReadable(string $filename): bool $maxPathLength = \PHP_MAXPATHLEN - 2; if (\strlen($filename) > $maxPathLength) { - throw new IOException(sprintf('Could not check if file is readable because path length exceeds %d characters.', $maxPathLength), 0, null, $filename); + throw new IOException(\sprintf('Could not check if file is readable because path length exceeds %d characters.', $maxPathLength), 0, null, $filename); } return is_readable($filename); @@ -372,7 +372,7 @@ public function hardlink(string $originFile, string|iterable $targetFiles): void } if (!is_file($originFile)) { - throw new FileNotFoundException(sprintf('Origin file "%s" is not a file.', $originFile)); + throw new FileNotFoundException(\sprintf('Origin file "%s" is not a file.', $originFile)); } foreach ($this->toIterable($targetFiles) as $targetFile) { @@ -396,10 +396,10 @@ private function linkException(string $origin, string $target, string $linkType) { if (self::$lastError) { if ('\\' === \DIRECTORY_SEPARATOR && str_contains(self::$lastError, 'error code(1314)')) { - throw new IOException(sprintf('Unable to create "%s" link due to error code 1314: \'A required privilege is not held by the client\'. Do you have the required Administrator-rights?', $linkType), 0, null, $target); + throw new IOException(\sprintf('Unable to create "%s" link due to error code 1314: \'A required privilege is not held by the client\'. Do you have the required Administrator-rights?', $linkType), 0, null, $target); } } - throw new IOException(sprintf('Failed to create "%s" link from "%s" to "%s": ', $linkType, $origin, $target).self::$lastError, 0, null, $target); + throw new IOException(\sprintf('Failed to create "%s" link from "%s" to "%s": ', $linkType, $origin, $target).self::$lastError, 0, null, $target); } /** @@ -436,11 +436,11 @@ public function readlink(string $path, bool $canonicalize = false): ?string public function makePathRelative(string $endPath, string $startPath): string { if (!$this->isAbsolutePath($startPath)) { - throw new InvalidArgumentException(sprintf('The start path "%s" is not absolute.', $startPath)); + throw new InvalidArgumentException(\sprintf('The start path "%s" is not absolute.', $startPath)); } if (!$this->isAbsolutePath($endPath)) { - throw new InvalidArgumentException(sprintf('The end path "%s" is not absolute.', $endPath)); + throw new InvalidArgumentException(\sprintf('The end path "%s" is not absolute.', $endPath)); } // Normalize separators on Windows @@ -526,7 +526,7 @@ public function mirror(string $originDir, string $targetDir, ?\Traversable $iter $originDirLen = \strlen($originDir); if (!$this->exists($originDir)) { - throw new IOException(sprintf('The origin directory specified "%s" was not found.', $originDir), 0, null, $originDir); + throw new IOException(\sprintf('The origin directory specified "%s" was not found.', $originDir), 0, null, $originDir); } // Iterate in destination folder to remove obsolete entries @@ -570,7 +570,7 @@ public function mirror(string $originDir, string $targetDir, ?\Traversable $iter } elseif (is_file($file)) { $this->copy($file, $target, $options['override'] ?? false); } else { - throw new IOException(sprintf('Unable to guess "%s" file type.', $file), 0, null, $file); + throw new IOException(\sprintf('Unable to guess "%s" file type.', $file), 0, null, $file); } } } @@ -619,7 +619,7 @@ public function tempnam(string $dir, string $prefix, string $suffix = ''): strin // Loop until we create a valid temp file or have reached 10 attempts for ($i = 0; $i < 10; ++$i) { // Create a unique filename - $tmpFile = $dir.'/'.$prefix.uniqid(mt_rand(), true).$suffix; + $tmpFile = $dir.'/'.$prefix.bin2hex(random_bytes(4)).$suffix; // Use fopen instead of file_exists as some streams do not support stat // Use mode 'x+' to atomically check existence and create to avoid a TOCTOU vulnerability @@ -646,7 +646,7 @@ public function tempnam(string $dir, string $prefix, string $suffix = ''): strin public function dumpFile(string $filename, $content): void { if (\is_array($content)) { - throw new \TypeError(sprintf('Argument 2 passed to "%s()" must be string or resource, array given.', __METHOD__)); + throw new \TypeError(\sprintf('Argument 2 passed to "%s()" must be string or resource, array given.', __METHOD__)); } $dir = \dirname($filename); @@ -667,7 +667,7 @@ public function dumpFile(string $filename, $content): void try { if (false === self::box('file_put_contents', $tmpFile, $content)) { - throw new IOException(sprintf('Failed to write file "%s": ', $filename).self::$lastError, 0, null, $filename); + throw new IOException(\sprintf('Failed to write file "%s": ', $filename).self::$lastError, 0, null, $filename); } self::box('chmod', $tmpFile, self::box('fileperms', $filename) ?: 0666 & ~umask()); @@ -695,7 +695,7 @@ public function dumpFile(string $filename, $content): void public function appendToFile(string $filename, $content, bool $lock = false): void { if (\is_array($content)) { - throw new \TypeError(sprintf('Argument 2 passed to "%s()" must be string or resource, array given.', __METHOD__)); + throw new \TypeError(\sprintf('Argument 2 passed to "%s()" must be string or resource, array given.', __METHOD__)); } $dir = \dirname($filename); @@ -705,7 +705,7 @@ public function appendToFile(string $filename, $content, bool $lock = false): vo } if (false === self::box('file_put_contents', $filename, $content, \FILE_APPEND | ($lock ? \LOCK_EX : 0))) { - throw new IOException(sprintf('Failed to write file "%s": ', $filename).self::$lastError, 0, null, $filename); + throw new IOException(\sprintf('Failed to write file "%s": ', $filename).self::$lastError, 0, null, $filename); } } @@ -717,12 +717,12 @@ public function appendToFile(string $filename, $content, bool $lock = false): vo public function readFile(string $filename): string { if (is_dir($filename)) { - throw new IOException(sprintf('Failed to read file "%s": File is a directory.', $filename)); + throw new IOException(\sprintf('Failed to read file "%s": File is a directory.', $filename)); } $content = self::box('file_get_contents', $filename); if (false === $content) { - throw new IOException(sprintf('Failed to read file "%s": ', $filename).self::$lastError, 0, null, $filename); + throw new IOException(\sprintf('Failed to read file "%s": ', $filename).self::$lastError, 0, null, $filename); } return $content; @@ -746,7 +746,7 @@ private function getSchemeAndHierarchy(string $filename): array private static function assertFunctionExists(string $func): void { if (!\function_exists($func)) { - throw new IOException(sprintf('Unable to perform filesystem operation because the "%s()" function has been disabled.', $func)); + throw new IOException(\sprintf('Unable to perform filesystem operation because the "%s()" function has been disabled.', $func)); } } diff --git a/app/vendor/symfony/filesystem/Path.php b/app/vendor/symfony/filesystem/Path.php index db9ce4be9..2f2e87903 100644 --- a/app/vendor/symfony/filesystem/Path.php +++ b/app/vendor/symfony/filesystem/Path.php @@ -437,11 +437,11 @@ public static function isRelative(string $path): bool public static function makeAbsolute(string $path, string $basePath): string { if ('' === $basePath) { - throw new InvalidArgumentException(sprintf('The base path must be a non-empty string. Got: "%s".', $basePath)); + throw new InvalidArgumentException(\sprintf('The base path must be a non-empty string. Got: "%s".', $basePath)); } if (!self::isAbsolute($basePath)) { - throw new InvalidArgumentException(sprintf('The base path "%s" is not an absolute path.', $basePath)); + throw new InvalidArgumentException(\sprintf('The base path "%s" is not an absolute path.', $basePath)); } if (self::isAbsolute($path)) { @@ -531,12 +531,12 @@ public static function makeRelative(string $path, string $basePath): string // If the passed path is absolute, but the base path is not, we // cannot generate a relative path if ('' !== $root && '' === $baseRoot) { - throw new InvalidArgumentException(sprintf('The absolute path "%s" cannot be made relative to the relative path "%s". You should provide an absolute base path instead.', $path, $basePath)); + throw new InvalidArgumentException(\sprintf('The absolute path "%s" cannot be made relative to the relative path "%s". You should provide an absolute base path instead.', $path, $basePath)); } // Fail if the roots of the two paths are different if ($baseRoot && $root !== $baseRoot) { - throw new InvalidArgumentException(sprintf('The path "%s" cannot be made relative to "%s", because they have different roots ("%s" and "%s").', $path, $basePath, $root, $baseRoot)); + throw new InvalidArgumentException(\sprintf('The path "%s" cannot be made relative to "%s", because they have different roots ("%s" and "%s").', $path, $basePath, $root, $baseRoot)); } if ('' === $relativeBasePath) { diff --git a/app/vendor/symfony/translation/CHANGELOG.md b/app/vendor/symfony/translation/CHANGELOG.md index 5c18dde5d..622c7f75d 100644 --- a/app/vendor/symfony/translation/CHANGELOG.md +++ b/app/vendor/symfony/translation/CHANGELOG.md @@ -1,6 +1,20 @@ CHANGELOG ========= +7.2 +--- + + * Deprecate `ProviderFactoryTestCase`, extend `AbstractProviderFactoryTestCase` instead + + The `testIncompleteDsnException()` test is no longer provided by default. If you make use of it by implementing the `incompleteDsnProvider()` data providers, + you now need to use the `IncompleteDsnTestTrait`. + + * Make `ProviderFactoryTestCase` and `ProviderTestCase` compatible with PHPUnit 10+ + * Add `lint:translations` command + * Deprecate passing an escape character to `CsvFileLoader::setCsvControl()` + * Make Xliff 2.0 attributes in segment element available as `segment-attributes` + metadata returned by `XliffFileLoader` and make `XliffFileDumper` write them to the file + 7.1 --- diff --git a/app/vendor/symfony/translation/Catalogue/AbstractOperation.php b/app/vendor/symfony/translation/Catalogue/AbstractOperation.php index 7f559a4a9..4e825a2be 100644 --- a/app/vendor/symfony/translation/Catalogue/AbstractOperation.php +++ b/app/vendor/symfony/translation/Catalogue/AbstractOperation.php @@ -30,8 +30,6 @@ abstract class AbstractOperation implements OperationInterface public const NEW_BATCH = 'new'; public const ALL_BATCH = 'all'; - protected MessageCatalogueInterface $source; - protected MessageCatalogueInterface $target; protected MessageCatalogue $result; /** @@ -62,14 +60,14 @@ abstract class AbstractOperation implements OperationInterface /** * @throws LogicException */ - public function __construct(MessageCatalogueInterface $source, MessageCatalogueInterface $target) - { + public function __construct( + protected MessageCatalogueInterface $source, + protected MessageCatalogueInterface $target, + ) { if ($source->getLocale() !== $target->getLocale()) { throw new LogicException('Operated catalogues must belong to the same locale.'); } - $this->source = $source; - $this->target = $target; $this->result = new MessageCatalogue($source->getLocale()); $this->messages = []; } @@ -97,7 +95,7 @@ public function getDomains(): array public function getMessages(string $domain): array { if (!\in_array($domain, $this->getDomains(), true)) { - throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain)); + throw new InvalidArgumentException(\sprintf('Invalid domain: "%s".', $domain)); } if (!isset($this->messages[$domain][self::ALL_BATCH])) { @@ -110,7 +108,7 @@ public function getMessages(string $domain): array public function getNewMessages(string $domain): array { if (!\in_array($domain, $this->getDomains(), true)) { - throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain)); + throw new InvalidArgumentException(\sprintf('Invalid domain: "%s".', $domain)); } if (!isset($this->messages[$domain][self::NEW_BATCH])) { @@ -123,7 +121,7 @@ public function getNewMessages(string $domain): array public function getObsoleteMessages(string $domain): array { if (!\in_array($domain, $this->getDomains(), true)) { - throw new InvalidArgumentException(sprintf('Invalid domain: "%s".', $domain)); + throw new InvalidArgumentException(\sprintf('Invalid domain: "%s".', $domain)); } if (!isset($this->messages[$domain][self::OBSOLETE_BATCH])) { @@ -160,7 +158,7 @@ public function moveMessagesToIntlDomainsIfPossible(string $batch = self::ALL_BA self::OBSOLETE_BATCH => $this->getObsoleteMessages($domain), self::NEW_BATCH => $this->getNewMessages($domain), self::ALL_BATCH => $this->getMessages($domain), - default => throw new \InvalidArgumentException(sprintf('$batch argument must be one of ["%s", "%s", "%s"].', self::ALL_BATCH, self::NEW_BATCH, self::OBSOLETE_BATCH)), + default => throw new \InvalidArgumentException(\sprintf('$batch argument must be one of ["%s", "%s", "%s"].', self::ALL_BATCH, self::NEW_BATCH, self::OBSOLETE_BATCH)), }; if (!$messages || (!$this->source->all($intlDomain) && $this->source->all($domain))) { diff --git a/app/vendor/symfony/translation/Command/TranslationLintCommand.php b/app/vendor/symfony/translation/Command/TranslationLintCommand.php new file mode 100644 index 000000000..e525fc07a --- /dev/null +++ b/app/vendor/symfony/translation/Command/TranslationLintCommand.php @@ -0,0 +1,129 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Command; + +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Completion\CompletionInput; +use Symfony\Component\Console\Completion\CompletionSuggestions; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\Translation\Exception\ExceptionInterface; +use Symfony\Component\Translation\TranslatorBagInterface; +use Symfony\Contracts\Translation\TranslatorInterface; + +/** + * Lint translations files syntax and outputs encountered errors. + * + * @author Hugo Alliaume + */ +#[AsCommand(name: 'lint:translations', description: 'Lint translations files syntax and outputs encountered errors')] +class TranslationLintCommand extends Command +{ + private SymfonyStyle $io; + + public function __construct( + private TranslatorInterface&TranslatorBagInterface $translator, + private array $enabledLocales = [], + ) { + parent::__construct(); + } + + public function complete(CompletionInput $input, CompletionSuggestions $suggestions): void + { + if ($input->mustSuggestOptionValuesFor('locale')) { + $suggestions->suggestValues($this->enabledLocales); + } + } + + protected function configure(): void + { + $this + ->setDefinition([ + new InputOption('locale', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'Specify the locales to lint.', $this->enabledLocales), + ]) + ->setHelp(<<<'EOF' +The %command.name% command lint translations. + + php %command.full_name% +EOF + ); + } + + protected function initialize(InputInterface $input, OutputInterface $output): void + { + $this->io = new SymfonyStyle($input, $output); + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $locales = $input->getOption('locale'); + + /** @var array> $errors */ + $errors = []; + $domainsByLocales = []; + + foreach ($locales as $locale) { + $messageCatalogue = $this->translator->getCatalogue($locale); + + foreach ($domainsByLocales[$locale] = $messageCatalogue->getDomains() as $domain) { + foreach ($messageCatalogue->all($domain) as $id => $translation) { + try { + $this->translator->trans($id, [], $domain, $messageCatalogue->getLocale()); + } catch (ExceptionInterface $e) { + $errors[$locale][$domain][$id] = $e; + } + } + } + } + + if (!$domainsByLocales) { + $this->io->error('No translation files were found.'); + + return Command::SUCCESS; + } + + $this->io->table( + ['Locale', 'Domains', 'Valid?'], + array_map( + static fn (string $locale, array $domains) => [ + $locale, + implode(', ', $domains), + !\array_key_exists($locale, $errors) ? 'Yes' : 'No', + ], + array_keys($domainsByLocales), + $domainsByLocales + ), + ); + + if ($errors) { + foreach ($errors as $locale => $domains) { + foreach ($domains as $domain => $domainsErrors) { + $this->io->section(\sprintf('Errors for locale "%s" and domain "%s"', $locale, $domain)); + + foreach ($domainsErrors as $id => $error) { + $this->io->text(\sprintf('Translation key "%s" is invalid:', $id)); + $this->io->error($error->getMessage()); + } + } + } + + return Command::FAILURE; + } + + $this->io->success('All translations are valid.'); + + return Command::SUCCESS; + } +} diff --git a/app/vendor/symfony/translation/Command/TranslationPullCommand.php b/app/vendor/symfony/translation/Command/TranslationPullCommand.php index 5d9c092c3..ad42716f5 100644 --- a/app/vendor/symfony/translation/Command/TranslationPullCommand.php +++ b/app/vendor/symfony/translation/Command/TranslationPullCommand.php @@ -34,22 +34,14 @@ final class TranslationPullCommand extends Command { use TranslationTrait; - private TranslationProviderCollection $providerCollection; - private TranslationWriterInterface $writer; - private TranslationReaderInterface $reader; - private string $defaultLocale; - private array $transPaths; - private array $enabledLocales; - - public function __construct(TranslationProviderCollection $providerCollection, TranslationWriterInterface $writer, TranslationReaderInterface $reader, string $defaultLocale, array $transPaths = [], array $enabledLocales = []) - { - $this->providerCollection = $providerCollection; - $this->writer = $writer; - $this->reader = $reader; - $this->defaultLocale = $defaultLocale; - $this->transPaths = $transPaths; - $this->enabledLocales = $enabledLocales; - + public function __construct( + private TranslationProviderCollection $providerCollection, + private TranslationWriterInterface $writer, + private TranslationReaderInterface $reader, + private string $defaultLocale, + private array $transPaths = [], + private array $enabledLocales = [], + ) { parent::__construct(); } @@ -163,7 +155,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $this->writer->write($operation->getResult(), $format, $writeOptions); } - $io->success(sprintf('Local translations has been updated from "%s" (for "%s" locale(s), and "%s" domain(s)).', parse_url($provider, \PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains))); + $io->success(\sprintf('Local translations has been updated from "%s" (for "%s" locale(s), and "%s" domain(s)).', parse_url($provider, \PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains))); return 0; } @@ -177,7 +169,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $this->writer->write($catalogue, $format, $writeOptions); } - $io->success(sprintf('New translations from "%s" has been written locally (for "%s" locale(s), and "%s" domain(s)).', parse_url($provider, \PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains))); + $io->success(\sprintf('New translations from "%s" has been written locally (for "%s" locale(s), and "%s" domain(s)).', parse_url($provider, \PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains))); return 0; } diff --git a/app/vendor/symfony/translation/Command/TranslationPushCommand.php b/app/vendor/symfony/translation/Command/TranslationPushCommand.php index 3310ac697..b1cdc5fc0 100644 --- a/app/vendor/symfony/translation/Command/TranslationPushCommand.php +++ b/app/vendor/symfony/translation/Command/TranslationPushCommand.php @@ -34,18 +34,12 @@ final class TranslationPushCommand extends Command { use TranslationTrait; - private TranslationProviderCollection $providers; - private TranslationReaderInterface $reader; - private array $transPaths; - private array $enabledLocales; - - public function __construct(TranslationProviderCollection $providers, TranslationReaderInterface $reader, array $transPaths = [], array $enabledLocales = []) - { - $this->providers = $providers; - $this->reader = $reader; - $this->transPaths = $transPaths; - $this->enabledLocales = $enabledLocales; - + public function __construct( + private TranslationProviderCollection $providers, + private TranslationReaderInterface $reader, + private array $transPaths = [], + private array $enabledLocales = [], + ) { parent::__construct(); } @@ -115,7 +109,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $provider = $this->providers->get($input->getArgument('provider')); if (!$this->enabledLocales) { - throw new InvalidArgumentException(sprintf('You must define "framework.enabled_locales" or "framework.translator.providers.%s.locales" config key in order to work with translation providers.', parse_url($provider, \PHP_URL_SCHEME))); + throw new InvalidArgumentException(\sprintf('You must define "framework.enabled_locales" or "framework.translator.providers.%s.locales" config key in order to work with translation providers.', parse_url($provider, \PHP_URL_SCHEME))); } $io = new SymfonyStyle($input, $output); @@ -139,7 +133,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int if (!$deleteMissing && $force) { $provider->write($localTranslations); - $io->success(sprintf('All local translations has been sent to "%s" (for "%s" locale(s), and "%s" domain(s)).', parse_url($provider, \PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains))); + $io->success(\sprintf('All local translations has been sent to "%s" (for "%s" locale(s), and "%s" domain(s)).', parse_url($provider, \PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains))); return 0; } @@ -149,7 +143,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int if ($deleteMissing) { $provider->delete($providerTranslations->diff($localTranslations)); - $io->success(sprintf('Missing translations on "%s" has been deleted (for "%s" locale(s), and "%s" domain(s)).', parse_url($provider, \PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains))); + $io->success(\sprintf('Missing translations on "%s" has been deleted (for "%s" locale(s), and "%s" domain(s)).', parse_url($provider, \PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains))); // Read provider translations again, after missing translations deletion, // to avoid push freshly deleted translations. @@ -164,7 +158,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $provider->write($translationsToWrite); - $io->success(sprintf('%s local translations has been sent to "%s" (for "%s" locale(s), and "%s" domain(s)).', $force ? 'All' : 'New', parse_url($provider, \PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains))); + $io->success(\sprintf('%s local translations has been sent to "%s" (for "%s" locale(s), and "%s" domain(s)).', $force ? 'All' : 'New', parse_url($provider, \PHP_URL_SCHEME), implode(', ', $locales), implode(', ', $domains))); return 0; } diff --git a/app/vendor/symfony/translation/Command/XliffLintCommand.php b/app/vendor/symfony/translation/Command/XliffLintCommand.php index 439562556..82a9571ce 100644 --- a/app/vendor/symfony/translation/Command/XliffLintCommand.php +++ b/app/vendor/symfony/translation/Command/XliffLintCommand.php @@ -39,22 +39,24 @@ class XliffLintCommand extends Command private bool $displayCorrectFiles; private ?\Closure $directoryIteratorProvider; private ?\Closure $isReadableProvider; - private bool $requireStrictFileNames; - public function __construct(?string $name = null, ?callable $directoryIteratorProvider = null, ?callable $isReadableProvider = null, bool $requireStrictFileNames = true) - { + public function __construct( + ?string $name = null, + ?callable $directoryIteratorProvider = null, + ?callable $isReadableProvider = null, + private bool $requireStrictFileNames = true, + ) { parent::__construct($name); $this->directoryIteratorProvider = null === $directoryIteratorProvider ? null : $directoryIteratorProvider(...); $this->isReadableProvider = null === $isReadableProvider ? null : $isReadableProvider(...); - $this->requireStrictFileNames = $requireStrictFileNames; } protected function configure(): void { $this ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN') - ->addOption('format', null, InputOption::VALUE_REQUIRED, sprintf('The output format ("%s")', implode('", "', $this->getAvailableFormatOptions()))) + ->addOption('format', null, InputOption::VALUE_REQUIRED, \sprintf('The output format ("%s")', implode('", "', $this->getAvailableFormatOptions()))) ->setHelp(<<%command.name% command lints an XLIFF file and outputs to STDOUT the first encountered syntax error. @@ -70,6 +72,9 @@ protected function configure(): void Or of a whole directory: php %command.full_name% dirname + +The --format option specifies the format of the command output: + php %command.full_name% dirname --format=json EOF @@ -95,7 +100,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $filesInfo = []; foreach ($filenames as $filename) { if (!$this->isReadable($filename)) { - throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename)); + throw new RuntimeException(\sprintf('File or directory "%s" is not readable.', $filename)); } foreach ($this->getFiles($filename) as $file) { @@ -121,18 +126,18 @@ private function validate(string $content, ?string $file = null): array $document->loadXML($content); if (null !== $targetLanguage = $this->getTargetLanguageFromFile($document)) { - $normalizedLocalePattern = sprintf('(%s|%s)', preg_quote($targetLanguage, '/'), preg_quote(str_replace('-', '_', $targetLanguage), '/')); + $normalizedLocalePattern = \sprintf('(%s|%s)', preg_quote($targetLanguage, '/'), preg_quote(str_replace('-', '_', $targetLanguage), '/')); // strict file names require translation files to be named '____.locale.xlf' // otherwise, both '____.locale.xlf' and 'locale.____.xlf' are allowed // also, the regexp matching must be case-insensitive, as defined for 'target-language' values // http://docs.oasis-open.org/xliff/v1.2/os/xliff-core.html#target-language - $expectedFilenamePattern = $this->requireStrictFileNames ? sprintf('/^.*\.(?i:%s)\.(?:xlf|xliff)/', $normalizedLocalePattern) : sprintf('/^(?:.*\.(?i:%s)|(?i:%s)\..*)\.(?:xlf|xliff)/', $normalizedLocalePattern, $normalizedLocalePattern); + $expectedFilenamePattern = $this->requireStrictFileNames ? \sprintf('/^.*\.(?i:%s)\.(?:xlf|xliff)/', $normalizedLocalePattern) : \sprintf('/^(?:.*\.(?i:%s)|(?i:%s)\..*)\.(?:xlf|xliff)/', $normalizedLocalePattern, $normalizedLocalePattern); if (0 === preg_match($expectedFilenamePattern, basename($file))) { $errors[] = [ 'line' => -1, 'column' => -1, - 'message' => sprintf('There is a mismatch between the language included in the file name ("%s") and the "%s" value used in the "target-language" attribute of the file.', basename($file), $targetLanguage), + 'message' => \sprintf('There is a mismatch between the language included in the file name ("%s") and the "%s" value used in the "target-language" attribute of the file.', basename($file), $targetLanguage), ]; } } @@ -157,7 +162,7 @@ private function display(SymfonyStyle $io, array $files): int 'txt' => $this->displayTxt($io, $files), 'json' => $this->displayJson($io, $files), 'github' => $this->displayTxt($io, $files, true), - default => throw new InvalidArgumentException(sprintf('Supported formats are "%s".', implode('", "', $this->getAvailableFormatOptions()))), + default => throw new InvalidArgumentException(\sprintf('Supported formats are "%s".', implode('", "', $this->getAvailableFormatOptions()))), }; } @@ -169,25 +174,25 @@ private function displayTxt(SymfonyStyle $io, array $filesInfo, bool $errorAsGit foreach ($filesInfo as $info) { if ($info['valid'] && $this->displayCorrectFiles) { - $io->comment('OK'.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + $io->comment('OK'.($info['file'] ? \sprintf(' in %s', $info['file']) : '')); } elseif (!$info['valid']) { ++$erroredFiles; - $io->text(' ERROR '.($info['file'] ? sprintf(' in %s', $info['file']) : '')); + $io->text(' ERROR '.($info['file'] ? \sprintf(' in %s', $info['file']) : '')); $io->listing(array_map(function ($error) use ($info, $githubReporter) { // general document errors have a '-1' line number $line = -1 === $error['line'] ? null : $error['line']; $githubReporter?->error($error['message'], $info['file'], $line, null !== $line ? $error['column'] : null); - return null === $line ? $error['message'] : sprintf('Line %d, Column %d: %s', $line, $error['column'], $error['message']); + return null === $line ? $error['message'] : \sprintf('Line %d, Column %d: %s', $line, $error['column'], $error['message']); }, $info['messages'])); } } if (0 === $erroredFiles) { - $io->success(sprintf('All %d XLIFF files contain valid syntax.', $countFiles)); + $io->success(\sprintf('All %d XLIFF files contain valid syntax.', $countFiles)); } else { - $io->warning(sprintf('%d XLIFF files have valid syntax and %d contain errors.', $countFiles - $erroredFiles, $erroredFiles)); + $io->warning(\sprintf('%d XLIFF files have valid syntax and %d contain errors.', $countFiles - $erroredFiles, $erroredFiles)); } return min($erroredFiles, 1); @@ -275,6 +280,7 @@ public function complete(CompletionInput $input, CompletionSuggestions $suggesti } } + /** @return string[] */ private function getAvailableFormatOptions(): array { return ['txt', 'json', 'github']; diff --git a/app/vendor/symfony/translation/DataCollector/TranslationDataCollector.php b/app/vendor/symfony/translation/DataCollector/TranslationDataCollector.php index d4f49cc66..e6bd619db 100644 --- a/app/vendor/symfony/translation/DataCollector/TranslationDataCollector.php +++ b/app/vendor/symfony/translation/DataCollector/TranslationDataCollector.php @@ -25,11 +25,9 @@ */ class TranslationDataCollector extends DataCollector implements LateDataCollectorInterface { - private DataCollectorTranslator $translator; - - public function __construct(DataCollectorTranslator $translator) - { - $this->translator = $translator; + public function __construct( + private DataCollectorTranslator $translator, + ) { } public function lateCollect(): void diff --git a/app/vendor/symfony/translation/DataCollectorTranslator.php b/app/vendor/symfony/translation/DataCollectorTranslator.php index 1f52088b4..dcabedeb8 100644 --- a/app/vendor/symfony/translation/DataCollectorTranslator.php +++ b/app/vendor/symfony/translation/DataCollectorTranslator.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Translation; use Symfony\Component\HttpKernel\CacheWarmer\WarmableInterface; -use Symfony\Component\Translation\Exception\InvalidArgumentException; use Symfony\Contracts\Translation\LocaleAwareInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -27,19 +26,11 @@ class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInter public const MESSAGE_MISSING = 1; public const MESSAGE_EQUALS_FALLBACK = 2; - private TranslatorInterface $translator; private array $messages = []; - /** - * @param TranslatorInterface&TranslatorBagInterface&LocaleAwareInterface $translator - */ - public function __construct(TranslatorInterface $translator) - { - if (!$translator instanceof TranslatorBagInterface || !$translator instanceof LocaleAwareInterface) { - throw new InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface, TranslatorBagInterface and LocaleAwareInterface.', get_debug_type($translator))); - } - - $this->translator = $translator; + public function __construct( + private TranslatorInterface&TranslatorBagInterface&LocaleAwareInterface $translator, + ) { } public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string @@ -73,7 +64,7 @@ public function getCatalogues(): array public function warmUp(string $cacheDir, ?string $buildDir = null): array { if ($this->translator instanceof WarmableInterface) { - return (array) $this->translator->warmUp($cacheDir, $buildDir); + return $this->translator->warmUp($cacheDir, $buildDir); } return []; diff --git a/app/vendor/symfony/translation/DependencyInjection/LoggingTranslatorPass.php b/app/vendor/symfony/translation/DependencyInjection/LoggingTranslatorPass.php index c21552f97..fba86981c 100644 --- a/app/vendor/symfony/translation/DependencyInjection/LoggingTranslatorPass.php +++ b/app/vendor/symfony/translation/DependencyInjection/LoggingTranslatorPass.php @@ -37,7 +37,7 @@ public function process(ContainerBuilder $container): void $class = $container->getParameterBag()->resolveValue($definition->getClass()); if (!$r = $container->getReflectionClass($class)) { - throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $translatorAlias)); + throw new InvalidArgumentException(\sprintf('Class "%s" used for service "%s" cannot be found.', $class, $translatorAlias)); } if (!$r->isSubclassOf(TranslatorInterface::class) || !$r->isSubclassOf(TranslatorBagInterface::class)) { diff --git a/app/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php b/app/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php index 28873d009..864a12105 100644 --- a/app/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php +++ b/app/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php @@ -31,7 +31,7 @@ public function process(ContainerBuilder $container): void foreach ($container->findTaggedServiceIds('translation.extractor', true) as $id => $attributes) { if (!isset($attributes[0]['alias'])) { - throw new RuntimeException(sprintf('The alias for the tag "translation.extractor" of service "%s" must be set.', $id)); + throw new RuntimeException(\sprintf('The alias for the tag "translation.extractor" of service "%s" must be set.', $id)); } $definition->addMethodCall('addExtractor', [$attributes[0]['alias'], new Reference($id)]); diff --git a/app/vendor/symfony/translation/Dumper/FileDumper.php b/app/vendor/symfony/translation/Dumper/FileDumper.php index 3846e7380..2e1880f72 100644 --- a/app/vendor/symfony/translation/Dumper/FileDumper.php +++ b/app/vendor/symfony/translation/Dumper/FileDumper.php @@ -50,7 +50,7 @@ public function dump(MessageCatalogue $messages, array $options = []): void if (!file_exists($fullpath)) { $directory = \dirname($fullpath); if (!file_exists($directory) && !@mkdir($directory, 0777, true)) { - throw new RuntimeException(sprintf('Unable to create directory "%s".', $directory)); + throw new RuntimeException(\sprintf('Unable to create directory "%s".', $directory)); } } diff --git a/app/vendor/symfony/translation/Dumper/MoFileDumper.php b/app/vendor/symfony/translation/Dumper/MoFileDumper.php index 9ded5f4ef..a7b4b338c 100644 --- a/app/vendor/symfony/translation/Dumper/MoFileDumper.php +++ b/app/vendor/symfony/translation/Dumper/MoFileDumper.php @@ -54,14 +54,11 @@ public function formatCatalogue(MessageCatalogue $messages, string $domain, arra .$this->writeLong($offset[2] + $sourcesStart + $sourcesSize); } - $output = implode('', array_map($this->writeLong(...), $header)) + return implode('', array_map($this->writeLong(...), $header)) .$sourceOffsets .$targetOffsets .$sources - .$targets - ; - - return $output; + .$targets; } protected function getExtension(): string diff --git a/app/vendor/symfony/translation/Dumper/PoFileDumper.php b/app/vendor/symfony/translation/Dumper/PoFileDumper.php index a2d0deb78..8f55b8ab7 100644 --- a/app/vendor/symfony/translation/Dumper/PoFileDumper.php +++ b/app/vendor/symfony/translation/Dumper/PoFileDumper.php @@ -51,14 +51,14 @@ public function formatCatalogue(MessageCatalogue $messages, string $domain, arra $sourceRules = $this->getStandardRules($source); $targetRules = $this->getStandardRules($target); if (2 == \count($sourceRules) && [] !== $targetRules) { - $output .= sprintf('msgid "%s"'."\n", $this->escape($sourceRules[0])); - $output .= sprintf('msgid_plural "%s"'."\n", $this->escape($sourceRules[1])); + $output .= \sprintf('msgid "%s"'."\n", $this->escape($sourceRules[0])); + $output .= \sprintf('msgid_plural "%s"'."\n", $this->escape($sourceRules[1])); foreach ($targetRules as $i => $targetRule) { - $output .= sprintf('msgstr[%d] "%s"'."\n", $i, $this->escape($targetRule)); + $output .= \sprintf('msgstr[%d] "%s"'."\n", $i, $this->escape($targetRule)); } } else { - $output .= sprintf('msgid "%s"'."\n", $this->escape($source)); - $output .= sprintf('msgstr "%s"'."\n", $this->escape($target)); + $output .= \sprintf('msgid "%s"'."\n", $this->escape($source)); + $output .= \sprintf('msgstr "%s"'."\n", $this->escape($target)); } } @@ -100,9 +100,9 @@ private function getStandardRules(string $id): array if (preg_match($intervalRegexp, $part)) { // Explicit rule is not a standard rule. return []; - } else { - $standardRules[] = $part; - } + } + + $standardRules[] = $part; } return $standardRules; @@ -123,7 +123,7 @@ private function formatComments(string|array $comments, string $prefix = ''): ?s $output = null; foreach ((array) $comments as $comment) { - $output .= sprintf('#%s %s'."\n", $prefix, $comment); + $output .= \sprintf('#%s %s'."\n", $prefix, $comment); } return $output; diff --git a/app/vendor/symfony/translation/Dumper/XliffFileDumper.php b/app/vendor/symfony/translation/Dumper/XliffFileDumper.php index 66698c5ca..b41394c19 100644 --- a/app/vendor/symfony/translation/Dumper/XliffFileDumper.php +++ b/app/vendor/symfony/translation/Dumper/XliffFileDumper.php @@ -46,7 +46,7 @@ public function formatCatalogue(MessageCatalogue $messages, string $domain, arra return $this->dumpXliff2($defaultLocale, $messages, $domain); } - throw new InvalidArgumentException(sprintf('No support implemented for dumping XLIFF version "%s".', $xliffVersion)); + throw new InvalidArgumentException(\sprintf('No support implemented for dumping XLIFF version "%s".', $xliffVersion)); } protected function getExtension(): string @@ -193,6 +193,12 @@ private function dumpXliff2(string $defaultLocale, MessageCatalogue $messages, ? $segment = $translation->appendChild($dom->createElement('segment')); + if ($this->hasMetadataArrayInfo('segment-attributes', $metadata)) { + foreach ($metadata['segment-attributes'] as $name => $value) { + $segment->setAttribute($name, $value); + } + } + $s = $segment->appendChild($dom->createElement('source')); $s->appendChild($dom->createTextNode($source)); diff --git a/app/vendor/symfony/translation/Dumper/YamlFileDumper.php b/app/vendor/symfony/translation/Dumper/YamlFileDumper.php index d2670331e..a30eaa319 100644 --- a/app/vendor/symfony/translation/Dumper/YamlFileDumper.php +++ b/app/vendor/symfony/translation/Dumper/YamlFileDumper.php @@ -23,11 +23,9 @@ */ class YamlFileDumper extends FileDumper { - private string $extension; - - public function __construct(string $extension = 'yml') - { - $this->extension = $extension; + public function __construct( + private string $extension = 'yml', + ) { } public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string diff --git a/app/vendor/symfony/translation/Exception/IncompleteDsnException.php b/app/vendor/symfony/translation/Exception/IncompleteDsnException.php index b304bde01..6c9247f89 100644 --- a/app/vendor/symfony/translation/Exception/IncompleteDsnException.php +++ b/app/vendor/symfony/translation/Exception/IncompleteDsnException.php @@ -16,7 +16,7 @@ class IncompleteDsnException extends InvalidArgumentException public function __construct(string $message, ?string $dsn = null, ?\Throwable $previous = null) { if ($dsn) { - $message = sprintf('Invalid "%s" provider DSN: ', $dsn).$message; + $message = \sprintf('Invalid "%s" provider DSN: ', $dsn).$message; } parent::__construct($message, 0, $previous); diff --git a/app/vendor/symfony/translation/Exception/MissingRequiredOptionException.php b/app/vendor/symfony/translation/Exception/MissingRequiredOptionException.php index 46152e254..8cef03a81 100644 --- a/app/vendor/symfony/translation/Exception/MissingRequiredOptionException.php +++ b/app/vendor/symfony/translation/Exception/MissingRequiredOptionException.php @@ -18,7 +18,7 @@ class MissingRequiredOptionException extends IncompleteDsnException { public function __construct(string $option, ?string $dsn = null, ?\Throwable $previous = null) { - $message = sprintf('The option "%s" is required but missing.', $option); + $message = \sprintf('The option "%s" is required but missing.', $option); parent::__construct($message, $dsn, $previous); } diff --git a/app/vendor/symfony/translation/Exception/ProviderException.php b/app/vendor/symfony/translation/Exception/ProviderException.php index f2981f58b..70e93fc1b 100644 --- a/app/vendor/symfony/translation/Exception/ProviderException.php +++ b/app/vendor/symfony/translation/Exception/ProviderException.php @@ -18,12 +18,14 @@ */ class ProviderException extends RuntimeException implements ProviderExceptionInterface { - private ResponseInterface $response; private string $debug; - public function __construct(string $message, ResponseInterface $response, int $code = 0, ?\Exception $previous = null) - { - $this->response = $response; + public function __construct( + string $message, + private ResponseInterface $response, + int $code = 0, + ?\Exception $previous = null, + ) { $this->debug = $response->getInfo('debug') ?? ''; parent::__construct($message, $code, $previous); diff --git a/app/vendor/symfony/translation/Exception/UnsupportedSchemeException.php b/app/vendor/symfony/translation/Exception/UnsupportedSchemeException.php index 8d3295184..ca18444e4 100644 --- a/app/vendor/symfony/translation/Exception/UnsupportedSchemeException.php +++ b/app/vendor/symfony/translation/Exception/UnsupportedSchemeException.php @@ -43,14 +43,14 @@ public function __construct(Dsn $dsn, ?string $name = null, array $supported = [ } $package = self::SCHEME_TO_PACKAGE_MAP[$provider] ?? null; if ($package && !class_exists($package['class'])) { - parent::__construct(sprintf('Unable to synchronize translations via "%s" as the provider is not installed. Try running "composer require %s".', $provider, $package['package'])); + parent::__construct(\sprintf('Unable to synchronize translations via "%s" as the provider is not installed. Try running "composer require %s".', $provider, $package['package'])); return; } - $message = sprintf('The "%s" scheme is not supported', $dsn->getScheme()); + $message = \sprintf('The "%s" scheme is not supported', $dsn->getScheme()); if ($name && $supported) { - $message .= sprintf('; supported schemes for translation provider "%s" are: "%s"', $name, implode('", "', $supported)); + $message .= \sprintf('; supported schemes for translation provider "%s" are: "%s"', $name, implode('", "', $supported)); } parent::__construct($message.'.'); diff --git a/app/vendor/symfony/translation/Extractor/AbstractFileExtractor.php b/app/vendor/symfony/translation/Extractor/AbstractFileExtractor.php index a6198feb0..da4a929f0 100644 --- a/app/vendor/symfony/translation/Extractor/AbstractFileExtractor.php +++ b/app/vendor/symfony/translation/Extractor/AbstractFileExtractor.php @@ -49,7 +49,7 @@ private function toSplFileInfo(string $file): \SplFileInfo protected function isFile(string $file): bool { if (!is_file($file)) { - throw new InvalidArgumentException(sprintf('The "%s" file does not exist.', $file)); + throw new InvalidArgumentException(\sprintf('The "%s" file does not exist.', $file)); } return true; diff --git a/app/vendor/symfony/translation/Extractor/PhpAstExtractor.php b/app/vendor/symfony/translation/Extractor/PhpAstExtractor.php index 06fc77de3..a5375f480 100644 --- a/app/vendor/symfony/translation/Extractor/PhpAstExtractor.php +++ b/app/vendor/symfony/translation/Extractor/PhpAstExtractor.php @@ -36,7 +36,7 @@ public function __construct( private string $prefix = '', ) { if (!class_exists(ParserFactory::class)) { - throw new \LogicException(sprintf('You cannot use "%s" as the "nikic/php-parser" package is not installed. Try running "composer require nikic/php-parser".', static::class)); + throw new \LogicException(\sprintf('You cannot use "%s" as the "nikic/php-parser" package is not installed. Try running "composer require nikic/php-parser".', static::class)); } $this->parser = (new ParserFactory())->createForHostVersion(); @@ -77,7 +77,7 @@ protected function canBeExtracted(string $file): bool protected function extractFromDirectory(array|string $resource): iterable|Finder { if (!class_exists(Finder::class)) { - throw new \LogicException(sprintf('You cannot use "%s" as the "symfony/finder" package is not installed. Try running "composer require symfony/finder".', static::class)); + throw new \LogicException(\sprintf('You cannot use "%s" as the "symfony/finder" package is not installed. Try running "composer require symfony/finder".', static::class)); } return (new Finder())->files()->name('*.php')->in($resource); diff --git a/app/vendor/symfony/translation/Formatter/IntlFormatter.php b/app/vendor/symfony/translation/Formatter/IntlFormatter.php index e62de253f..87cb00733 100644 --- a/app/vendor/symfony/translation/Formatter/IntlFormatter.php +++ b/app/vendor/symfony/translation/Formatter/IntlFormatter.php @@ -37,7 +37,7 @@ public function formatIntl(string $message, string $locale, array $parameters = try { $this->cache[$locale][$message] = $formatter = new \MessageFormatter($locale, $message); } catch (\IntlException $e) { - throw new InvalidArgumentException(sprintf('Invalid message format (error #%d): ', intl_get_error_code()).intl_get_error_message(), 0, $e); + throw new InvalidArgumentException(\sprintf('Invalid message format (error #%d): ', intl_get_error_code()).intl_get_error_message(), 0, $e); } } @@ -49,7 +49,7 @@ public function formatIntl(string $message, string $locale, array $parameters = } if (false === $message = $formatter->format($parameters)) { - throw new InvalidArgumentException(sprintf('Unable to format message (error #%s): ', $formatter->getErrorCode()).$formatter->getErrorMessage()); + throw new InvalidArgumentException(\sprintf('Unable to format message (error #%s): ', $formatter->getErrorCode()).$formatter->getErrorMessage()); } return $message; diff --git a/app/vendor/symfony/translation/Loader/CsvFileLoader.php b/app/vendor/symfony/translation/Loader/CsvFileLoader.php index 1cc17f6b3..9b610f656 100644 --- a/app/vendor/symfony/translation/Loader/CsvFileLoader.php +++ b/app/vendor/symfony/translation/Loader/CsvFileLoader.php @@ -22,6 +22,9 @@ class CsvFileLoader extends FileLoader { private string $delimiter = ';'; private string $enclosure = '"'; + /** + * @deprecated since Symfony 7.2, to be removed in 8.0 + */ private string $escape = ''; protected function loadResource(string $resource): array @@ -31,7 +34,7 @@ protected function loadResource(string $resource): array try { $file = new \SplFileObject($resource, 'rb'); } catch (\RuntimeException $e) { - throw new NotFoundResourceException(sprintf('Error opening file "%s".', $resource), 0, $e); + throw new NotFoundResourceException(\sprintf('Error opening file "%s".', $resource), 0, $e); } $file->setFlags(\SplFileObject::READ_CSV | \SplFileObject::SKIP_EMPTY); @@ -57,6 +60,10 @@ public function setCsvControl(string $delimiter = ';', string $enclosure = '"', { $this->delimiter = $delimiter; $this->enclosure = $enclosure; + if ('' !== $escape) { + trigger_deprecation('symfony/translation', '7.2', 'The "escape" parameter of the "%s" method is deprecated. It will be removed in 8.0.', __METHOD__); + } + $this->escape = $escape; } } diff --git a/app/vendor/symfony/translation/Loader/FileLoader.php b/app/vendor/symfony/translation/Loader/FileLoader.php index 877c3bbc7..94f6e2022 100644 --- a/app/vendor/symfony/translation/Loader/FileLoader.php +++ b/app/vendor/symfony/translation/Loader/FileLoader.php @@ -24,11 +24,11 @@ abstract class FileLoader extends ArrayLoader public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue { if (!stream_is_local($resource)) { - throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); + throw new InvalidResourceException(\sprintf('This is not a local file "%s".', $resource)); } if (!file_exists($resource)) { - throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); + throw new NotFoundResourceException(\sprintf('File "%s" not found.', $resource)); } $messages = $this->loadResource($resource); @@ -38,7 +38,7 @@ public function load(mixed $resource, string $locale, string $domain = 'messages // not an array if (!\is_array($messages)) { - throw new InvalidResourceException(sprintf('Unable to load file "%s".', $resource)); + throw new InvalidResourceException(\sprintf('Unable to load file "%s".', $resource)); } $catalogue = parent::load($messages, $locale, $domain); diff --git a/app/vendor/symfony/translation/Loader/IcuDatFileLoader.php b/app/vendor/symfony/translation/Loader/IcuDatFileLoader.php index 76e4e7f02..1af864303 100644 --- a/app/vendor/symfony/translation/Loader/IcuDatFileLoader.php +++ b/app/vendor/symfony/translation/Loader/IcuDatFileLoader.php @@ -26,11 +26,11 @@ class IcuDatFileLoader extends IcuResFileLoader public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue { if (!stream_is_local($resource.'.dat')) { - throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); + throw new InvalidResourceException(\sprintf('This is not a local file "%s".', $resource)); } if (!file_exists($resource.'.dat')) { - throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); + throw new NotFoundResourceException(\sprintf('File "%s" not found.', $resource)); } try { @@ -40,7 +40,7 @@ public function load(mixed $resource, string $locale, string $domain = 'messages } if (!$rb) { - throw new InvalidResourceException(sprintf('Cannot load resource "%s".', $resource)); + throw new InvalidResourceException(\sprintf('Cannot load resource "%s".', $resource)); } elseif (intl_is_failure($rb->getErrorCode())) { throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode()); } diff --git a/app/vendor/symfony/translation/Loader/IcuResFileLoader.php b/app/vendor/symfony/translation/Loader/IcuResFileLoader.php index 949dd9792..8ada43dca 100644 --- a/app/vendor/symfony/translation/Loader/IcuResFileLoader.php +++ b/app/vendor/symfony/translation/Loader/IcuResFileLoader.php @@ -26,11 +26,11 @@ class IcuResFileLoader implements LoaderInterface public function load(mixed $resource, string $locale, string $domain = 'messages'): MessageCatalogue { if (!stream_is_local($resource)) { - throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); + throw new InvalidResourceException(\sprintf('This is not a local file "%s".', $resource)); } if (!is_dir($resource)) { - throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); + throw new NotFoundResourceException(\sprintf('File "%s" not found.', $resource)); } try { @@ -40,7 +40,7 @@ public function load(mixed $resource, string $locale, string $domain = 'messages } if (!$rb) { - throw new InvalidResourceException(sprintf('Cannot load resource "%s".', $resource)); + throw new InvalidResourceException(\sprintf('Cannot load resource "%s".', $resource)); } elseif (intl_is_failure($rb->getErrorCode())) { throw new InvalidResourceException($rb->getErrorMessage(), $rb->getErrorCode()); } diff --git a/app/vendor/symfony/translation/Loader/QtFileLoader.php b/app/vendor/symfony/translation/Loader/QtFileLoader.php index ad1f9f90a..c9554bf55 100644 --- a/app/vendor/symfony/translation/Loader/QtFileLoader.php +++ b/app/vendor/symfony/translation/Loader/QtFileLoader.php @@ -32,17 +32,17 @@ public function load(mixed $resource, string $locale, string $domain = 'messages } if (!stream_is_local($resource)) { - throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); + throw new InvalidResourceException(\sprintf('This is not a local file "%s".', $resource)); } if (!file_exists($resource)) { - throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); + throw new NotFoundResourceException(\sprintf('File "%s" not found.', $resource)); } try { $dom = XmlUtils::loadFile($resource); } catch (\InvalidArgumentException $e) { - throw new InvalidResourceException(sprintf('Unable to load "%s".', $resource), $e->getCode(), $e); + throw new InvalidResourceException(\sprintf('Unable to load "%s".', $resource), $e->getCode(), $e); } $internalErrors = libxml_use_internal_errors(true); diff --git a/app/vendor/symfony/translation/Loader/XliffFileLoader.php b/app/vendor/symfony/translation/Loader/XliffFileLoader.php index c3a276cfb..e76245dac 100644 --- a/app/vendor/symfony/translation/Loader/XliffFileLoader.php +++ b/app/vendor/symfony/translation/Loader/XliffFileLoader.php @@ -36,15 +36,15 @@ public function load(mixed $resource, string $locale, string $domain = 'messages if (!$this->isXmlString($resource)) { if (!stream_is_local($resource)) { - throw new InvalidResourceException(sprintf('This is not a local file "%s".', $resource)); + throw new InvalidResourceException(\sprintf('This is not a local file "%s".', $resource)); } if (!file_exists($resource)) { - throw new NotFoundResourceException(sprintf('File "%s" not found.', $resource)); + throw new NotFoundResourceException(\sprintf('File "%s" not found.', $resource)); } if (!is_file($resource)) { - throw new InvalidResourceException(sprintf('This is neither a file nor an XLIFF string "%s".', $resource)); + throw new InvalidResourceException(\sprintf('This is neither a file nor an XLIFF string "%s".', $resource)); } } @@ -55,11 +55,11 @@ public function load(mixed $resource, string $locale, string $domain = 'messages $dom = XmlUtils::loadFile($resource); } } catch (\InvalidArgumentException|XmlParsingException|InvalidXmlException $e) { - throw new InvalidResourceException(sprintf('Unable to load "%s": ', $resource).$e->getMessage(), $e->getCode(), $e); + throw new InvalidResourceException(\sprintf('Unable to load "%s": ', $resource).$e->getMessage(), $e->getCode(), $e); } if ($errors = XliffUtils::validateSchema($dom)) { - throw new InvalidResourceException(sprintf('Invalid resource provided: "%s"; Errors: ', $resource).XliffUtils::getErrorsAsString($errors)); + throw new InvalidResourceException(\sprintf('Invalid resource provided: "%s"; Errors: ', $resource).XliffUtils::getErrorsAsString($errors)); } $catalogue = new MessageCatalogue($locale); @@ -172,6 +172,13 @@ private function extractXliff2(\DOMDocument $dom, MessageCatalogue $catalogue, s $catalogue->set((string) $source, $target, $domain); $metadata = []; + if ($segment->attributes()) { + $metadata['segment-attributes'] = []; + foreach ($segment->attributes() as $key => $value) { + $metadata['segment-attributes'][$key] = (string) $value; + } + } + if (isset($segment->target) && $segment->target->attributes()) { $metadata['target-attributes'] = []; foreach ($segment->target->attributes() as $key => $value) { diff --git a/app/vendor/symfony/translation/Loader/YamlFileLoader.php b/app/vendor/symfony/translation/Loader/YamlFileLoader.php index 3a155c69e..39d5a0e99 100644 --- a/app/vendor/symfony/translation/Loader/YamlFileLoader.php +++ b/app/vendor/symfony/translation/Loader/YamlFileLoader.php @@ -39,11 +39,11 @@ protected function loadResource(string $resource): array try { $messages = $this->yamlParser->parseFile($resource, Yaml::PARSE_CONSTANT); } catch (ParseException $e) { - throw new InvalidResourceException(sprintf('The file "%s" does not contain valid YAML: ', $resource).$e->getMessage(), 0, $e); + throw new InvalidResourceException(\sprintf('The file "%s" does not contain valid YAML: ', $resource).$e->getMessage(), 0, $e); } if (null !== $messages && !\is_array($messages)) { - throw new InvalidResourceException(sprintf('Unable to load file "%s".', $resource)); + throw new InvalidResourceException(\sprintf('Unable to load file "%s".', $resource)); } return $messages ?: []; diff --git a/app/vendor/symfony/translation/LoggingTranslator.php b/app/vendor/symfony/translation/LoggingTranslator.php index 8c9b26463..84020d8a0 100644 --- a/app/vendor/symfony/translation/LoggingTranslator.php +++ b/app/vendor/symfony/translation/LoggingTranslator.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Translation; use Psr\Log\LoggerInterface; -use Symfony\Component\Translation\Exception\InvalidArgumentException; use Symfony\Contracts\Translation\LocaleAwareInterface; use Symfony\Contracts\Translation\TranslatorInterface; @@ -21,20 +20,10 @@ */ class LoggingTranslator implements TranslatorInterface, TranslatorBagInterface, LocaleAwareInterface { - private TranslatorInterface $translator; - private LoggerInterface $logger; - - /** - * @param TranslatorInterface&TranslatorBagInterface&LocaleAwareInterface $translator The translator must implement TranslatorBagInterface - */ - public function __construct(TranslatorInterface $translator, LoggerInterface $logger) - { - if (!$translator instanceof TranslatorBagInterface || !$translator instanceof LocaleAwareInterface) { - throw new InvalidArgumentException(sprintf('The Translator "%s" must implement TranslatorInterface, TranslatorBagInterface and LocaleAwareInterface.', get_debug_type($translator))); - } - - $this->translator = $translator; - $this->logger = $logger; + public function __construct( + private TranslatorInterface&TranslatorBagInterface&LocaleAwareInterface $translator, + private LoggerInterface $logger, + ) { } public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string @@ -53,7 +42,7 @@ public function setLocale(string $locale): void return; } - $this->logger->debug(sprintf('The locale of the translator has changed from "%s" to "%s".', $prev, $locale)); + $this->logger->debug(\sprintf('The locale of the translator has changed from "%s" to "%s".', $prev, $locale)); } public function getLocale(): string diff --git a/app/vendor/symfony/translation/MessageCatalogue.php b/app/vendor/symfony/translation/MessageCatalogue.php index f0cc6b321..2d229f2dd 100644 --- a/app/vendor/symfony/translation/MessageCatalogue.php +++ b/app/vendor/symfony/translation/MessageCatalogue.php @@ -19,21 +19,19 @@ */ class MessageCatalogue implements MessageCatalogueInterface, MetadataAwareInterface, CatalogueMetadataAwareInterface { - private array $messages = []; private array $metadata = []; private array $catalogueMetadata = []; private array $resources = []; - private string $locale; private ?MessageCatalogueInterface $fallbackCatalogue = null; private ?self $parent = null; /** * @param array $messages An array of messages classified by domain */ - public function __construct(string $locale, array $messages = []) - { - $this->locale = $locale; - $this->messages = $messages; + public function __construct( + private string $locale, + private array $messages = [], + ) { } public function getLocale(): string @@ -143,7 +141,7 @@ public function add(array $messages, string $domain = 'messages'): void public function addCatalogue(MessageCatalogueInterface $catalogue): void { if ($catalogue->getLocale() !== $this->locale) { - throw new LogicException(sprintf('Cannot add a catalogue for locale "%s" as the current locale for this catalogue is "%s".', $catalogue->getLocale(), $this->locale)); + throw new LogicException(\sprintf('Cannot add a catalogue for locale "%s" as the current locale for this catalogue is "%s".', $catalogue->getLocale(), $this->locale)); } foreach ($catalogue->all() as $domain => $messages) { @@ -175,14 +173,14 @@ public function addFallbackCatalogue(MessageCatalogueInterface $catalogue): void $c = $catalogue; while ($c = $c->getFallbackCatalogue()) { if ($c->getLocale() === $this->getLocale()) { - throw new LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale())); + throw new LogicException(\sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale())); } } $c = $this; do { if ($c->getLocale() === $catalogue->getLocale()) { - throw new LogicException(sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale())); + throw new LogicException(\sprintf('Circular reference detected when adding a fallback catalogue for locale "%s".', $catalogue->getLocale())); } foreach ($catalogue->getResources() as $resource) { diff --git a/app/vendor/symfony/translation/Provider/FilteringProvider.php b/app/vendor/symfony/translation/Provider/FilteringProvider.php index d4465b9fd..cc11dc3d1 100644 --- a/app/vendor/symfony/translation/Provider/FilteringProvider.php +++ b/app/vendor/symfony/translation/Provider/FilteringProvider.php @@ -21,15 +21,11 @@ */ class FilteringProvider implements ProviderInterface { - private ProviderInterface $provider; - private array $locales; - private array $domains; - - public function __construct(ProviderInterface $provider, array $locales, array $domains = []) - { - $this->provider = $provider; - $this->locales = $locales; - $this->domains = $domains; + public function __construct( + private ProviderInterface $provider, + private array $locales, + private array $domains = [], + ) { } public function __toString(): string diff --git a/app/vendor/symfony/translation/Provider/TranslationProviderCollection.php b/app/vendor/symfony/translation/Provider/TranslationProviderCollection.php index b917415ba..878998fec 100644 --- a/app/vendor/symfony/translation/Provider/TranslationProviderCollection.php +++ b/app/vendor/symfony/translation/Provider/TranslationProviderCollection.php @@ -44,7 +44,7 @@ public function has(string $name): bool public function get(string $name): ProviderInterface { if (!$this->has($name)) { - throw new InvalidArgumentException(sprintf('Provider "%s" not found. Available: "%s".', $name, (string) $this)); + throw new InvalidArgumentException(\sprintf('Provider "%s" not found. Available: "%s".', $name, (string) $this)); } return $this->providers[$name]; diff --git a/app/vendor/symfony/translation/Provider/TranslationProviderCollectionFactory.php b/app/vendor/symfony/translation/Provider/TranslationProviderCollectionFactory.php index 6300c8750..2c8c55159 100644 --- a/app/vendor/symfony/translation/Provider/TranslationProviderCollectionFactory.php +++ b/app/vendor/symfony/translation/Provider/TranslationProviderCollectionFactory.php @@ -18,16 +18,13 @@ */ class TranslationProviderCollectionFactory { - private iterable $factories; - private array $enabledLocales; - /** * @param iterable $factories */ - public function __construct(iterable $factories, array $enabledLocales) - { - $this->factories = $factories; - $this->enabledLocales = $enabledLocales; + public function __construct( + private iterable $factories, + private array $enabledLocales, + ) { } public function fromConfig(array $config): TranslationProviderCollection diff --git a/app/vendor/symfony/translation/PseudoLocalizationTranslator.php b/app/vendor/symfony/translation/PseudoLocalizationTranslator.php index f26909f5e..5d56d2cc1 100644 --- a/app/vendor/symfony/translation/PseudoLocalizationTranslator.php +++ b/app/vendor/symfony/translation/PseudoLocalizationTranslator.php @@ -20,7 +20,6 @@ final class PseudoLocalizationTranslator implements TranslatorInterface { private const EXPANSION_CHARACTER = '~'; - private TranslatorInterface $translator; private bool $accents; private float $expansionFactor; private bool $brackets; @@ -64,8 +63,10 @@ final class PseudoLocalizationTranslator implements TranslatorInterface * description: the list of HTML attributes whose values can be altered - it is only useful when the "parse_html" option is set to true * example: if ["title"], and with the "accents" option set to true, "Profile" => "Þŕöƒîļé" - if "title" was not in the "localizable_html_attributes" list, the title attribute data would be left unchanged. */ - public function __construct(TranslatorInterface $translator, array $options = []) - { + public function __construct( + private TranslatorInterface $translator, + array $options = [], + ) { $this->translator = $translator; $this->accents = $options['accents'] ?? true; diff --git a/app/vendor/symfony/translation/Test/AbstractProviderFactoryTestCase.php b/app/vendor/symfony/translation/Test/AbstractProviderFactoryTestCase.php new file mode 100644 index 000000000..75e7dd2d3 --- /dev/null +++ b/app/vendor/symfony/translation/Test/AbstractProviderFactoryTestCase.php @@ -0,0 +1,79 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Test; + +use PHPUnit\Framework\Attributes\DataProvider; +use PHPUnit\Framework\TestCase; +use Symfony\Component\Translation\Exception\UnsupportedSchemeException; +use Symfony\Component\Translation\Provider\Dsn; +use Symfony\Component\Translation\Provider\ProviderFactoryInterface; + +abstract class AbstractProviderFactoryTestCase extends TestCase +{ + abstract public function createFactory(): ProviderFactoryInterface; + + /** + * @return iterable + */ + abstract public static function supportsProvider(): iterable; + + /** + * @return iterable + */ + abstract public static function createProvider(): iterable; + + /** + * @return iterable + */ + abstract public static function unsupportedSchemeProvider(): iterable; + + /** + * @dataProvider supportsProvider + */ + #[DataProvider('supportsProvider')] + public function testSupports(bool $expected, string $dsn) + { + $factory = $this->createFactory(); + + $this->assertSame($expected, $factory->supports(new Dsn($dsn))); + } + + /** + * @dataProvider createProvider + */ + #[DataProvider('createProvider')] + public function testCreate(string $expected, string $dsn) + { + $factory = $this->createFactory(); + $provider = $factory->create(new Dsn($dsn)); + + $this->assertSame($expected, (string) $provider); + } + + /** + * @dataProvider unsupportedSchemeProvider + */ + #[DataProvider('unsupportedSchemeProvider')] + public function testUnsupportedSchemeException(string $dsn, ?string $message = null) + { + $factory = $this->createFactory(); + + $dsn = new Dsn($dsn); + + $this->expectException(UnsupportedSchemeException::class); + if (null !== $message) { + $this->expectExceptionMessage($message); + } + + $factory->create($dsn); + } +} diff --git a/app/vendor/symfony/translation/Test/IncompleteDsnTestTrait.php b/app/vendor/symfony/translation/Test/IncompleteDsnTestTrait.php new file mode 100644 index 000000000..892f6bf72 --- /dev/null +++ b/app/vendor/symfony/translation/Test/IncompleteDsnTestTrait.php @@ -0,0 +1,42 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Translation\Test; + +use PHPUnit\Framework\Attributes\DataProvider; +use Symfony\Component\Translation\Exception\IncompleteDsnException; +use Symfony\Component\Translation\Provider\Dsn; + +trait IncompleteDsnTestTrait +{ + /** + * @return iterable + */ + abstract public static function incompleteDsnProvider(): iterable; + + /** + * @dataProvider incompleteDsnProvider + */ + #[DataProvider('incompleteDsnProvider')] + public function testIncompleteDsnException(string $dsn, ?string $message = null) + { + $factory = $this->createFactory(); + + $dsn = new Dsn($dsn); + + $this->expectException(IncompleteDsnException::class); + if (null !== $message) { + $this->expectExceptionMessage($message); + } + + $factory->create($dsn); + } +} diff --git a/app/vendor/symfony/translation/Test/ProviderFactoryTestCase.php b/app/vendor/symfony/translation/Test/ProviderFactoryTestCase.php index 95ffcb1e5..e82f32907 100644 --- a/app/vendor/symfony/translation/Test/ProviderFactoryTestCase.php +++ b/app/vendor/symfony/translation/Test/ProviderFactoryTestCase.php @@ -12,15 +12,10 @@ namespace Symfony\Component\Translation\Test; use PHPUnit\Framework\MockObject\MockObject; -use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\Translation\Dumper\XliffFileDumper; -use Symfony\Component\Translation\Exception\IncompleteDsnException; -use Symfony\Component\Translation\Exception\UnsupportedSchemeException; use Symfony\Component\Translation\Loader\LoaderInterface; -use Symfony\Component\Translation\Provider\Dsn; -use Symfony\Component\Translation\Provider\ProviderFactoryInterface; use Symfony\Component\Translation\TranslatorBagInterface; use Symfony\Contracts\HttpClient\HttpClientInterface; @@ -28,9 +23,13 @@ * A test case to ease testing a translation provider factory. * * @author Mathieu Santostefano + * + * @deprecated since Symfony 7.2, use AbstractProviderFactoryTestCase instead */ -abstract class ProviderFactoryTestCase extends TestCase +abstract class ProviderFactoryTestCase extends AbstractProviderFactoryTestCase { + use IncompleteDsnTestTrait; + protected HttpClientInterface $client; protected LoggerInterface|MockObject $logger; protected string $defaultLocale; @@ -38,20 +37,8 @@ abstract class ProviderFactoryTestCase extends TestCase protected XliffFileDumper|MockObject $xliffFileDumper; protected TranslatorBagInterface|MockObject $translatorBag; - abstract public function createFactory(): ProviderFactoryInterface; - - /** - * @return iterable - */ - abstract public static function supportsProvider(): iterable; - /** - * @return iterable - */ - abstract public static function createProvider(): iterable; - - /** - * @return iterable + * @return iterable */ public static function unsupportedSchemeProvider(): iterable { @@ -59,68 +46,13 @@ public static function unsupportedSchemeProvider(): iterable } /** - * @return iterable + * @return iterable */ public static function incompleteDsnProvider(): iterable { return []; } - /** - * @dataProvider supportsProvider - */ - public function testSupports(bool $expected, string $dsn) - { - $factory = $this->createFactory(); - - $this->assertSame($expected, $factory->supports(new Dsn($dsn))); - } - - /** - * @dataProvider createProvider - */ - public function testCreate(string $expected, string $dsn) - { - $factory = $this->createFactory(); - $provider = $factory->create(new Dsn($dsn)); - - $this->assertSame($expected, (string) $provider); - } - - /** - * @dataProvider unsupportedSchemeProvider - */ - public function testUnsupportedSchemeException(string $dsn, ?string $message = null) - { - $factory = $this->createFactory(); - - $dsn = new Dsn($dsn); - - $this->expectException(UnsupportedSchemeException::class); - if (null !== $message) { - $this->expectExceptionMessage($message); - } - - $factory->create($dsn); - } - - /** - * @dataProvider incompleteDsnProvider - */ - public function testIncompleteDsnException(string $dsn, ?string $message = null) - { - $factory = $this->createFactory(); - - $dsn = new Dsn($dsn); - - $this->expectException(IncompleteDsnException::class); - if (null !== $message) { - $this->expectExceptionMessage($message); - } - - $factory->create($dsn); - } - protected function getClient(): HttpClientInterface { return $this->client ??= new MockHttpClient(); diff --git a/app/vendor/symfony/translation/Test/ProviderTestCase.php b/app/vendor/symfony/translation/Test/ProviderTestCase.php index a8fa0b8bb..7907986cb 100644 --- a/app/vendor/symfony/translation/Test/ProviderTestCase.php +++ b/app/vendor/symfony/translation/Test/ProviderTestCase.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Translation\Test; +use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; use Psr\Log\LoggerInterface; @@ -45,6 +46,7 @@ abstract public static function toStringProvider(): iterable; /** * @dataProvider toStringProvider */ + #[DataProvider('toStringProvider')] public function testToString(ProviderInterface $provider, string $expected) { $this->assertSame($expected, (string) $provider); diff --git a/app/vendor/symfony/translation/TranslatableMessage.php b/app/vendor/symfony/translation/TranslatableMessage.php index c591e68c2..74b77f685 100644 --- a/app/vendor/symfony/translation/TranslatableMessage.php +++ b/app/vendor/symfony/translation/TranslatableMessage.php @@ -19,15 +19,11 @@ */ class TranslatableMessage implements TranslatableInterface { - private string $message; - private array $parameters; - private ?string $domain; - - public function __construct(string $message, array $parameters = [], ?string $domain = null) - { - $this->message = $message; - $this->parameters = $parameters; - $this->domain = $domain; + public function __construct( + private string $message, + private array $parameters = [], + private ?string $domain = null, + ) { } public function __toString(): string diff --git a/app/vendor/symfony/translation/Translator.php b/app/vendor/symfony/translation/Translator.php index 7dad47513..7c0a458e8 100644 --- a/app/vendor/symfony/translation/Translator.php +++ b/app/vendor/symfony/translation/Translator.php @@ -54,12 +54,6 @@ class Translator implements TranslatorInterface, TranslatorBagInterface, LocaleA private MessageFormatterInterface $formatter; - private ?string $cacheDir; - - private bool $debug; - - private array $cacheVary; - private ?ConfigCacheFactoryInterface $configCacheFactory; private array $parentLocales; @@ -69,14 +63,16 @@ class Translator implements TranslatorInterface, TranslatorBagInterface, LocaleA /** * @throws InvalidArgumentException If a locale contains invalid characters */ - public function __construct(string $locale, ?MessageFormatterInterface $formatter = null, ?string $cacheDir = null, bool $debug = false, array $cacheVary = []) - { + public function __construct( + string $locale, + ?MessageFormatterInterface $formatter = null, + private ?string $cacheDir = null, + private bool $debug = false, + private array $cacheVary = [], + ) { $this->setLocale($locale); $this->formatter = $formatter ??= new MessageFormatter(); - $this->cacheDir = $cacheDir; - $this->debug = $debug; - $this->cacheVary = $cacheVary; $this->hasIntlFormatter = $formatter instanceof IntlFormatterInterface; } @@ -272,7 +268,7 @@ private function dumpCatalogue(string $locale, ConfigCacheInterface $cache): voi $this->initializeCatalogue($locale); $fallbackContent = $this->getFallbackContent($this->catalogues[$locale]); - $content = sprintf(<<addFallbackCatalogue($catalogue%s); @@ -338,10 +334,10 @@ protected function doLoadCatalogue(string $locale): void foreach ($this->resources[$locale] as $resource) { if (!isset($this->loaders[$resource[0]])) { if (\is_string($resource[1])) { - throw new RuntimeException(sprintf('No loader is registered for the "%s" format when loading the "%s" resource.', $resource[0], $resource[1])); + throw new RuntimeException(\sprintf('No loader is registered for the "%s" format when loading the "%s" resource.', $resource[0], $resource[1])); } - throw new RuntimeException(sprintf('No loader is registered for the "%s" format.', $resource[0])); + throw new RuntimeException(\sprintf('No loader is registered for the "%s" format.', $resource[0])); } $this->catalogues[$locale]->addCatalogue($this->loaders[$resource[0]]->load($resource[1], $locale, $resource[2])); } @@ -415,7 +411,7 @@ protected function computeFallbackLocales(string $locale): array protected function assertValidLocale(string $locale): void { if (!preg_match('/^[a-z0-9@_\\.\\-]*$/i', $locale)) { - throw new InvalidArgumentException(sprintf('Invalid "%s" locale.', $locale)); + throw new InvalidArgumentException(\sprintf('Invalid "%s" locale.', $locale)); } } diff --git a/app/vendor/symfony/translation/Util/XliffUtils.php b/app/vendor/symfony/translation/Util/XliffUtils.php index 335c34beb..e76e12284 100644 --- a/app/vendor/symfony/translation/Util/XliffUtils.php +++ b/app/vendor/symfony/translation/Util/XliffUtils.php @@ -41,7 +41,7 @@ public static function getVersionNumber(\DOMDocument $dom): string $namespace = $xliff->attributes->getNamedItem('xmlns'); if ($namespace) { if (0 !== substr_compare('urn:oasis:names:tc:xliff:document:', $namespace->nodeValue, 0, 34)) { - throw new InvalidArgumentException(sprintf('Not a valid XLIFF namespace "%s".', $namespace)); + throw new InvalidArgumentException(\sprintf('Not a valid XLIFF namespace "%s".', $namespace)); } return substr($namespace, 34); @@ -113,7 +113,7 @@ public static function getErrorsAsString(array $xmlErrors): string $errorsAsString = ''; foreach ($xmlErrors as $error) { - $errorsAsString .= sprintf("[%s %s] %s (in %s - line %d, column %d)\n", + $errorsAsString .= \sprintf("[%s %s] %s (in %s - line %d, column %d)\n", \LIBXML_ERR_WARNING === $error['level'] ? 'WARNING' : 'ERROR', $error['code'], $error['message'], @@ -135,7 +135,7 @@ private static function getSchema(string $xliffVersion): string $schemaSource = file_get_contents(__DIR__.'/../Resources/schemas/xliff-core-2.0.xsd'); $xmlUri = 'informativeCopiesOf3rdPartySchemas/w3c/xml.xsd'; } else { - throw new InvalidArgumentException(sprintf('No support implemented for loading XLIFF version "%s".', $xliffVersion)); + throw new InvalidArgumentException(\sprintf('No support implemented for loading XLIFF version "%s".', $xliffVersion)); } return self::fixXmlLocation($schemaSource, $xmlUri); diff --git a/app/vendor/symfony/translation/Writer/TranslationWriter.php b/app/vendor/symfony/translation/Writer/TranslationWriter.php index 21604ef18..be3f6bf36 100644 --- a/app/vendor/symfony/translation/Writer/TranslationWriter.php +++ b/app/vendor/symfony/translation/Writer/TranslationWriter.php @@ -55,14 +55,14 @@ public function getFormats(): array public function write(MessageCatalogue $catalogue, string $format, array $options = []): void { if (!isset($this->dumpers[$format])) { - throw new InvalidArgumentException(sprintf('There is no dumper associated with format "%s".', $format)); + throw new InvalidArgumentException(\sprintf('There is no dumper associated with format "%s".', $format)); } // get the right dumper $dumper = $this->dumpers[$format]; if (isset($options['path']) && !is_dir($options['path']) && !@mkdir($options['path'], 0777, true) && !is_dir($options['path'])) { - throw new RuntimeException(sprintf('Translation Writer was not able to create directory "%s".', $options['path'])); + throw new RuntimeException(\sprintf('Translation Writer was not able to create directory "%s".', $options['path'])); } // save diff --git a/app/vendor/symfony/translation/composer.json b/app/vendor/symfony/translation/composer.json index b793e4c98..1db162159 100644 --- a/app/vendor/symfony/translation/composer.json +++ b/app/vendor/symfony/translation/composer.json @@ -18,7 +18,8 @@ "require": { "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { "nikic/php-parser": "^4.18|^5.0", diff --git a/app/vendor/symfony/var-exporter/CHANGELOG.md b/app/vendor/symfony/var-exporter/CHANGELOG.md index fdca002cb..74333ea7b 100644 --- a/app/vendor/symfony/var-exporter/CHANGELOG.md +++ b/app/vendor/symfony/var-exporter/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +7.2 +--- + + * Allow reinitializing lazy objects with a new initializer + 6.4 --- diff --git a/app/vendor/symfony/var-exporter/Exception/ClassNotFoundException.php b/app/vendor/symfony/var-exporter/Exception/ClassNotFoundException.php index 379a76517..2acecc470 100644 --- a/app/vendor/symfony/var-exporter/Exception/ClassNotFoundException.php +++ b/app/vendor/symfony/var-exporter/Exception/ClassNotFoundException.php @@ -15,6 +15,6 @@ class ClassNotFoundException extends \Exception implements ExceptionInterface { public function __construct(string $class, ?\Throwable $previous = null) { - parent::__construct(sprintf('Class "%s" not found.', $class), 0, $previous); + parent::__construct(\sprintf('Class "%s" not found.', $class), 0, $previous); } } diff --git a/app/vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php b/app/vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php index b9ba225d8..bc2bcaa20 100644 --- a/app/vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php +++ b/app/vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php @@ -15,6 +15,6 @@ class NotInstantiableTypeException extends \Exception implements ExceptionInterf { public function __construct(string $type, ?\Throwable $previous = null) { - parent::__construct(sprintf('Type "%s" is not instantiable.', $type), 0, $previous); + parent::__construct(\sprintf('Type "%s" is not instantiable.', $type), 0, $previous); } } diff --git a/app/vendor/symfony/var-exporter/Internal/Exporter.php b/app/vendor/symfony/var-exporter/Internal/Exporter.php index 9f4f59387..6544ae244 100644 --- a/app/vendor/symfony/var-exporter/Internal/Exporter.php +++ b/app/vendor/symfony/var-exporter/Internal/Exporter.php @@ -79,7 +79,7 @@ public static function prepare($values, $objectsPool, &$refsPool, &$objectsCount if ($reflector->hasMethod('__serialize')) { if (!$reflector->getMethod('__serialize')->isPublic()) { - throw new \Error(sprintf('Call to %s method "%s::__serialize()".', $reflector->getMethod('__serialize')->isProtected() ? 'protected' : 'private', $class)); + throw new \Error(\sprintf('Call to %s method "%s::__serialize()".', $reflector->getMethod('__serialize')->isProtected() ? 'protected' : 'private', $class)); } if (!\is_array($serializeProperties = $value->__serialize())) { @@ -170,7 +170,7 @@ public static function prepare($values, $objectsPool, &$refsPool, &$objectsCount } if ($sleep) { foreach ($sleep as $n => $v) { - trigger_error(sprintf('serialize(): "%s" returned as member variable from __sleep() but does not exist', $n), \E_USER_NOTICE); + trigger_error(\sprintf('serialize(): "%s" returned as member variable from __sleep() but does not exist', $n), \E_USER_NOTICE); } } if (method_exists($class, '__unserialize')) { @@ -223,10 +223,10 @@ public static function export($value, $indent = '') $subIndent = $indent.' '; if (\is_string($value)) { - $code = sprintf("'%s'", addcslashes($value, "'\\")); + $code = \sprintf("'%s'", addcslashes($value, "'\\")); $code = preg_replace_callback("/((?:[\\0\\r\\n]|\u{202A}|\u{202B}|\u{202D}|\u{202E}|\u{2066}|\u{2067}|\u{2068}|\u{202C}|\u{2069})++)(.)/", function ($m) use ($subIndent) { - $m[1] = sprintf('\'."%s".\'', str_replace( + $m[1] = \sprintf('\'."%s".\'', str_replace( ["\0", "\r", "\n", "\u{202A}", "\u{202B}", "\u{202D}", "\u{202E}", "\u{2066}", "\u{2067}", "\u{2068}", "\u{202C}", "\u{2069}", '\n\\'], ['\0', '\r', '\n', '\u{202A}', '\u{202B}', '\u{202D}', '\u{202E}', '\u{2066}', '\u{2067}', '\u{2068}', '\u{202C}', '\u{2069}', '\n"'."\n".$subIndent.'."\\'], $m[1] @@ -284,7 +284,7 @@ public static function export($value, $indent = '') return self::exportHydrator($value, $indent, $subIndent); } - throw new \UnexpectedValueException(sprintf('Cannot export value of type "%s".', get_debug_type($value))); + throw new \UnexpectedValueException(\sprintf('Cannot export value of type "%s".', get_debug_type($value))); } private static function exportRegistry(Registry $value, string $indent, string $subIndent): string diff --git a/app/vendor/symfony/var-exporter/Internal/Hydrator.php b/app/vendor/symfony/var-exporter/Internal/Hydrator.php index 65fdcd1d5..40923634c 100644 --- a/app/vendor/symfony/var-exporter/Internal/Hydrator.php +++ b/app/vendor/symfony/var-exporter/Internal/Hydrator.php @@ -64,11 +64,11 @@ public static function getHydrator($class) return $baseHydrator; case 'ErrorException': - return $baseHydrator->bindTo(null, new class() extends \ErrorException { + return $baseHydrator->bindTo(null, new class extends \ErrorException { }); case 'TypeError': - return $baseHydrator->bindTo(null, new class() extends \Error { + return $baseHydrator->bindTo(null, new class extends \Error { }); case 'SplObjectStorage': @@ -166,11 +166,11 @@ public static function getSimpleHydrator($class) return $baseHydrator; case 'ErrorException': - return $baseHydrator->bindTo(new \stdClass(), new class() extends \ErrorException { + return $baseHydrator->bindTo(new \stdClass(), new class extends \ErrorException { }); case 'TypeError': - return $baseHydrator->bindTo(new \stdClass(), new class() extends \Error { + return $baseHydrator->bindTo(new \stdClass(), new class extends \Error { }); case 'SplObjectStorage': @@ -260,9 +260,9 @@ public static function getPropertyScopes($class): array continue; } $name = $property->name; + $readonlyScope = null; if (\ReflectionProperty::IS_PRIVATE & $flags) { - $readonlyScope = null; if ($flags & \ReflectionProperty::IS_READONLY) { $readonlyScope = $class; } @@ -270,7 +270,6 @@ public static function getPropertyScopes($class): array continue; } - $readonlyScope = null; if ($flags & \ReflectionProperty::IS_READONLY) { $readonlyScope = $property->class; } diff --git a/app/vendor/symfony/var-exporter/Internal/LazyObjectState.php b/app/vendor/symfony/var-exporter/Internal/LazyObjectState.php index 5fc398e05..30fbff180 100644 --- a/app/vendor/symfony/var-exporter/Internal/LazyObjectState.php +++ b/app/vendor/symfony/var-exporter/Internal/LazyObjectState.php @@ -38,8 +38,8 @@ class LazyObjectState * @param array $skippedProperties */ public function __construct( - public readonly \Closure $initializer, - public readonly array $skippedProperties = [], + public \Closure $initializer, + public array $skippedProperties = [], ) { } diff --git a/app/vendor/symfony/var-exporter/LazyGhostTrait.php b/app/vendor/symfony/var-exporter/LazyGhostTrait.php index fa82cedc4..72a96d424 100644 --- a/app/vendor/symfony/var-exporter/LazyGhostTrait.php +++ b/app/vendor/symfony/var-exporter/LazyGhostTrait.php @@ -27,7 +27,7 @@ trait LazyGhostTrait * Skipped properties should be indexed by their array-cast identifier, see * https://php.net/manual/language.types.array#language.types.array.casting * - * @param (\Closure(static):void $initializer The closure should initialize the object it receives as argument + * @param \Closure(static):void $initializer The closure should initialize the object it receives as argument * @param array|null $skippedProperties An array indexed by the properties to skip, a.k.a. the ones * that the initializer doesn't initialize, if any * @param static|null $instance @@ -51,6 +51,17 @@ public static function createLazyGhost(\Closure $initializer, ?array $skippedPro $instance ??= Registry::$classReflectors[$class]->newInstanceWithoutConstructor(); } + if (isset($instance->lazyObjectState)) { + $instance->lazyObjectState->initializer = $initializer; + $instance->lazyObjectState->skippedProperties = $skippedProperties ??= []; + + if (LazyObjectState::STATUS_UNINITIALIZED_FULL !== $instance->lazyObjectState->status) { + $instance->lazyObjectState->reset($instance); + } + + return $instance; + } + $instance->lazyObjectState = new LazyObjectState($initializer, $skippedProperties ??= []); foreach (Registry::$classResetters[$class] as $reset) { @@ -63,7 +74,7 @@ public static function createLazyGhost(\Closure $initializer, ?array $skippedPro /** * Returns whether the object is initialized. * - * @param $partial Whether partially initialized objects should be considered as initialized + * @param bool $partial Whether partially initialized objects should be considered as initialized */ #[Ignore] public function isLazyObjectInitialized(bool $partial = false): bool @@ -143,7 +154,7 @@ public function &__get($name): mixed if (null === $class) { $frame = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0]; - trigger_error(sprintf('Undefined property: %s::$%s in %s on line %s', $this::class, $name, $frame['file'], $frame['line']), \E_USER_NOTICE); + trigger_error(\sprintf('Undefined property: %s::$%s in %s on line %s', $this::class, $name, $frame['file'], $frame['line']), \E_USER_NOTICE); } get_in_scope: @@ -320,7 +331,7 @@ public function __serialize(): array $value = $properties[$k = $name] ?? $properties[$k = "\0*\0$name"] ?? $properties[$k = "\0$class\0$name"] ?? $properties[$k = "\0$scope\0$name"] ?? $k = null; if (null === $k) { - trigger_error(sprintf('serialize(): "%s" returned as member variable from __sleep() but does not exist', $name), \E_USER_NOTICE); + trigger_error(\sprintf('serialize(): "%s" returned as member variable from __sleep() but does not exist', $name), \E_USER_NOTICE); } else { $data[$k] = $value; } diff --git a/app/vendor/symfony/var-exporter/LazyObjectInterface.php b/app/vendor/symfony/var-exporter/LazyObjectInterface.php index 367088459..3422dc6ca 100644 --- a/app/vendor/symfony/var-exporter/LazyObjectInterface.php +++ b/app/vendor/symfony/var-exporter/LazyObjectInterface.php @@ -16,7 +16,7 @@ interface LazyObjectInterface /** * Returns whether the object is initialized. * - * @param $partial Whether partially initialized objects should be considered as initialized + * @param bool $partial Whether partially initialized objects should be considered as initialized */ public function isLazyObjectInitialized(bool $partial = false): bool; diff --git a/app/vendor/symfony/var-exporter/LazyProxyTrait.php b/app/vendor/symfony/var-exporter/LazyProxyTrait.php index 17ba1db98..795e4d77d 100644 --- a/app/vendor/symfony/var-exporter/LazyProxyTrait.php +++ b/app/vendor/symfony/var-exporter/LazyProxyTrait.php @@ -47,6 +47,13 @@ public static function createLazyProxy(\Closure $initializer, ?object $instance $instance ??= Registry::$classReflectors[$class]->newInstanceWithoutConstructor(); } + if (isset($instance->lazyObjectState)) { + $instance->lazyObjectState->initializer = $initializer; + unset($instance->lazyObjectState->realInstance); + + return $instance; + } + $instance->lazyObjectState = new LazyObjectState($initializer); foreach (Registry::$classResetters[$class] as $reset) { @@ -59,7 +66,7 @@ public static function createLazyProxy(\Closure $initializer, ?object $instance /** * Returns whether the object is initialized. * - * @param $partial Whether partially initialized objects should be considered as initialized + * @param bool $partial Whether partially initialized objects should be considered as initialized */ #[Ignore] public function isLazyObjectInitialized(bool $partial = false): bool @@ -125,7 +132,7 @@ public function &__get($name): mixed if (!$parent && null === $class && !\array_key_exists($name, (array) $instance)) { $frame = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0]; - trigger_error(sprintf('Undefined property: %s::$%s in %s on line %s', $instance::class, $name, $frame['file'], $frame['line']), \E_USER_NOTICE); + trigger_error(\sprintf('Undefined property: %s::$%s in %s on line %s', $instance::class, $name, $frame['file'], $frame['line']), \E_USER_NOTICE); } get_in_scope: @@ -310,7 +317,7 @@ public function __serialize(): array $value = $properties[$k = $name] ?? $properties[$k = "\0*\0$name"] ?? $properties[$k = "\0$class\0$name"] ?? $properties[$k = "\0$scope\0$name"] ?? $k = null; if (null === $k) { - trigger_error(sprintf('serialize(): "%s" returned as member variable from __sleep() but does not exist', $name), \E_USER_NOTICE); + trigger_error(\sprintf('serialize(): "%s" returned as member variable from __sleep() but does not exist', $name), \E_USER_NOTICE); } else { $data[$k] = $value; } diff --git a/app/vendor/symfony/var-exporter/ProxyHelper.php b/app/vendor/symfony/var-exporter/ProxyHelper.php index 4cf0f65b4..e0cc84f7e 100644 --- a/app/vendor/symfony/var-exporter/ProxyHelper.php +++ b/app/vendor/symfony/var-exporter/ProxyHelper.php @@ -28,19 +28,19 @@ final class ProxyHelper public static function generateLazyGhost(\ReflectionClass $class): string { if (\PHP_VERSION_ID < 80300 && $class->isReadOnly()) { - throw new LogicException(sprintf('Cannot generate lazy ghost with PHP < 8.3: class "%s" is readonly.', $class->name)); + throw new LogicException(\sprintf('Cannot generate lazy ghost with PHP < 8.3: class "%s" is readonly.', $class->name)); } if ($class->isFinal()) { - throw new LogicException(sprintf('Cannot generate lazy ghost: class "%s" is final.', $class->name)); + throw new LogicException(\sprintf('Cannot generate lazy ghost: class "%s" is final.', $class->name)); } if ($class->isInterface() || $class->isAbstract()) { - throw new LogicException(sprintf('Cannot generate lazy ghost: "%s" is not a concrete class.', $class->name)); + throw new LogicException(\sprintf('Cannot generate lazy ghost: "%s" is not a concrete class.', $class->name)); } if (\stdClass::class !== $class->name && $class->isInternal()) { - throw new LogicException(sprintf('Cannot generate lazy ghost: class "%s" is internal.', $class->name)); + throw new LogicException(\sprintf('Cannot generate lazy ghost: class "%s" is internal.', $class->name)); } if ($class->hasMethod('__get') && 'mixed' !== (self::exportType($class->getMethod('__get')) ?? 'mixed')) { - throw new LogicException(sprintf('Cannot generate lazy ghost: return type of method "%s::__get()" should be "mixed".', $class->name)); + throw new LogicException(\sprintf('Cannot generate lazy ghost: return type of method "%s::__get()" should be "mixed".', $class->name)); } static $traitMethods; @@ -48,14 +48,14 @@ public static function generateLazyGhost(\ReflectionClass $class): string foreach ($traitMethods as $method) { if ($class->hasMethod($method->name) && $class->getMethod($method->name)->isFinal()) { - throw new LogicException(sprintf('Cannot generate lazy ghost: method "%s::%s()" is final.', $class->name, $method->name)); + throw new LogicException(\sprintf('Cannot generate lazy ghost: method "%s::%s()" is final.', $class->name, $method->name)); } } $parent = $class; while ($parent = $parent->getParentClass()) { if (\stdClass::class !== $parent->name && $parent->isInternal()) { - throw new LogicException(sprintf('Cannot generate lazy ghost: class "%s" extends "%s" which is internal.', $class->name, $parent->name)); + throw new LogicException(\sprintf('Cannot generate lazy ghost: class "%s" extends "%s" which is internal.', $class->name, $parent->name)); } } $propertyScopes = self::exportPropertyScopes($class->name); @@ -86,19 +86,19 @@ class_exists(\Symfony\Component\VarExporter\Internal\LazyObjectState::class); public static function generateLazyProxy(?\ReflectionClass $class, array $interfaces = []): string { if (!class_exists($class?->name ?? \stdClass::class, false)) { - throw new LogicException(sprintf('Cannot generate lazy proxy: "%s" is not a class.', $class->name)); + throw new LogicException(\sprintf('Cannot generate lazy proxy: "%s" is not a class.', $class->name)); } if ($class?->isFinal()) { - throw new LogicException(sprintf('Cannot generate lazy proxy: class "%s" is final.', $class->name)); + throw new LogicException(\sprintf('Cannot generate lazy proxy: class "%s" is final.', $class->name)); } if (\PHP_VERSION_ID < 80300 && $class?->isReadOnly()) { - throw new LogicException(sprintf('Cannot generate lazy proxy with PHP < 8.3: class "%s" is readonly.', $class->name)); + throw new LogicException(\sprintf('Cannot generate lazy proxy with PHP < 8.3: class "%s" is readonly.', $class->name)); } $methodReflectors = [$class?->getMethods(\ReflectionMethod::IS_PUBLIC | \ReflectionMethod::IS_PROTECTED) ?? []]; foreach ($interfaces as $interface) { if (!$interface->isInterface()) { - throw new LogicException(sprintf('Cannot generate lazy proxy: "%s" is not an interface.', $interface->name)); + throw new LogicException(\sprintf('Cannot generate lazy proxy: "%s" is not an interface.', $interface->name)); } $methodReflectors[] = $interface->getMethods(); } @@ -134,7 +134,7 @@ public static function generateLazyProxy(?\ReflectionClass $class, array $interf } if ($method->isFinal()) { if ($extendsInternalClass || $methodsHaveToBeProxied || method_exists(LazyProxyTrait::class, $method->name)) { - throw new LogicException(sprintf('Cannot generate lazy proxy: method "%s::%s()" is final.', $class->name, $method->name)); + throw new LogicException(\sprintf('Cannot generate lazy proxy: method "%s::%s()" is final.', $class->name, $method->name)); } continue; } @@ -264,7 +264,7 @@ public static function exportSignature(\ReflectionFunctionAbstract $function, bo $args = substr($args, 0, -2); } else { $args = explode(', ', $args, 1 + $byRefIndex); - $args[$byRefIndex] = sprintf('...\array_slice(\func_get_args(), %d)', $byRefIndex); + $args[$byRefIndex] = \sprintf('...\array_slice(\func_get_args(), %d)', $byRefIndex); $args = implode(', ', $args); } @@ -355,9 +355,8 @@ private static function exportPropertyScopes(string $parent): string $propertyScopes = VarExporter::export($propertyScopes); $propertyScopes = str_replace(VarExporter::export($parent), 'parent::class', $propertyScopes); $propertyScopes = preg_replace("/(?|(,)\n( ) |\n |,\n (\]))/", '$1$2', $propertyScopes); - $propertyScopes = str_replace("\n", "\n ", $propertyScopes); - return $propertyScopes; + return str_replace("\n", "\n ", $propertyScopes); } private static function exportDefault(\ReflectionParameter $param, $namespace): string diff --git a/app/vendor/symfony/var-exporter/VarExporter.php b/app/vendor/symfony/var-exporter/VarExporter.php index 22e9b5152..606a9fd5c 100644 --- a/app/vendor/symfony/var-exporter/VarExporter.php +++ b/app/vendor/symfony/var-exporter/VarExporter.php @@ -32,8 +32,8 @@ final class VarExporter /** * Exports a serializable PHP value to PHP code. * - * @param bool &$isStaticValue Set to true after execution if the provided value is static, false otherwise - * @param array &$foundClasses Classes found in the value are added to this list as both keys and values + * @param bool &$isStaticValue Set to true after execution if the provided value is static, false otherwise + * @param array &$foundClasses Classes found in the value are added to this list as both keys and values * * @throws ExceptionInterface When the provided value cannot be serialized */

    H+1~IqAL&?&UJ=80~0S&(JP85w;i=0OY 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