From 366eb107e18edfba7f444e2e121fee4b083856da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20=C5=A0pa=C4=8Dek?= Date: Tue, 6 Feb 2024 03:14:39 +0100 Subject: [PATCH] Update packages Skip nette/http because of https://github.com/nette/http/issues/233 - contributte/translation updated from v2.0.3 to v2.0.4 patch See changes: https://github.com/contributte/translation/compare/v2.0.3...v2.0.4 Release notes: https://github.com/contributte/translation/releases/tag/v2.0.4 - nette/di updated from v3.1.8 to v3.2.0 minor See changes: https://github.com/nette/di/compare/v3.1.8...v3.2.0 Release notes: https://github.com/nette/di/releases/tag/v3.2.0 - phpstan/phpstan updated from 1.10.56 to 1.10.57 patch See changes: https://github.com/phpstan/phpstan/compare/1.10.56...1.10.57 Release notes: https://github.com/phpstan/phpstan/releases/tag/1.10.57 - roave/security-advisories updated from dev-latest@f81bd7c to dev-latest@f987aa7 See changes: https://github.com/Roave/SecurityAdvisories/compare/f81bd7c...f987aa7 - symfony/cache updated from v7.0.2 to v7.0.3 patch See changes: https://github.com/symfony/cache/compare/v7.0.2...v7.0.3 Release notes: https://github.com/symfony/cache/releases/tag/v7.0.3 - symfony/config updated from v6.4.0 to v7.0.3 major See changes: https://github.com/symfony/config/compare/v6.4.0...v7.0.3 Release notes: https://github.com/symfony/config/releases/tag/v7.0.3 - symfony/filesystem updated from v7.0.0 to v7.0.3 patch See changes: https://github.com/symfony/filesystem/compare/v7.0.0...v7.0.3 Release notes: https://github.com/symfony/filesystem/releases/tag/v7.0.3 - symfony/translation updated from v6.4.2 to v7.0.3 major See changes: https://github.com/symfony/translation/compare/v6.4.2...v7.0.3 Release notes: https://github.com/symfony/translation/releases/tag/v7.0.3 - symfony/var-exporter updated from v7.0.2 to v7.0.3 patch See changes: https://github.com/symfony/var-exporter/compare/v7.0.2...v7.0.3 Release notes: https://github.com/symfony/var-exporter/releases/tag/v7.0.3 --- site/composer.lock | 213 +++++------ site/vendor/composer/autoload_classmap.php | 2 - site/vendor/composer/autoload_static.php | 2 - site/vendor/composer/installed.json | 229 ++++++------ site/vendor/composer/installed.php | 62 ++-- .../translation/.github/workflows/main.yaml | 2 +- .../contributte/translation/composer.json | 12 +- .../src/DI/TranslationExtension.php | 3 +- .../src/Latte/TranslatorExtension.php | 4 +- site/vendor/nette/di/composer.json | 12 +- site/vendor/nette/di/contributing.md | 33 -- site/vendor/nette/di/readme.md | 87 ++--- .../di/src/Bridges/DITracy/ContainerPanel.php | 21 +- .../templates/ContainerPanel.panel.phtml | 2 +- site/vendor/nette/di/src/DI/Autowiring.php | 25 +- site/vendor/nette/di/src/DI/Compiler.php | 63 ++-- .../nette/di/src/DI/CompilerExtension.php | 32 +- .../di/src/DI/Config/Adapters/NeonAdapter.php | 65 ++-- .../di/src/DI/Config/Adapters/PhpAdapter.php | 2 - site/vendor/nette/di/src/DI/Config/Loader.php | 30 +- site/vendor/nette/di/src/DI/Container.php | 72 ++-- .../nette/di/src/DI/ContainerBuilder.php | 45 +-- .../nette/di/src/DI/ContainerLoader.php | 29 +- .../src/DI/Definitions/AccessorDefinition.php | 46 +-- .../di/src/DI/Definitions/Definition.php | 70 +--- .../src/DI/Definitions/FactoryDefinition.php | 113 ++---- .../src/DI/Definitions/ImportedDefinition.php | 13 +- .../src/DI/Definitions/LocatorDefinition.php | 48 ++- .../nette/di/src/DI/Definitions/Reference.php | 15 +- .../src/DI/Definitions/ServiceDefinition.php | 38 +- .../nette/di/src/DI/Definitions/Statement.php | 22 +- .../nette/di/src/DI/DependencyChecker.php | 34 +- .../nette/di/src/DI/DynamicParameter.php | 2 +- .../src/DI/Extensions/ConstantsExtension.php | 28 -- .../di/src/DI/Extensions/DIExtension.php | 43 +-- .../src/DI/Extensions/DecoratorExtension.php | 13 +- .../di/src/DI/Extensions/DefinitionSchema.php | 53 +-- .../src/DI/Extensions/ExtensionsExtension.php | 6 +- .../di/src/DI/Extensions/InjectExtension.php | 56 +-- .../src/DI/Extensions/ParametersExtension.php | 51 ++- .../di/src/DI/Extensions/PhpExtension.php | 54 --- .../di/src/DI/Extensions/SearchExtension.php | 49 +-- .../src/DI/Extensions/ServicesExtension.php | 30 +- site/vendor/nette/di/src/DI/Helpers.php | 52 +-- site/vendor/nette/di/src/DI/PhpGenerator.php | 57 +-- site/vendor/nette/di/src/DI/Resolver.php | 200 +++++------ site/vendor/nette/di/src/DI/exceptions.php | 2 +- site/vendor/phpstan/phpstan/phpstan.phar | Bin 22359313 -> 22443929 bytes site/vendor/phpstan/phpstan/phpstan.phar.asc | 26 +- .../symfony/cache/Adapter/AbstractAdapter.php | 2 +- .../symfony/cache/Adapter/ApcuAdapter.php | 2 +- .../symfony/cache/Adapter/ArrayAdapter.php | 2 +- .../symfony/cache/Adapter/ChainAdapter.php | 4 +- .../cache/Adapter/CouchbaseBucketAdapter.php | 2 +- .../Adapter/CouchbaseCollectionAdapter.php | 4 +- .../cache/Adapter/DoctrineDbalAdapter.php | 2 +- .../cache/Adapter/FilesystemAdapter.php | 2 +- .../Adapter/FilesystemTagAwareAdapter.php | 2 +- .../cache/Adapter/MemcachedAdapter.php | 4 +- .../symfony/cache/Adapter/NullAdapter.php | 2 +- .../symfony/cache/Adapter/PdoAdapter.php | 2 +- .../symfony/cache/Adapter/PhpArrayAdapter.php | 2 +- .../symfony/cache/Adapter/PhpFilesAdapter.php | 2 +- .../symfony/cache/Adapter/ProxyAdapter.php | 2 +- .../symfony/cache/Adapter/RedisAdapter.php | 2 +- .../cache/Adapter/RedisTagAwareAdapter.php | 2 +- .../symfony/cache/Adapter/TagAwareAdapter.php | 2 +- .../cache/Adapter/TraceableAdapter.php | 2 +- .../DataCollector/CacheDataCollector.php | 2 +- .../DependencyInjection/CachePoolPass.php | 8 +- site/vendor/symfony/cache/LockRegistry.php | 2 +- .../cache/Marshaller/DefaultMarshaller.php | 2 +- .../cache/Marshaller/SodiumMarshaller.php | 2 +- .../cache/Marshaller/TagAwareMarshaller.php | 2 +- .../Messenger/EarlyExpirationDispatcher.php | 4 +- .../symfony/cache/Traits/ContractsTrait.php | 2 +- .../cache/Traits/FilesystemCommonTrait.php | 4 +- .../symfony/cache/Traits/RedisTrait.php | 2 +- .../symfony/cache/Traits/RelayProxy.php | 9 +- .../symfony/config/Builder/ClassBuilder.php | 2 +- site/vendor/symfony/config/CHANGELOG.md | 5 + .../symfony/config/ConfigCacheInterface.php | 4 +- .../symfony/config/Definition/ArrayNode.php | 63 ++-- .../symfony/config/Definition/BaseNode.php | 79 ++--- .../symfony/config/Definition/BooleanNode.php | 5 +- .../Builder/ArrayNodeDefinition.php | 47 ++- .../Builder/BooleanNodeDefinition.php | 2 +- .../Builder/BuilderAwareInterface.php | 4 +- .../config/Definition/Builder/ExprBuilder.php | 12 +- .../Definition/Builder/MergeBuilder.php | 7 +- .../config/Definition/Builder/NodeBuilder.php | 13 +- .../Definition/Builder/NodeDefinition.php | 38 +- .../Builder/NormalizationBuilder.php | 13 +- .../Builder/NumericNodeDefinition.php | 4 +- .../config/Definition/Builder/TreeBuilder.php | 18 +- .../Definition/Builder/ValidationBuilder.php | 7 +- .../Definition/ConfigurationInterface.php | 4 +- .../Configurator/DefinitionConfigurator.php | 2 +- .../Definition/Dumper/XmlReferenceDumper.php | 12 +- .../Definition/Dumper/YamlReferenceDumper.php | 17 +- .../symfony/config/Definition/EnumNode.php | 12 +- .../InvalidConfigurationException.php | 9 +- .../symfony/config/Definition/FloatNode.php | 5 +- .../symfony/config/Definition/IntegerNode.php | 5 +- .../Loader/DefinitionFileLoader.php | 4 +- .../symfony/config/Definition/NumericNode.php | 6 +- .../symfony/config/Definition/Processor.php | 2 +- .../Definition/PrototypeNodeInterface.php | 4 +- .../config/Definition/PrototypedArrayNode.php | 36 +- .../symfony/config/Definition/ScalarNode.php | 5 +- .../config/Definition/VariableNode.php | 25 +- ...LoaderImportCircularReferenceException.php | 2 +- .../FileLocatorFileNotFoundException.php | 7 +- .../config/Exception/LoaderLoadException.php | 7 +- site/vendor/symfony/config/FileLocator.php | 8 +- .../symfony/config/FileLocatorInterface.php | 6 +- .../config/Loader/DelegatingLoader.php | 4 +- .../symfony/config/Loader/FileLoader.php | 18 +- .../symfony/config/Loader/GlobFileLoader.php | 4 +- site/vendor/symfony/config/Loader/Loader.php | 17 +- .../symfony/config/Loader/LoaderInterface.php | 16 +- .../symfony/config/Loader/LoaderResolver.php | 7 +- .../config/Loader/LoaderResolverInterface.php | 2 +- .../Resource/ClassExistenceResource.php | 4 +- .../config/Resource/DirectoryResource.php | 2 +- .../Resource/ReflectionClassResource.php | 8 - .../config/ResourceCheckerConfigCache.php | 4 +- .../config/ResourceCheckerInterface.php | 8 +- site/vendor/symfony/config/Util/XmlUtils.php | 9 +- site/vendor/symfony/config/composer.json | 14 +- .../Exception/FileNotFoundException.php | 2 +- .../filesystem/Exception/IOException.php | 2 +- site/vendor/symfony/filesystem/Filesystem.php | 4 +- site/vendor/symfony/filesystem/Path.php | 2 +- site/vendor/symfony/translation/CHANGELOG.md | 6 + .../Catalogue/AbstractOperation.php | 12 +- .../translation/Catalogue/MergeOperation.php | 5 +- .../translation/Catalogue/TargetOperation.php | 5 +- .../CatalogueMetadataAwareInterface.php | 8 +- .../translation/Command/XliffLintCommand.php | 9 +- .../TranslationDataCollector.php | 2 +- .../translation/DataCollectorTranslator.php | 16 +- .../TranslationDumperPass.php | 5 +- .../TranslationExtractorPass.php | 5 +- .../DependencyInjection/TranslatorPass.php | 5 +- .../TranslatorPathsPass.php | 5 +- .../translation/Dumper/CsvFileDumper.php | 4 +- .../translation/Dumper/DumperInterface.php | 4 +- .../symfony/translation/Dumper/FileDumper.php | 13 +- .../translation/Dumper/IcuResFileDumper.php | 2 +- .../translation/Dumper/XliffFileDumper.php | 2 +- .../Exception/IncompleteDsnException.php | 2 +- .../MissingRequiredOptionException.php | 2 +- .../Exception/ProviderException.php | 2 +- .../Exception/UnsupportedSchemeException.php | 2 +- .../Extractor/AbstractFileExtractor.php | 10 +- .../translation/Extractor/ChainExtractor.php | 14 +- .../translation/Extractor/PhpAstExtractor.php | 7 +- .../translation/Extractor/PhpExtractor.php | 333 ------------------ .../Extractor/PhpStringTokenParser.php | 141 -------- .../Extractor/Visitor/AbstractVisitor.php | 13 +- .../Extractor/Visitor/ConstraintVisitor.php | 12 +- .../Extractor/Visitor/TransMethodVisitor.php | 10 +- .../Visitor/TranslatableMessageVisitor.php | 12 +- .../Formatter/MessageFormatter.php | 2 +- .../translation/Loader/CsvFileLoader.php | 4 +- .../translation/Loader/IcuResFileLoader.php | 2 +- .../translation/Loader/XliffFileLoader.php | 8 +- .../symfony/translation/LoggingTranslator.php | 14 +- .../symfony/translation/MessageCatalogue.php | 52 +-- .../translation/MessageCatalogueInterface.php | 26 +- .../translation/MetadataAwareInterface.php | 8 +- .../symfony/translation/Provider/Dsn.php | 22 +- .../PseudoLocalizationTranslator.php | 4 +- .../translation/Reader/TranslationReader.php | 9 +- .../Reader/TranslationReaderInterface.php | 4 +- .../translation/Resources/functions.php | 2 +- .../Test/ProviderFactoryTestCase.php | 4 +- .../translation/TranslatableMessage.php | 4 +- .../vendor/symfony/translation/Translator.php | 49 +-- .../symfony/translation/TranslatorBag.php | 2 +- .../translation/TranslatorBagInterface.php | 2 +- .../translation/Writer/TranslationWriter.php | 8 +- .../Writer/TranslationWriterInterface.php | 4 +- site/vendor/symfony/translation/composer.json | 33 +- .../Exception/ClassNotFoundException.php | 2 +- .../NotInstantiableTypeException.php | 2 +- .../symfony/var-exporter/LazyGhostTrait.php | 2 +- .../symfony/var-exporter/LazyProxyTrait.php | 2 +- .../symfony/var-exporter/ProxyHelper.php | 4 +- .../symfony/var-exporter/VarExporter.php | 2 +- 191 files changed, 1298 insertions(+), 2526 deletions(-) delete mode 100644 site/vendor/nette/di/contributing.md delete mode 100644 site/vendor/nette/di/src/DI/Extensions/ConstantsExtension.php delete mode 100644 site/vendor/nette/di/src/DI/Extensions/PhpExtension.php delete mode 100644 site/vendor/symfony/translation/Extractor/PhpExtractor.php delete mode 100644 site/vendor/symfony/translation/Extractor/PhpStringTokenParser.php diff --git a/site/composer.lock b/site/composer.lock index 053680929..d499c3183 100644 --- a/site/composer.lock +++ b/site/composer.lock @@ -8,20 +8,20 @@ "packages": [ { "name": "contributte/translation", - "version": "v2.0.3", + "version": "v2.0.4", "source": { "type": "git", "url": "https://github.com/contributte/translation.git", - "reference": "a8192980a8b48df411c3be68a22a082b75e41505" + "reference": "ae4ff4e12095220161f2948e5cadc59f42a1936c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/contributte/translation/zipball/a8192980a8b48df411c3be68a22a082b75e41505", - "reference": "a8192980a8b48df411c3be68a22a082b75e41505", + "url": "https://api.github.com/repos/contributte/translation/zipball/ae4ff4e12095220161f2948e5cadc59f42a1936c", + "reference": "ae4ff4e12095220161f2948e5cadc59f42a1936c", "shasum": "" }, "require": { - "latte/latte": "^2.6|^3.0", + "latte/latte": "^2.6|^3.0.12", "nette/di": "^3.0.6", "nette/finder": "^2.5.2|~3.0.0", "nette/http": "^3.0.7", @@ -30,24 +30,24 @@ "nette/schema": "^1.0", "nette/utils": "^3.2.1|~4.0.0", "php": "^8.0.2", - "symfony/config": "^6.0", - "symfony/translation": "^6.0" + "symfony/config": "^6.0|^7.0", + "symfony/translation": "^6.0|^7.0" }, "require-dev": { "doctrine/orm": "^2.8", "mockery/mockery": "^1.4", "nette/application": "^3.1.0", - "nette/bootstrap": "^3.0", + "nette/bootstrap": "^3.2.1", "nette/database": "^3.1.1", "nette/robot-loader": "^3.4.0|~4.0.0", "nette/tester": "^2.3.1", - "ninjify/nunjuck": "^0.3.0", + "ninjify/nunjuck": "^0.4.0", "ninjify/qa": "^0.13", "phpstan/phpstan": "^1.8", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-nette": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "psr/log": "^1.1", + "psr/log": "^1.1|^2.0|^3.0", "tracy/tracy": "^2.8" }, "type": "library", @@ -79,7 +79,7 @@ ], "support": { "issues": "https://github.com/contributte/translation/issues", - "source": "https://github.com/contributte/translation/tree/v2.0.3" + "source": "https://github.com/contributte/translation/tree/v2.0.4" }, "funding": [ { @@ -91,7 +91,7 @@ "type": "github" } ], - "time": "2023-03-13T19:07:37+00:00" + "time": "2024-01-26T13:54:18+00:00" }, { "name": "latte/latte", @@ -623,36 +623,36 @@ }, { "name": "nette/di", - "version": "v3.1.8", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/nette/di.git", - "reference": "adf475076dae08109dd0d57b1a48668d1d1bedf0" + "reference": "8140289e32e1b2bf2d8b5986bd92124b87fe6b2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/di/zipball/adf475076dae08109dd0d57b1a48668d1d1bedf0", - "reference": "adf475076dae08109dd0d57b1a48668d1d1bedf0", + "url": "https://api.github.com/repos/nette/di/zipball/8140289e32e1b2bf2d8b5986bd92124b87fe6b2f", + "reference": "8140289e32e1b2bf2d8b5986bd92124b87fe6b2f", "shasum": "" }, "require": { "ext-tokenizer": "*", "nette/neon": "^3.3 || ^4.0", - "nette/php-generator": "^3.5.4 || ^4.0", - "nette/robot-loader": "^3.2 || ~4.0.0", + "nette/php-generator": "^4.1.3", + "nette/robot-loader": "^4.0", "nette/schema": "^1.2.5", - "nette/utils": "^3.2.5 || ~4.0.0", - "php": "7.2 - 8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.3" }, "require-dev": { - "nette/tester": "^2.4", + "nette/tester": "^2.5.2", "phpstan/phpstan": "^1.0", "tracy/tracy": "^2.9" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -689,9 +689,9 @@ ], "support": { "issues": "https://github.com/nette/di/issues", - "source": "https://github.com/nette/di/tree/v3.1.8" + "source": "https://github.com/nette/di/tree/v3.2.0" }, - "time": "2023-11-03T00:12:52+00:00" + "time": "2024-02-06T01:22:10+00:00" }, { "name": "nette/forms", @@ -2225,16 +2225,16 @@ }, { "name": "symfony/cache", - "version": "v7.0.2", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "378e30a864c868d635353f103a5a5e7569f029ec" + "reference": "2207eceb2433d74df81232d97439bf508cb9e050" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/378e30a864c868d635353f103a5a5e7569f029ec", - "reference": "378e30a864c868d635353f103a5a5e7569f029ec", + "url": "https://api.github.com/repos/symfony/cache/zipball/2207eceb2433d74df81232d97439bf508cb9e050", + "reference": "2207eceb2433d74df81232d97439bf508cb9e050", "shasum": "" }, "require": { @@ -2301,7 +2301,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.0.2" + "source": "https://github.com/symfony/cache/tree/v7.0.3" }, "funding": [ { @@ -2317,7 +2317,7 @@ "type": "tidelift" } ], - "time": "2023-12-29T15:37:40+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/cache-contracts", @@ -2397,34 +2397,34 @@ }, { "name": "symfony/config", - "version": "v6.4.0", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "5d33e0fb707d603330e0edfd4691803a1253572e" + "reference": "86a5027869ca3d6bdecae6d5d6c2f77c8f2c1d16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/5d33e0fb707d603330e0edfd4691803a1253572e", - "reference": "5d33e0fb707d603330e0edfd4691803a1253572e", + "url": "https://api.github.com/repos/symfony/config/zipball/86a5027869ca3d6bdecae6d5d6c2f77c8f2c1d16", + "reference": "86a5027869ca3d6bdecae6d5d6c2f77c8f2c1d16", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^6.4|^7.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4", + "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2452,7 +2452,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.0" + "source": "https://github.com/symfony/config/tree/v7.0.3" }, "funding": [ { @@ -2468,7 +2468,7 @@ "type": "tidelift" } ], - "time": "2023-11-09T08:28:32+00:00" + "time": "2024-01-30T08:34:29+00:00" }, { "name": "symfony/deprecation-contracts", @@ -2539,16 +2539,16 @@ }, { "name": "symfony/filesystem", - "version": "v7.0.0", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7" + "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7", - "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/2890e3a825bc0c0558526c04499c13f83e1b6b12", + "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12", "shasum": "" }, "require": { @@ -2582,7 +2582,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.0" + "source": "https://github.com/symfony/filesystem/tree/v7.0.3" }, "funding": [ { @@ -2598,7 +2598,7 @@ "type": "tidelift" } ], - "time": "2023-07-27T06:33:22+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/service-contracts", @@ -2684,51 +2684,50 @@ }, { "name": "symfony/translation", - "version": "v6.4.2", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681" + "reference": "7285f25c7dcc74d9ec1232473114274604e50f00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a2ab2ec1a462e53016de8e8d5e8912bfd62ea681", - "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681", + "url": "https://api.github.com/repos/symfony/translation/zipball/7285f25c7dcc74d9ec1232473114274604e50f00", + "reference": "7285f25c7dcc74d9ec1232473114274604e50f00", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.4", "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.13", + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2759,7 +2758,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.2" + "source": "https://github.com/symfony/translation/tree/v7.0.3" }, "funding": [ { @@ -2775,7 +2774,7 @@ "type": "tidelift" } ], - "time": "2023-12-18T09:25:29+00:00" + "time": "2024-01-29T15:41:16+00:00" }, { "name": "symfony/translation-contracts", @@ -2857,16 +2856,16 @@ }, { "name": "symfony/var-exporter", - "version": "v7.0.2", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "345c62fefe92243c3a06fc0cc65f2ec1a47e0764" + "reference": "1fb79308cb5fc2b44bff6e8af10a5af6812e05b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/345c62fefe92243c3a06fc0cc65f2ec1a47e0764", - "reference": "345c62fefe92243c3a06fc0cc65f2ec1a47e0764", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1fb79308cb5fc2b44bff6e8af10a5af6812e05b8", + "reference": "1fb79308cb5fc2b44bff6e8af10a5af6812e05b8", "shasum": "" }, "require": { @@ -2911,7 +2910,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.0.2" + "source": "https://github.com/symfony/var-exporter/tree/v7.0.3" }, "funding": [ { @@ -2927,7 +2926,7 @@ "type": "tidelift" } ], - "time": "2023-12-27T08:42:13+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "texy/texy", @@ -3363,16 +3362,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.56", + "version": "1.10.57", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "27816a01aea996191ee14d010f325434c0ee76fa" + "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/27816a01aea996191ee14d010f325434c0ee76fa", - "reference": "27816a01aea996191ee14d010f325434c0ee76fa", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1627b1d03446904aaa77593f370c5201d2ecc34e", + "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e", "shasum": "" }, "require": { @@ -3421,7 +3420,7 @@ "type": "tidelift" } ], - "time": "2024-01-15T10:43:00+00:00" + "time": "2024-01-24T11:51:34+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -3574,12 +3573,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "f81bd7cb90f5f30d3b246e342843ae905947158f" + "reference": "f987aa7e659fe7b118c5564974a6ef9e37b1dd0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f81bd7cb90f5f30d3b246e342843ae905947158f", - "reference": "f81bd7cb90f5f30d3b246e342843ae905947158f", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f987aa7e659fe7b118c5564974a6ef9e37b1dd0f", + "reference": "f987aa7e659fe7b118c5564974a6ef9e37b1dd0f", "shasum": "" }, "conflict": { @@ -3619,7 +3618,7 @@ "backpack/crud": "<3.4.9", "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", "badaso/core": "<2.7", - "bagisto/bagisto": "<0.1.5", + "bagisto/bagisto": "<1.3.2", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.2", @@ -3633,12 +3632,13 @@ "bolt/bolt": "<3.7.2", "bolt/core": "<=4.2", "bottelet/flarepoint": "<2.2.1", + "bref/bref": "<2.1.13", "brightlocal/phpwhois": "<=4.2.5", "brotkrueml/codehighlight": "<2.7", "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", "brotkrueml/typo3-matomo-integration": "<1.3.2", "buddypress/buddypress": "<7.2.1", - "bugsnag/bugsnag-laravel": "<2.0.2", + "bugsnag/bugsnag-laravel": ">=2,<2.0.2", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", @@ -3671,7 +3671,7 @@ "contao/managed-edition": "<=1.5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", - "craftcms/cms": "<=4.5.10", + "craftcms/cms": "<4.6.2", "croogo/croogo": "<4", "cuyz/valinor": "<0.12", "czproject/git-php": "<4.0.3", @@ -3686,7 +3686,7 @@ "desperado/xml-bundle": "<=0.1.7", "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", "doctrine/annotations": "<1.2.7", - "doctrine/cache": "<1.3.2|>=1.4,<1.4.2", + "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", "doctrine/common": "<2.4.3|>=2.5,<2.5.1", "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", "doctrine/doctrine-bundle": "<1.5.2", @@ -3729,7 +3729,7 @@ "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", "ezsystems/ezplatform-user": ">=1,<1.0.1", "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", - "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.06,<=2019.03.5.1", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<4.1.1", @@ -3781,7 +3781,7 @@ "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<6.1.1", + "grumpydictator/firefly-iii": "<6.1.7", "gugoan/economizzer": "<=0.9.0.0-beta1", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", @@ -3803,7 +3803,7 @@ "ibexa/user": ">=4,<4.4.3", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", - "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", + "illuminate/auth": "<5.5.10", "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", @@ -3863,7 +3863,7 @@ "liftkit/database": "<2.13.2", "limesurvey/limesurvey": "<3.27.19", "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": ">2.2.4,<2.2.6", + "livewire/livewire": ">2.2.4,<2.2.6|>=3,<3.0.4", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "luyadev/yii-helpers": "<1.2.1", @@ -3879,7 +3879,7 @@ "marcwillmann/turn": "<0.3.3", "matyhtf/framework": "<3.0.6", "mautic/core": "<4.3", - "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", + "mediawiki/core": "<1.36.2", "mediawiki/matomo": "<2.4.3", "mediawiki/semantic-media-wiki": "<4.0.2", "melisplatform/melis-asset-manager": "<5.0.1", @@ -3967,7 +3967,7 @@ "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.1", - "phpmyfaq/phpmyfaq": "<=3.1.7", + "phpmyfaq/phpmyfaq": "<3.2.5", "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.34", @@ -3978,7 +3978,7 @@ "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.2.2", + "pimcore/admin-ui-classic-bundle": "<1.3.2", "pimcore/customer-management-framework-bundle": "<4.0.6", "pimcore/data-hub": "<1.2.4", "pimcore/demo": "<10.3", @@ -4002,7 +4002,7 @@ "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4", - "processwire/processwire": "<=3.0.200", + "processwire/processwire": "<=3.0.210", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "pterodactyl/panel": "<1.7", @@ -4043,13 +4043,13 @@ "shopxo/shopxo": "<2.2.6", "showdoc/showdoc": "<2.10.4", "silverstripe-australia/advancedreports": ">=1,<=2", - "silverstripe/admin": "<1.13.6", + "silverstripe/admin": "<1.13.19|>=2,<2.1.8", "silverstripe/assets": ">=1,<1.11.1", "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<4.13.14|>=5,<5.0.13", - "silverstripe/graphql": "<3.8.2|>=4,<4.1.3|>=4.2,<4.2.5|>=4.3,<4.3.4|>=5,<5.0.3", + "silverstripe/framework": "<4.13.39|>=5,<5.1.11", + "silverstripe/graphql": "<3.8.2|>=4,<4.3.7|>=5,<5.1.3", "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", "silverstripe/recipe-cms": ">=4.5,<4.5.3", "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", @@ -4082,13 +4082,14 @@ "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", "ssddanbrown/bookstack": "<22.02.3", - "statamic/cms": "<4.36", + "statamic/cms": "<4.46", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<2.1.62", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", - "sulu/sulu": "<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8|==2.4.0.0-RC1|>=2.5,<2.5.10", + "sulu/sulu": "<1.6.44|>=2,<2.4.16|>=2.5,<2.5.12", "sumocoders/framework-user-bundle": "<1.4", + "superbig/craft-audit": "<3.0.2", "swag/paypal": "<5.4.4", "swiftmailer/swiftmailer": ">=4,<5.4.5", "swiftyedit/swiftyedit": "<1.2", @@ -4225,7 +4226,7 @@ "yourls/yourls": "<=1.8.2", "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", - "zendframework/zend-cache": "<2.4.8|>=2.5,<2.5.3", + "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", @@ -4257,7 +4258,7 @@ "zenstruck/collection": "<0.2.1", "zetacomponents/mail": "<1.8.2", "zf-commons/zfc-user": "<1.2.2", - "zfcampus/zf-apigility-doctrine": "<1.0.3", + "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2", "zoujingli/thinkadmin": "<=6.1.53" }, @@ -4297,7 +4298,7 @@ "type": "tidelift" } ], - "time": "2024-01-17T21:04:22+00:00" + "time": "2024-02-05T21:04:15+00:00" }, { "name": "slevomat/coding-standard", diff --git a/site/vendor/composer/autoload_classmap.php b/site/vendor/composer/autoload_classmap.php index 19a9147bc..9a744d0cf 100644 --- a/site/vendor/composer/autoload_classmap.php +++ b/site/vendor/composer/autoload_classmap.php @@ -375,14 +375,12 @@ 'Nette\\DI\\Definitions\\Statement' => $vendorDir . '/nette/di/src/DI/Definitions/Statement.php', 'Nette\\DI\\DependencyChecker' => $vendorDir . '/nette/di/src/DI/DependencyChecker.php', 'Nette\\DI\\DynamicParameter' => $vendorDir . '/nette/di/src/DI/DynamicParameter.php', - 'Nette\\DI\\Extensions\\ConstantsExtension' => $vendorDir . '/nette/di/src/DI/Extensions/ConstantsExtension.php', 'Nette\\DI\\Extensions\\DIExtension' => $vendorDir . '/nette/di/src/DI/Extensions/DIExtension.php', 'Nette\\DI\\Extensions\\DecoratorExtension' => $vendorDir . '/nette/di/src/DI/Extensions/DecoratorExtension.php', 'Nette\\DI\\Extensions\\DefinitionSchema' => $vendorDir . '/nette/di/src/DI/Extensions/DefinitionSchema.php', 'Nette\\DI\\Extensions\\ExtensionsExtension' => $vendorDir . '/nette/di/src/DI/Extensions/ExtensionsExtension.php', 'Nette\\DI\\Extensions\\InjectExtension' => $vendorDir . '/nette/di/src/DI/Extensions/InjectExtension.php', 'Nette\\DI\\Extensions\\ParametersExtension' => $vendorDir . '/nette/di/src/DI/Extensions/ParametersExtension.php', - 'Nette\\DI\\Extensions\\PhpExtension' => $vendorDir . '/nette/di/src/DI/Extensions/PhpExtension.php', 'Nette\\DI\\Extensions\\SearchExtension' => $vendorDir . '/nette/di/src/DI/Extensions/SearchExtension.php', 'Nette\\DI\\Extensions\\ServicesExtension' => $vendorDir . '/nette/di/src/DI/Extensions/ServicesExtension.php', 'Nette\\DI\\Helpers' => $vendorDir . '/nette/di/src/DI/Helpers.php', diff --git a/site/vendor/composer/autoload_static.php b/site/vendor/composer/autoload_static.php index 64d7f5f63..69e19d46d 100644 --- a/site/vendor/composer/autoload_static.php +++ b/site/vendor/composer/autoload_static.php @@ -560,14 +560,12 @@ class ComposerStaticInit247de957f14f643f393d210a332dd05b 'Nette\\DI\\Definitions\\Statement' => __DIR__ . '/..' . '/nette/di/src/DI/Definitions/Statement.php', 'Nette\\DI\\DependencyChecker' => __DIR__ . '/..' . '/nette/di/src/DI/DependencyChecker.php', 'Nette\\DI\\DynamicParameter' => __DIR__ . '/..' . '/nette/di/src/DI/DynamicParameter.php', - 'Nette\\DI\\Extensions\\ConstantsExtension' => __DIR__ . '/..' . '/nette/di/src/DI/Extensions/ConstantsExtension.php', 'Nette\\DI\\Extensions\\DIExtension' => __DIR__ . '/..' . '/nette/di/src/DI/Extensions/DIExtension.php', 'Nette\\DI\\Extensions\\DecoratorExtension' => __DIR__ . '/..' . '/nette/di/src/DI/Extensions/DecoratorExtension.php', 'Nette\\DI\\Extensions\\DefinitionSchema' => __DIR__ . '/..' . '/nette/di/src/DI/Extensions/DefinitionSchema.php', 'Nette\\DI\\Extensions\\ExtensionsExtension' => __DIR__ . '/..' . '/nette/di/src/DI/Extensions/ExtensionsExtension.php', 'Nette\\DI\\Extensions\\InjectExtension' => __DIR__ . '/..' . '/nette/di/src/DI/Extensions/InjectExtension.php', 'Nette\\DI\\Extensions\\ParametersExtension' => __DIR__ . '/..' . '/nette/di/src/DI/Extensions/ParametersExtension.php', - 'Nette\\DI\\Extensions\\PhpExtension' => __DIR__ . '/..' . '/nette/di/src/DI/Extensions/PhpExtension.php', 'Nette\\DI\\Extensions\\SearchExtension' => __DIR__ . '/..' . '/nette/di/src/DI/Extensions/SearchExtension.php', 'Nette\\DI\\Extensions\\ServicesExtension' => __DIR__ . '/..' . '/nette/di/src/DI/Extensions/ServicesExtension.php', 'Nette\\DI\\Helpers' => __DIR__ . '/..' . '/nette/di/src/DI/Helpers.php', diff --git a/site/vendor/composer/installed.json b/site/vendor/composer/installed.json index 122d82340..5fd222b66 100644 --- a/site/vendor/composer/installed.json +++ b/site/vendor/composer/installed.json @@ -2,21 +2,21 @@ "packages": [ { "name": "contributte/translation", - "version": "v2.0.3", - "version_normalized": "2.0.3.0", + "version": "v2.0.4", + "version_normalized": "2.0.4.0", "source": { "type": "git", "url": "https://github.com/contributte/translation.git", - "reference": "a8192980a8b48df411c3be68a22a082b75e41505" + "reference": "ae4ff4e12095220161f2948e5cadc59f42a1936c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/contributte/translation/zipball/a8192980a8b48df411c3be68a22a082b75e41505", - "reference": "a8192980a8b48df411c3be68a22a082b75e41505", + "url": "https://api.github.com/repos/contributte/translation/zipball/ae4ff4e12095220161f2948e5cadc59f42a1936c", + "reference": "ae4ff4e12095220161f2948e5cadc59f42a1936c", "shasum": "" }, "require": { - "latte/latte": "^2.6|^3.0", + "latte/latte": "^2.6|^3.0.12", "nette/di": "^3.0.6", "nette/finder": "^2.5.2|~3.0.0", "nette/http": "^3.0.7", @@ -25,27 +25,27 @@ "nette/schema": "^1.0", "nette/utils": "^3.2.1|~4.0.0", "php": "^8.0.2", - "symfony/config": "^6.0", - "symfony/translation": "^6.0" + "symfony/config": "^6.0|^7.0", + "symfony/translation": "^6.0|^7.0" }, "require-dev": { "doctrine/orm": "^2.8", "mockery/mockery": "^1.4", "nette/application": "^3.1.0", - "nette/bootstrap": "^3.0", + "nette/bootstrap": "^3.2.1", "nette/database": "^3.1.1", "nette/robot-loader": "^3.4.0|~4.0.0", "nette/tester": "^2.3.1", - "ninjify/nunjuck": "^0.3.0", + "ninjify/nunjuck": "^0.4.0", "ninjify/qa": "^0.13", "phpstan/phpstan": "^1.8", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-nette": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "psr/log": "^1.1", + "psr/log": "^1.1|^2.0|^3.0", "tracy/tracy": "^2.8" }, - "time": "2023-03-13T19:07:37+00:00", + "time": "2024-01-26T13:54:18+00:00", "type": "library", "extra": { "branch-alias": { @@ -76,7 +76,7 @@ ], "support": { "issues": "https://github.com/contributte/translation/issues", - "source": "https://github.com/contributte/translation/tree/v2.0.3" + "source": "https://github.com/contributte/translation/tree/v2.0.4" }, "funding": [ { @@ -702,38 +702,38 @@ }, { "name": "nette/di", - "version": "v3.1.8", - "version_normalized": "3.1.8.0", + "version": "v3.2.0", + "version_normalized": "3.2.0.0", "source": { "type": "git", "url": "https://github.com/nette/di.git", - "reference": "adf475076dae08109dd0d57b1a48668d1d1bedf0" + "reference": "8140289e32e1b2bf2d8b5986bd92124b87fe6b2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/di/zipball/adf475076dae08109dd0d57b1a48668d1d1bedf0", - "reference": "adf475076dae08109dd0d57b1a48668d1d1bedf0", + "url": "https://api.github.com/repos/nette/di/zipball/8140289e32e1b2bf2d8b5986bd92124b87fe6b2f", + "reference": "8140289e32e1b2bf2d8b5986bd92124b87fe6b2f", "shasum": "" }, "require": { "ext-tokenizer": "*", "nette/neon": "^3.3 || ^4.0", - "nette/php-generator": "^3.5.4 || ^4.0", - "nette/robot-loader": "^3.2 || ~4.0.0", + "nette/php-generator": "^4.1.3", + "nette/robot-loader": "^4.0", "nette/schema": "^1.2.5", - "nette/utils": "^3.2.5 || ~4.0.0", - "php": "7.2 - 8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.3" }, "require-dev": { - "nette/tester": "^2.4", + "nette/tester": "^2.5.2", "phpstan/phpstan": "^1.0", "tracy/tracy": "^2.9" }, - "time": "2023-11-03T00:12:52+00:00", + "time": "2024-02-06T01:22:10+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } }, "installation-source": "dist", @@ -771,7 +771,7 @@ ], "support": { "issues": "https://github.com/nette/di/issues", - "source": "https://github.com/nette/di/tree/v3.1.8" + "source": "https://github.com/nette/di/tree/v3.2.0" }, "install-path": "../nette/di" }, @@ -2008,17 +2008,17 @@ }, { "name": "phpstan/phpstan", - "version": "1.10.56", - "version_normalized": "1.10.56.0", + "version": "1.10.57", + "version_normalized": "1.10.57.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "27816a01aea996191ee14d010f325434c0ee76fa" + "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/27816a01aea996191ee14d010f325434c0ee76fa", - "reference": "27816a01aea996191ee14d010f325434c0ee76fa", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/1627b1d03446904aaa77593f370c5201d2ecc34e", + "reference": "1627b1d03446904aaa77593f370c5201d2ecc34e", "shasum": "" }, "require": { @@ -2027,7 +2027,7 @@ "conflict": { "phpstan/phpstan-shim": "*" }, - "time": "2024-01-15T10:43:00+00:00", + "time": "2024-01-24T11:51:34+00:00", "bin": [ "phpstan", "phpstan.phar" @@ -2393,12 +2393,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "f81bd7cb90f5f30d3b246e342843ae905947158f" + "reference": "f987aa7e659fe7b118c5564974a6ef9e37b1dd0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f81bd7cb90f5f30d3b246e342843ae905947158f", - "reference": "f81bd7cb90f5f30d3b246e342843ae905947158f", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f987aa7e659fe7b118c5564974a6ef9e37b1dd0f", + "reference": "f987aa7e659fe7b118c5564974a6ef9e37b1dd0f", "shasum": "" }, "conflict": { @@ -2438,7 +2438,7 @@ "backpack/crud": "<3.4.9", "bacula-web/bacula-web": "<8.0.0.0-RC2-dev", "badaso/core": "<2.7", - "bagisto/bagisto": "<0.1.5", + "bagisto/bagisto": "<1.3.2", "barrelstrength/sprout-base-email": "<1.2.7", "barrelstrength/sprout-forms": "<3.9", "barryvdh/laravel-translation-manager": "<0.6.2", @@ -2452,12 +2452,13 @@ "bolt/bolt": "<3.7.2", "bolt/core": "<=4.2", "bottelet/flarepoint": "<2.2.1", + "bref/bref": "<2.1.13", "brightlocal/phpwhois": "<=4.2.5", "brotkrueml/codehighlight": "<2.7", "brotkrueml/schema": "<1.13.1|>=2,<2.5.1", "brotkrueml/typo3-matomo-integration": "<1.3.2", "buddypress/buddypress": "<7.2.1", - "bugsnag/bugsnag-laravel": "<2.0.2", + "bugsnag/bugsnag-laravel": ">=2,<2.0.2", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", @@ -2490,7 +2491,7 @@ "contao/managed-edition": "<=1.5", "corveda/phpsandbox": "<1.3.5", "cosenary/instagram": "<=2.3", - "craftcms/cms": "<=4.5.10", + "craftcms/cms": "<4.6.2", "croogo/croogo": "<4", "cuyz/valinor": "<0.12", "czproject/git-php": "<4.0.3", @@ -2505,7 +2506,7 @@ "desperado/xml-bundle": "<=0.1.7", "directmailteam/direct-mail": "<6.0.3|>=7,<7.0.3|>=8,<9.5.2", "doctrine/annotations": "<1.2.7", - "doctrine/cache": "<1.3.2|>=1.4,<1.4.2", + "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", "doctrine/common": "<2.4.3|>=2.5,<2.5.1", "doctrine/dbal": ">=2,<2.0.8|>=2.1,<2.1.2|>=3,<3.1.4", "doctrine/doctrine-bundle": "<1.5.2", @@ -2548,7 +2549,7 @@ "ezsystems/ezplatform-solr-search-engine": ">=1.7,<1.7.12|>=2,<2.0.2|>=3.3,<3.3.15", "ezsystems/ezplatform-user": ">=1,<1.0.1", "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.31", - "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.06,<=2019.03.5.1", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.03.5.1", "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", "ezyang/htmlpurifier": "<4.1.1", @@ -2600,7 +2601,7 @@ "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gree/jose": "<2.2.1", "gregwar/rst": "<1.0.3", - "grumpydictator/firefly-iii": "<6.1.1", + "grumpydictator/firefly-iii": "<6.1.7", "gugoan/economizzer": "<=0.9.0.0-beta1", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", @@ -2622,7 +2623,7 @@ "ibexa/user": ">=4,<4.4.3", "icecoder/icecoder": "<=8.1", "idno/known": "<=1.3.1", - "illuminate/auth": ">=4,<4.0.99|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.10", + "illuminate/auth": "<5.5.10", "illuminate/cookie": ">=4,<=4.0.11|>=4.1,<=4.1.99999|>=4.2,<=4.2.99999|>=5,<=5.0.99999|>=5.1,<=5.1.99999|>=5.2,<=5.2.99999|>=5.3,<=5.3.99999|>=5.4,<=5.4.99999|>=5.5,<=5.5.49|>=5.6,<=5.6.99999|>=5.7,<=5.7.99999|>=5.8,<=5.8.99999|>=6,<6.18.31|>=7,<7.22.4", "illuminate/database": "<6.20.26|>=7,<7.30.5|>=8,<8.40", "illuminate/encryption": ">=4,<=4.0.11|>=4.1,<=4.1.31|>=4.2,<=4.2.22|>=5,<=5.0.35|>=5.1,<=5.1.46|>=5.2,<=5.2.45|>=5.3,<=5.3.31|>=5.4,<=5.4.36|>=5.5,<5.5.40|>=5.6,<5.6.15", @@ -2682,7 +2683,7 @@ "liftkit/database": "<2.13.2", "limesurvey/limesurvey": "<3.27.19", "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": ">2.2.4,<2.2.6", + "livewire/livewire": ">2.2.4,<2.2.6|>=3,<3.0.4", "lms/routes": "<2.1.1", "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", "luyadev/yii-helpers": "<1.2.1", @@ -2698,7 +2699,7 @@ "marcwillmann/turn": "<0.3.3", "matyhtf/framework": "<3.0.6", "mautic/core": "<4.3", - "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", + "mediawiki/core": "<1.36.2", "mediawiki/matomo": "<2.4.3", "mediawiki/semantic-media-wiki": "<4.0.2", "melisplatform/melis-asset-manager": "<5.0.1", @@ -2786,7 +2787,7 @@ "phpmailer/phpmailer": "<6.5", "phpmussel/phpmussel": ">=1,<1.6", "phpmyadmin/phpmyadmin": "<5.2.1", - "phpmyfaq/phpmyfaq": "<=3.1.7", + "phpmyfaq/phpmyfaq": "<3.2.5", "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.34", @@ -2797,7 +2798,7 @@ "phpxmlrpc/extras": "<0.6.1", "phpxmlrpc/phpxmlrpc": "<4.9.2", "pi/pi": "<=2.5", - "pimcore/admin-ui-classic-bundle": "<1.2.2", + "pimcore/admin-ui-classic-bundle": "<1.3.2", "pimcore/customer-management-framework-bundle": "<4.0.6", "pimcore/data-hub": "<1.2.4", "pimcore/demo": "<10.3", @@ -2821,7 +2822,7 @@ "prestashop/ps_facetedsearch": "<3.4.1", "prestashop/ps_linklist": "<3.1", "privatebin/privatebin": "<1.4", - "processwire/processwire": "<=3.0.200", + "processwire/processwire": "<=3.0.210", "propel/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "pterodactyl/panel": "<1.7", @@ -2862,13 +2863,13 @@ "shopxo/shopxo": "<2.2.6", "showdoc/showdoc": "<2.10.4", "silverstripe-australia/advancedreports": ">=1,<=2", - "silverstripe/admin": "<1.13.6", + "silverstripe/admin": "<1.13.19|>=2,<2.1.8", "silverstripe/assets": ">=1,<1.11.1", "silverstripe/cms": "<4.11.3", "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", - "silverstripe/framework": "<4.13.14|>=5,<5.0.13", - "silverstripe/graphql": "<3.8.2|>=4,<4.1.3|>=4.2,<4.2.5|>=4.3,<4.3.4|>=5,<5.0.3", + "silverstripe/framework": "<4.13.39|>=5,<5.1.11", + "silverstripe/graphql": "<3.8.2|>=4,<4.3.7|>=5,<5.1.3", "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", "silverstripe/recipe-cms": ">=4.5,<4.5.3", "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", @@ -2901,13 +2902,14 @@ "spoonity/tcpdf": "<6.2.22", "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", "ssddanbrown/bookstack": "<22.02.3", - "statamic/cms": "<4.36", + "statamic/cms": "<4.46", "stormpath/sdk": "<9.9.99", "studio-42/elfinder": "<2.1.62", "subhh/libconnect": "<7.0.8|>=8,<8.1", "sukohi/surpass": "<1", - "sulu/sulu": "<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8|==2.4.0.0-RC1|>=2.5,<2.5.10", + "sulu/sulu": "<1.6.44|>=2,<2.4.16|>=2.5,<2.5.12", "sumocoders/framework-user-bundle": "<1.4", + "superbig/craft-audit": "<3.0.2", "swag/paypal": "<5.4.4", "swiftmailer/swiftmailer": ">=4,<5.4.5", "swiftyedit/swiftyedit": "<1.2", @@ -3044,7 +3046,7 @@ "yourls/yourls": "<=1.8.2", "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", - "zendframework/zend-cache": "<2.4.8|>=2.5,<2.5.3", + "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", "zendframework/zend-crypt": ">=2,<2.4.9|>=2.5,<2.5.2", "zendframework/zend-db": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.10|>=2.3,<2.3.5", @@ -3076,11 +3078,11 @@ "zenstruck/collection": "<0.2.1", "zetacomponents/mail": "<1.8.2", "zf-commons/zfc-user": "<1.2.2", - "zfcampus/zf-apigility-doctrine": "<1.0.3", + "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", "zfr/zfr-oauth2-server-module": "<0.1.2", "zoujingli/thinkadmin": "<=6.1.53" }, - "time": "2024-01-17T21:04:22+00:00", + "time": "2024-02-05T21:04:15+00:00", "default-branch": true, "type": "metapackage", "notification-url": "https://packagist.org/downloads/", @@ -3852,17 +3854,17 @@ }, { "name": "symfony/cache", - "version": "v7.0.2", - "version_normalized": "7.0.2.0", + "version": "v7.0.3", + "version_normalized": "7.0.3.0", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "378e30a864c868d635353f103a5a5e7569f029ec" + "reference": "2207eceb2433d74df81232d97439bf508cb9e050" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/378e30a864c868d635353f103a5a5e7569f029ec", - "reference": "378e30a864c868d635353f103a5a5e7569f029ec", + "url": "https://api.github.com/repos/symfony/cache/zipball/2207eceb2433d74df81232d97439bf508cb9e050", + "reference": "2207eceb2433d74df81232d97439bf508cb9e050", "shasum": "" }, "require": { @@ -3896,7 +3898,7 @@ "symfony/messenger": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0" }, - "time": "2023-12-29T15:37:40+00:00", + "time": "2024-01-23T15:02:46+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3931,7 +3933,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v7.0.2" + "source": "https://github.com/symfony/cache/tree/v7.0.3" }, "funding": [ { @@ -4030,37 +4032,37 @@ }, { "name": "symfony/config", - "version": "v6.4.0", - "version_normalized": "6.4.0.0", + "version": "v7.0.3", + "version_normalized": "7.0.3.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "5d33e0fb707d603330e0edfd4691803a1253572e" + "reference": "86a5027869ca3d6bdecae6d5d6c2f77c8f2c1d16" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/5d33e0fb707d603330e0edfd4691803a1253572e", - "reference": "5d33e0fb707d603330e0edfd4691803a1253572e", + "url": "https://api.github.com/repos/symfony/config/zipball/86a5027869ca3d6bdecae6d5d6c2f77c8f2c1d16", + "reference": "86a5027869ca3d6bdecae6d5d6c2f77c8f2c1d16", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^6.4|^7.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { - "symfony/finder": "<5.4", + "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, - "time": "2023-11-09T08:28:32+00:00", + "time": "2024-01-30T08:34:29+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4088,7 +4090,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.0" + "source": "https://github.com/symfony/config/tree/v7.0.3" }, "funding": [ { @@ -4178,17 +4180,17 @@ }, { "name": "symfony/filesystem", - "version": "v7.0.0", - "version_normalized": "7.0.0.0", + "version": "v7.0.3", + "version_normalized": "7.0.3.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7" + "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/7da8ea2362a283771478c5f7729cfcb43a76b8b7", - "reference": "7da8ea2362a283771478c5f7729cfcb43a76b8b7", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/2890e3a825bc0c0558526c04499c13f83e1b6b12", + "reference": "2890e3a825bc0c0558526c04499c13f83e1b6b12", "shasum": "" }, "require": { @@ -4196,7 +4198,7 @@ "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, - "time": "2023-07-27T06:33:22+00:00", + "time": "2024-01-23T15:02:46+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4224,7 +4226,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.0.0" + "source": "https://github.com/symfony/filesystem/tree/v7.0.3" }, "funding": [ { @@ -4329,54 +4331,53 @@ }, { "name": "symfony/translation", - "version": "v6.4.2", - "version_normalized": "6.4.2.0", + "version": "v7.0.3", + "version_normalized": "7.0.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681" + "reference": "7285f25c7dcc74d9ec1232473114274604e50f00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a2ab2ec1a462e53016de8e8d5e8912bfd62ea681", - "reference": "a2ab2ec1a462e53016de8e8d5e8912bfd62ea681", + "url": "https://api.github.com/repos/symfony/translation/zipball/7285f25c7dcc74d9ec1232473114274604e50f00", + "reference": "7285f25c7dcc74d9ec1232473114274604e50f00", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.4", "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.13", + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, - "time": "2023-12-18T09:25:29+00:00", + "time": "2024-01-29T15:41:16+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4407,7 +4408,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.2" + "source": "https://github.com/symfony/translation/tree/v7.0.3" }, "funding": [ { @@ -4508,17 +4509,17 @@ }, { "name": "symfony/var-exporter", - "version": "v7.0.2", - "version_normalized": "7.0.2.0", + "version": "v7.0.3", + "version_normalized": "7.0.3.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "345c62fefe92243c3a06fc0cc65f2ec1a47e0764" + "reference": "1fb79308cb5fc2b44bff6e8af10a5af6812e05b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/345c62fefe92243c3a06fc0cc65f2ec1a47e0764", - "reference": "345c62fefe92243c3a06fc0cc65f2ec1a47e0764", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/1fb79308cb5fc2b44bff6e8af10a5af6812e05b8", + "reference": "1fb79308cb5fc2b44bff6e8af10a5af6812e05b8", "shasum": "" }, "require": { @@ -4527,7 +4528,7 @@ "require-dev": { "symfony/var-dumper": "^6.4|^7.0" }, - "time": "2023-12-27T08:42:13+00:00", + "time": "2024-01-23T15:02:46+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4565,7 +4566,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.0.2" + "source": "https://github.com/symfony/var-exporter/tree/v7.0.3" }, "funding": [ { diff --git a/site/vendor/composer/installed.php b/site/vendor/composer/installed.php index eb5bcfaa2..eaedea867 100644 --- a/site/vendor/composer/installed.php +++ b/site/vendor/composer/installed.php @@ -1,9 +1,9 @@ array( 'name' => 'spaze/michalspacek.cz', - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => NULL, + 'pretty_version' => 'dev-main', + 'version' => 'dev-main', + 'reference' => 'de52d3a645caf288099870a2804d9ef5f395749c', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -11,9 +11,9 @@ ), 'versions' => array( 'contributte/translation' => array( - 'pretty_version' => 'v2.0.3', - 'version' => '2.0.3.0', - 'reference' => 'a8192980a8b48df411c3be68a22a082b75e41505', + 'pretty_version' => 'v2.0.4', + 'version' => '2.0.4.0', + 'reference' => 'ae4ff4e12095220161f2948e5cadc59f42a1936c', 'type' => 'library', 'install_path' => __DIR__ . '/../contributte/translation', 'aliases' => array(), @@ -128,9 +128,9 @@ 'dev_requirement' => false, ), 'nette/di' => array( - 'pretty_version' => 'v3.1.8', - 'version' => '3.1.8.0', - 'reference' => 'adf475076dae08109dd0d57b1a48668d1d1bedf0', + 'pretty_version' => 'v3.2.0', + 'version' => '3.2.0.0', + 'reference' => '8140289e32e1b2bf2d8b5986bd92124b87fe6b2f', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/di', 'aliases' => array(), @@ -323,9 +323,9 @@ 'dev_requirement' => true, ), 'phpstan/phpstan' => array( - 'pretty_version' => '1.10.56', - 'version' => '1.10.56.0', - 'reference' => '27816a01aea996191ee14d010f325434c0ee76fa', + 'pretty_version' => '1.10.57', + 'version' => '1.10.57.0', + 'reference' => '1627b1d03446904aaa77593f370c5201d2ecc34e', 'type' => 'library', 'install_path' => __DIR__ . '/../phpstan/phpstan', 'aliases' => array(), @@ -400,7 +400,7 @@ 'roave/security-advisories' => array( 'pretty_version' => 'dev-latest', 'version' => 'dev-latest', - 'reference' => 'f81bd7cb90f5f30d3b246e342843ae905947158f', + 'reference' => 'f987aa7e659fe7b118c5564974a6ef9e37b1dd0f', 'type' => 'metapackage', 'install_path' => NULL, 'aliases' => array( @@ -454,9 +454,9 @@ 'dev_requirement' => false, ), 'spaze/michalspacek.cz' => array( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => NULL, + 'pretty_version' => 'dev-main', + 'version' => 'dev-main', + 'reference' => 'de52d3a645caf288099870a2804d9ef5f395749c', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -541,9 +541,9 @@ ), ), 'symfony/cache' => array( - 'pretty_version' => 'v7.0.2', - 'version' => '7.0.2.0', - 'reference' => '378e30a864c868d635353f103a5a5e7569f029ec', + 'pretty_version' => 'v7.0.3', + 'version' => '7.0.3.0', + 'reference' => '2207eceb2433d74df81232d97439bf508cb9e050', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/cache', 'aliases' => array(), @@ -565,9 +565,9 @@ ), ), 'symfony/config' => array( - 'pretty_version' => 'v6.4.0', - 'version' => '6.4.0.0', - 'reference' => '5d33e0fb707d603330e0edfd4691803a1253572e', + 'pretty_version' => 'v7.0.3', + 'version' => '7.0.3.0', + 'reference' => '86a5027869ca3d6bdecae6d5d6c2f77c8f2c1d16', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/config', 'aliases' => array(), @@ -583,9 +583,9 @@ 'dev_requirement' => false, ), 'symfony/filesystem' => array( - 'pretty_version' => 'v7.0.0', - 'version' => '7.0.0.0', - 'reference' => '7da8ea2362a283771478c5f7729cfcb43a76b8b7', + 'pretty_version' => 'v7.0.3', + 'version' => '7.0.3.0', + 'reference' => '2890e3a825bc0c0558526c04499c13f83e1b6b12', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), @@ -631,9 +631,9 @@ 'dev_requirement' => false, ), 'symfony/translation' => array( - 'pretty_version' => 'v6.4.2', - 'version' => '6.4.2.0', - 'reference' => 'a2ab2ec1a462e53016de8e8d5e8912bfd62ea681', + 'pretty_version' => 'v7.0.3', + 'version' => '7.0.3.0', + 'reference' => '7285f25c7dcc74d9ec1232473114274604e50f00', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation', 'aliases' => array(), @@ -655,9 +655,9 @@ ), ), 'symfony/var-exporter' => array( - 'pretty_version' => 'v7.0.2', - 'version' => '7.0.2.0', - 'reference' => '345c62fefe92243c3a06fc0cc65f2ec1a47e0764', + 'pretty_version' => 'v7.0.3', + 'version' => '7.0.3.0', + 'reference' => '1fb79308cb5fc2b44bff6e8af10a5af6812e05b8', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/var-exporter', 'aliases' => array(), diff --git a/site/vendor/contributte/translation/.github/workflows/main.yaml b/site/vendor/contributte/translation/.github/workflows/main.yaml index bfc62fb1e..3b34c4391 100644 --- a/site/vendor/contributte/translation/.github/workflows/main.yaml +++ b/site/vendor/contributte/translation/.github/workflows/main.yaml @@ -149,7 +149,7 @@ jobs: strategy: matrix: - php-version: [ "8.0", "8.1" ] + php-version: [ "8.0", "8.1", "8.2", "8.3" ] operating-system: [ "ubuntu-latest" ] composer-args: [ "" ] include: diff --git a/site/vendor/contributte/translation/composer.json b/site/vendor/contributte/translation/composer.json index ce35aa6d0..9b147fd8a 100644 --- a/site/vendor/contributte/translation/composer.json +++ b/site/vendor/contributte/translation/composer.json @@ -16,7 +16,7 @@ ], "require": { "php": "^8.0.2", - "latte/latte": "^2.6|^3.0", + "latte/latte": "^2.6|^3.0.12", "nette/di": "^3.0.6", "nette/finder": "^2.5.2|~3.0.0", "nette/http": "^3.0.7", @@ -24,24 +24,24 @@ "nette/schema": "^1.0", "nette/routing": "^3.0", "nette/utils": "^3.2.1|~4.0.0", - "symfony/translation": "^6.0", - "symfony/config": "^6.0" + "symfony/translation": "^6.0|^7.0", + "symfony/config": "^6.0|^7.0" }, "require-dev": { "doctrine/orm": "^2.8", "mockery/mockery": "^1.4", "nette/application": "^3.1.0", - "nette/bootstrap": "^3.0", + "nette/bootstrap": "^3.2.1", "nette/database": "^3.1.1", "nette/robot-loader": "^3.4.0|~4.0.0", "nette/tester": "^2.3.1", - "ninjify/nunjuck": "^0.3.0", + "ninjify/nunjuck": "^0.4.0", "ninjify/qa": "^0.13", "phpstan/phpstan": "^1.8", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-nette": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "psr/log": "^1.1", + "psr/log": "^1.1|^2.0|^3.0", "tracy/tracy": "^2.8" }, "autoload": { diff --git a/site/vendor/contributte/translation/src/DI/TranslationExtension.php b/site/vendor/contributte/translation/src/DI/TranslationExtension.php index af3e569c7..4ad0568a9 100644 --- a/site/vendor/contributte/translation/src/DI/TranslationExtension.php +++ b/site/vendor/contributte/translation/src/DI/TranslationExtension.php @@ -82,6 +82,7 @@ public function getConfigSchema(): Schema 'translatorFactory' => Expect::string()->default(null), 'returnOriginalMessage' => Expect::bool()->default(true), 'autowired' => Expect::type('bool|array')->default(true), + 'latteFactory' => Expect::string(ILatteFactory::class)->nullable(), ]); } @@ -229,7 +230,7 @@ public function beforeCompile(): void $tracyPanel = $builder->getDefinition($this->prefix('tracyPanel')); } - $latteFactoryName = $builder->getByType(ILatteFactory::class); + $latteFactoryName = $this->config->latteFactory ? $builder->getByType($this->config->latteFactory) : null; if ($latteFactoryName !== null) { $iTranslator = $builder->getDefinitionByType(ITranslator::class); diff --git a/site/vendor/contributte/translation/src/Latte/TranslatorExtension.php b/site/vendor/contributte/translation/src/Latte/TranslatorExtension.php index f436eff91..159a39f81 100644 --- a/site/vendor/contributte/translation/src/Latte/TranslatorExtension.php +++ b/site/vendor/contributte/translation/src/Latte/TranslatorExtension.php @@ -9,7 +9,7 @@ use Latte\Compiler\Nodes\Php\ArgumentNode; use Latte\Compiler\Nodes\Php\Expression\ArrayNode; use Latte\Compiler\Nodes\Php\Expression\BinaryOpNode; -use Latte\Compiler\Nodes\Php\Expression\StaticCallNode; +use Latte\Compiler\Nodes\Php\Expression\StaticMethodCallNode; use Latte\Compiler\Nodes\Php\Expression\VariableNode; use Latte\Compiler\Nodes\Php\FilterNode; use Latte\Compiler\Nodes\Php\IdentifierNode; @@ -70,7 +70,7 @@ public function parseTranslate( $prefixProp = Helpers::createLatteProperty('Prefix'); - $messageNode = new StaticCallNode( + $messageNode = new StaticMethodCallNode( new NameNode('\Contributte\Translation\Helpers', NameNode::KindFullyQualified), new IdentifierNode('prefixMessage'), [ diff --git a/site/vendor/nette/di/composer.json b/site/vendor/nette/di/composer.json index 1c60badd0..f4782e7b2 100644 --- a/site/vendor/nette/di/composer.json +++ b/site/vendor/nette/di/composer.json @@ -15,16 +15,16 @@ } ], "require": { - "php": "7.2 - 8.3", + "php": "8.1 - 8.3", "ext-tokenizer": "*", "nette/neon": "^3.3 || ^4.0", - "nette/php-generator": "^3.5.4 || ^4.0", - "nette/robot-loader": "^3.2 || ~4.0.0", + "nette/php-generator": "^4.1.3", + "nette/robot-loader": "^4.0", "nette/schema": "^1.2.5", - "nette/utils": "^3.2.5 || ~4.0.0" + "nette/utils": "^4.0" }, "require-dev": { - "nette/tester": "^2.4", + "nette/tester": "^2.5.2", "tracy/tracy": "^2.9", "phpstan/phpstan": "^1.0" }, @@ -38,7 +38,7 @@ }, "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "3.2-dev" } } } diff --git a/site/vendor/nette/di/contributing.md b/site/vendor/nette/di/contributing.md deleted file mode 100644 index 184152c02..000000000 --- a/site/vendor/nette/di/contributing.md +++ /dev/null @@ -1,33 +0,0 @@ -How to contribute & use the issue tracker -========================================= - -Nette welcomes your contributions. There are several ways to help out: - -* Create an issue on GitHub, if you have found a bug -* Write test cases for open bug issues -* Write fixes for open bug/feature issues, preferably with test cases included -* Contribute to the [documentation](https://nette.org/en/writing) - -Issues ------- - -Please **do not use the issue tracker to ask questions**. We will be happy to help you -on [Nette forum](https://forum.nette.org) or chat with us on [Gitter](https://gitter.im/nette/nette). - -A good bug report shouldn't leave others needing to chase you up for more -information. Please try to be as detailed as possible in your report. - -**Feature requests** are welcome. But take a moment to find out whether your idea -fits with the scope and aims of the project. It's up to *you* to make a strong -case to convince the project's developers of the merits of this feature. - -Contributing ------------- - -If you'd like to contribute, please take a moment to read [the contributing guide](https://nette.org/en/contributing). - -The best way to propose a feature is to discuss your ideas on [Nette forum](https://forum.nette.org) before implementing them. - -Please do not fix whitespace, format code, or make a purely cosmetic patch. - -Thanks! :heart: diff --git a/site/vendor/nette/di/readme.md b/site/vendor/nette/di/readme.md index 0769403c8..24d81e254 100644 --- a/site/vendor/nette/di/readme.md +++ b/site/vendor/nette/di/readme.md @@ -37,7 +37,7 @@ The recommended way to install is via Composer: composer require nette/di ``` -It requires PHP version 7.2 and supports PHP up to 8.3. +It requires PHP version 8.1 and supports PHP up to 8.3. Usage @@ -50,8 +50,8 @@ We have the object representing email: ```php class Mail { - public $subject; - public $message; + public string $subject; + public string $message; } ``` @@ -60,7 +60,7 @@ An object which can send emails: ```php interface Mailer { - function send(Mail $mail, $to); + function send(Mail $mail, string $to): void; } ``` @@ -69,7 +69,7 @@ A support for logging: ```php interface Logger { - function log($message); + function log(string $message): void; } ``` @@ -78,23 +78,25 @@ And finally, a class that provides sending newsletters: ```php class NewsletterManager { - private $mailer; - private $logger; + private Mailer $mailer; + private Logger $logger; - function __construct(Mailer $mailer, Logger $logger) + public function __construct(Mailer $mailer, Logger $logger) { $this->mailer = $mailer; $this->logger = $logger; } - function distribute(array $recipients) + public function distribute(array $recipients): void { $mail = new Mail; - ... + $mail->subject = '...'; + $mail->message = '...'; + foreach ($recipients as $recipient) { $this->mailer->send($mail, $recipient); } - $this->logger->log(...); + $this->logger->log('...'); } } ``` @@ -106,7 +108,7 @@ Also, we have a ability to implement own `Logger` or `Mailer`, like this: ```php class SendMailMailer implements Mailer { - function send(Mail $mail, $to) + public function send(Mail $mail, string $to): void { mail($to, $mail->subject, $mail->message); } @@ -114,14 +116,14 @@ class SendMailMailer implements Mailer class FileLogger implements Logger { - private $file; + private string $file; - function __construct($file) + public function __construct(string $file) { $this->file = $file; } - function log($message) + public function log(string $message): void { file_put_contents($this->file, $message . "\n", FILE_APPEND); } @@ -135,26 +137,26 @@ Container for our application might look like this: ```php class Container { - private $logger; - private $mailer; + private ?Logger $logger; + private ?Mailer $mailer; - function getLogger() + public function getLogger(): Logger { - if (!$this->logger) { + if (!isset($this->logger)) { $this->logger = new FileLogger('log.txt'); } return $this->logger; } - function getMailer() + public function getMailer(): Mailer { - if (!$this->mailer) { + if (!isset($this->mailer)) { $this->mailer = new SendMailMailer; } return $this->mailer; } - function createNewsletterManager() + public function createNewsletterManager(): NewsletterManager { return new NewsletterManager($this->getMailer(), $this->getLogger()); } @@ -213,7 +215,7 @@ The container will be generated only once and the code is stored in cache (in di During development it is useful to activate auto-refresh mode which automatically regenerate the container when any class or configuration file is changed. Just in the constructor `ContainerLoader` append `true` as the second argument: ```php -$loader = new Nette\DI\ContainerLoader(__DIR__ . '/temp', true); +$loader = new Nette\DI\ContainerLoader(__DIR__ . '/temp', autoRebuild: true); ``` @@ -244,9 +246,9 @@ Class of the service: ```php class NewsletterManager { - private $anotherService; + private AnotherService $anotherService; - public function setAnotherService(AnotherService $service) + public function setAnotherService(AnotherService $service): void { $this->anotherService = $service; } @@ -254,7 +256,7 @@ class NewsletterManager ... ``` -We can also add the `inject: yes` directive. This directive will enable automatic call of `inject*` methods and passing dependencies to public variables with `@inject` annotations: +We can also add the `inject: yes` directive. This directive will enable automatic call of `inject*` methods and passing dependencies to public variables with #[Inject] attribute: ```neon services: @@ -266,21 +268,23 @@ services: Dependency `Service1` will be passed by calling the `inject*` method, dependency `Service2` will be assigned to the `$service2` variable: ```php +use Nette\DI\Attributes\Inject; + class FooClass { - private $service1; + private Service1 $service1; // 1) inject* method: - public function injectService1(Service1 $service) + public function injectService1(Service1 $service): void { $this->service1 = $service1; } - // 2) Assign to the variable with the @inject annotation: + // 2) Assign to the variable with the #[Inject] attribute: - /** @inject @var Service2 */ - public $service2; + #[Inject] + public Service2 $service2; } ``` @@ -291,17 +295,14 @@ However, this method is not ideal, because the variable must be declared as publ Factories --------- -We can use factories generated from an interface. The interface must declare the returning type in the `@return` annotation of the method. Nette will generate a proper implementation of the interface. +We can use factories generated from an interface. The interface must declare the returning type of the method. Nette will generate a proper implementation of the interface. The interface must have exactly one method named `create`. Our factory interface could be declared in the following way: ```php -interface IBarFactory +interface BarFactory { - /** - * @return Bar - */ - public function create(); + function create(): Bar; } ``` @@ -310,7 +311,7 @@ The `create` method will instantiate an `Bar` with the following definition: ```php class Bar { - private $logger; + private Logger $logger; public function __construct(Logger $logger) { @@ -323,7 +324,7 @@ The factory will be registered in the `config.neon` file: ```neon services: - - IBarFactory + - BarFactory ``` Nette will check if the declared service is an interface. If yes, it will also generate the corresponding implementation of the factory. The definition can be also written in a more verbose form: @@ -331,7 +332,7 @@ Nette will check if the declared service is an interface. If yes, it will also g ```neon services: barFactory: - implement: IBarFactory + implement: BarFactory ``` This full definition allows us to declare additional configuration of the object using the `arguments` and `setup` sections, similarly as for all other services. @@ -341,14 +342,14 @@ In our code, we only have to obtain the factory instance and call the `create` m ```php class Foo { - private $barFactory; + private BarFactory $barFactory; - function __construct(IBarFactory $barFactory) + function __construct(BarFactory $barFactory) { $this->barFactory = $barFactory; } - function bar() + function bar(): void { $bar = $this->barFactory->create(); } diff --git a/site/vendor/nette/di/src/Bridges/DITracy/ContainerPanel.php b/site/vendor/nette/di/src/Bridges/DITracy/ContainerPanel.php index a50c0d6de..f8301b062 100644 --- a/site/vendor/nette/di/src/Bridges/DITracy/ContainerPanel.php +++ b/site/vendor/nette/di/src/Bridges/DITracy/ContainerPanel.php @@ -19,16 +19,9 @@ */ class ContainerPanel implements Tracy\IBarPanel { - use Nette\SmartObject; - - /** @var float|null */ - public static $compilationTime; - - /** @var Nette\DI\Container */ - private $container; - - /** @var float|null */ - private $elapsedTime; + public static ?float $compilationTime = null; + private Nette\DI\Container $container; + private ?float $elapsedTime; public function __construct(Container $container) @@ -57,7 +50,7 @@ public function getTab(): string */ public function getPanel(): string { - $methods = (function () { return $this->methods; })->bindTo($this->container, Container::class)(); + $methods = (fn() => $this->methods)->bindTo($this->container, Container::class)(); $services = []; foreach ($methods as $name => $foo) { $name = lcfirst(str_replace('__', '.', substr($name, 13))); @@ -65,7 +58,7 @@ public function getPanel(): string } ksort($services, SORT_NATURAL); - $propertyTags = (function () { return $this->tags; })->bindTo($this->container, $this->container)(); + $propertyTags = (fn() => $this->tags)->bindTo($this->container, $this->container)(); $tags = []; foreach ($propertyTags as $tag => $tmp) { foreach ($tmp as $service => $val) { @@ -77,8 +70,8 @@ public function getPanel(): string $container = $this->container; $rc = (new \ReflectionClass($this->container)); $file = $rc->getFileName(); - $instances = (function () { return $this->instances; })->bindTo($this->container, Container::class)(); - $wiring = (function () { return $this->wiring; })->bindTo($this->container, $this->container)(); + $instances = (fn() => $this->instances)->bindTo($this->container, Container::class)(); + $wiring = (fn() => $this->wiring)->bindTo($this->container, $this->container)(); $parameters = $rc->getMethod('getStaticParameters')->getDeclaringClass()->getName() === Container::class ? null : $container->getParameters(); diff --git a/site/vendor/nette/di/src/Bridges/DITracy/templates/ContainerPanel.panel.phtml b/site/vendor/nette/di/src/Bridges/DITracy/templates/ContainerPanel.panel.phtml index a54f7b138..b84022914 100644 --- a/site/vendor/nette/di/src/Bridges/DITracy/templates/ContainerPanel.panel.phtml +++ b/site/vendor/nette/di/src/Bridges/DITracy/templates/ContainerPanel.panel.phtml @@ -49,7 +49,7 @@ use Tracy\Helpers; $type): ?> - + $name" : Helpers::escapeHtml($name) ?> diff --git a/site/vendor/nette/di/src/DI/Autowiring.php b/site/vendor/nette/di/src/DI/Autowiring.php index b70cfe446..601f59ed7 100644 --- a/site/vendor/nette/di/src/DI/Autowiring.php +++ b/site/vendor/nette/di/src/DI/Autowiring.php @@ -9,27 +9,22 @@ namespace Nette\DI; -use Nette; - /** * Autowiring. */ class Autowiring { - use Nette\SmartObject; - - /** @var ContainerBuilder */ - private $builder; + private ContainerBuilder $builder; /** @var array[] type => services, used by getByType() */ - private $highPriority = []; + private array $highPriority = []; /** @var array[] type => services, used by findByType() */ - private $lowPriority = []; + private array $lowPriority = []; /** @var string[] of classes excluded from autowiring */ - private $excludedClasses = []; + private array $excludedClasses = []; public function __construct(ContainerBuilder $builder) @@ -40,7 +35,7 @@ public function __construct(ContainerBuilder $builder) /** * Resolves service name by type. - * @param bool $throw exception if service not found? + * @return ($throw is true ? string : ?string) * @throws MissingServiceException when not found * @throws ServiceCreationException when multiple found */ @@ -65,13 +60,13 @@ public function getByType(string $type, bool $throw = false): ?string } else { $list = $types[$type]; natsort($list); - $hint = count($list) === 2 && ($tmp = strpos($list[0], '.') xor strpos($list[1], '.')) + $hint = count($list) === 2 && ($tmp = str_contains($list[0], '.') xor str_contains($list[1], '.')) ? '. If you want to overwrite service ' . $list[$tmp ? 0 : 1] . ', give it proper name.' : ''; throw new ServiceCreationException(sprintf( "Multiple services of type $type found: %s%s", implode(', ', $list), - $hint + $hint, )); } } @@ -129,11 +124,11 @@ public function rebuild(): void foreach ($autowired as $k => $autowiredType) { if ($autowiredType === ContainerBuilder::ThisService) { $autowired[$k] = $type; - } elseif (!is_a($type, $autowiredType, true)) { + } elseif (!is_a($type, $autowiredType, allow_string: true)) { throw new ServiceCreationException(sprintf( "Incompatible class %s in autowiring definition of service '%s'.", $autowiredType, - $name + $name, )); } } @@ -145,7 +140,7 @@ public function rebuild(): void } elseif (is_array($autowired)) { $priority = false; foreach ($autowired as $autowiredType) { - if (is_a($parent, $autowiredType, true)) { + if (is_a($parent, $autowiredType, allow_string: true)) { if (empty($preferred[$parent]) && isset($this->highPriority[$parent])) { $this->lowPriority[$parent] = array_merge($this->lowPriority[$parent] ?? [], $this->highPriority[$parent]); $this->highPriority[$parent] = []; diff --git a/site/vendor/nette/di/src/DI/Compiler.php b/site/vendor/nette/di/src/DI/Compiler.php index 35e12ed7d..529ce6d81 100644 --- a/site/vendor/nette/di/src/DI/Compiler.php +++ b/site/vendor/nette/di/src/DI/Compiler.php @@ -18,33 +18,21 @@ */ class Compiler { - use Nette\SmartObject; - private const Services = 'services', Parameters = 'parameters', DI = 'di'; /** @var CompilerExtension[] */ - private $extensions = []; - - /** @var ContainerBuilder */ - private $builder; - - /** @var array */ - private $config = []; + private array $extensions = []; + private ContainerBuilder $builder; + private array $config = []; /** @var array [section => array[]] */ - private $configs = []; - - /** @var string */ - private $sources = ''; - - /** @var DependencyChecker */ - private $dependencies; - - /** @var string */ - private $className = 'Container'; + private array $configs = []; + private string $sources = ''; + private DependencyChecker $dependencies; + private string $className = 'Container'; public function __construct(?ContainerBuilder $builder = null) @@ -58,9 +46,8 @@ public function __construct(?ContainerBuilder $builder = null) /** * Add custom configurator extension. - * @return static */ - public function addExtension(?string $name, CompilerExtension $extension) + public function addExtension(?string $name, CompilerExtension $extension): static { if ($name === null) { $name = '_' . count($this->extensions); @@ -74,7 +61,7 @@ public function addExtension(?string $name, CompilerExtension $extension) throw new Nette\InvalidArgumentException(sprintf( "Name of extension '%s' has the same name as '%s' in a case-insensitive manner.", $name, - $nm + $nm, )); } } @@ -87,7 +74,7 @@ public function addExtension(?string $name, CompilerExtension $extension) public function getExtensions(?string $type = null): array { return $type - ? array_filter($this->extensions, function ($item) use ($type): bool { return $item instanceof $type; }) + ? array_filter($this->extensions, fn($item): bool => $item instanceof $type) : $this->extensions; } @@ -98,8 +85,7 @@ public function getContainerBuilder(): ContainerBuilder } - /** @return static */ - public function setClassName(string $className) + public function setClassName(string $className): static { $this->className = $className; return $this; @@ -108,9 +94,8 @@ public function setClassName(string $className) /** * Adds new configuration. - * @return static */ - public function addConfig(array $config) + public function addConfig(array $config): static { foreach ($config as $section => $data) { $this->configs[$section][] = $data; @@ -123,13 +108,12 @@ public function addConfig(array $config) /** * Adds new configuration from file. - * @return static */ - public function loadConfig(string $file, ?Config\Loader $loader = null) + public function loadConfig(string $file, ?Config\Loader $loader = null): static { $sources = $this->sources . "// source: $file\n"; $loader = $loader ?: new Config\Loader; - foreach ($loader->load($file, false) as $data) { + foreach ($loader->load($file, merge: false) as $data) { $this->addConfig($data); } @@ -151,9 +135,8 @@ public function getConfig(): array /** * Sets the names of dynamic parameters. - * @return static */ - public function setDynamicParameterNames(array $names) + public function setDynamicParameterNames(array $names): static { assert($this->extensions[self::Parameters] instanceof Extensions\ParametersExtension); $this->extensions[self::Parameters]->dynamicParams = $names; @@ -164,9 +147,8 @@ public function setDynamicParameterNames(array $names) /** * Adds dependencies to the list. * @param array $deps of ReflectionClass|\ReflectionFunctionAbstract|string - * @return static */ - public function addDependencies(array $deps) + public function addDependencies(array $deps): static { $this->dependencies->add(array_filter($deps)); return $this; @@ -182,8 +164,7 @@ public function exportDependencies(): array } - /** @return static */ - public function addExportedTag(string $tag) + public function addExportedTag(string $tag): static { if (isset($this->extensions[self::DI])) { assert($this->extensions[self::DI] instanceof Extensions\DIExtension); @@ -194,8 +175,7 @@ public function addExportedTag(string $tag) } - /** @return static */ - public function addExportedType(string $type) + public function addExportedType(string $type): static { if (isset($this->extensions[self::DI])) { assert($this->extensions[self::DI] instanceof Extensions\DIExtension); @@ -250,14 +230,14 @@ public function processExtensions(): void if ($extra = array_diff_key($this->extensions, $extensions, $first, [self::Services => 1])) { throw new Nette\DeprecatedException(sprintf( "Extensions '%s' were added while container was being compiled.", - implode("', '", array_keys($extra)) + implode("', '", array_keys($extra)), )); } elseif ($extra = key(array_diff_key($this->configs, $this->extensions))) { $hint = Nette\Utils\Helpers::getSuggestion(array_keys($this->extensions), $extra); throw new InvalidConfigurationException( sprintf("Found section '%s' in configuration, but corresponding extension is missing", $extra) - . ($hint ? ", did you mean '$hint'?" : '.') + . ($hint ? ", did you mean '$hint'?" : '.'), ); } } @@ -278,9 +258,8 @@ private function processBeforeCompile(): void /** * Merges and validates configurations against scheme. - * @return array|object */ - private function processSchema(Schema\Schema $schema, array $configs, $name = null) + private function processSchema(Schema\Schema $schema, array $configs, $name = null): array|object { $processor = new Schema\Processor; $processor->onNewContext[] = function (Schema\Context $context) use ($name) { diff --git a/site/vendor/nette/di/src/DI/CompilerExtension.php b/site/vendor/nette/di/src/DI/CompilerExtension.php index 0523448ad..8d623b891 100644 --- a/site/vendor/nette/di/src/DI/CompilerExtension.php +++ b/site/vendor/nette/di/src/DI/CompilerExtension.php @@ -17,23 +17,16 @@ */ abstract class CompilerExtension { - use Nette\SmartObject; - - /** @var Compiler */ - protected $compiler; - - /** @var string */ - protected $name; + protected Compiler $compiler; + protected string $name; /** @var array|object */ protected $config = []; - /** @var Nette\PhpGenerator\Closure */ - protected $initialization; + protected Nette\PhpGenerator\Closure $initialization; - /** @return static */ - public function setCompiler(Compiler $compiler, string $name) + public function setCompiler(Compiler $compiler, string $name): static { $this->initialization = new Nette\PhpGenerator\Closure; $this->compiler = $compiler; @@ -42,16 +35,8 @@ public function setCompiler(Compiler $compiler, string $name) } - /** - * @param array|object $config - * @return static - */ - public function setConfig($config) + public function setConfig(array|object $config): static { - if (!is_array($config) && !is_object($config)) { - throw new Nette\InvalidArgumentException; - } - $this->config = $config; return $this; } @@ -59,9 +44,8 @@ public function setConfig($config) /** * Returns extension configuration. - * @return array|object */ - public function getConfig() + public function getConfig(): array|object { return $this->config; } @@ -95,7 +79,7 @@ public function validateConfig(array $expected, ?array $config = null, ?string $ throw new Nette\DI\InvalidConfigurationException(sprintf( "Unknown configuration option '%s\u{a0}›\u{a0}%s'", $name, - $hint ? key($extra) : implode("', '{$name}\u{a0}›\u{a0}", array_keys($extra)) + $hint ? key($extra) : implode("', '{$name}\u{a0}›\u{a0}", array_keys($extra)), ) . ($hint ? ", did you mean '{$name}\u{a0}›\u{a0}{$hint}'?" : '.')); } @@ -154,7 +138,7 @@ public function getInitialization(): Nette\PhpGenerator\Closure */ public function prefix(string $id): string { - return substr_replace($id, $this->name . '.', substr($id, 0, 1) === '@' ? 1 : 0, 0); + return substr_replace($id, $this->name . '.', str_starts_with($id, '@') ? 1 : 0, 0); } diff --git a/site/vendor/nette/di/src/DI/Config/Adapters/NeonAdapter.php b/site/vendor/nette/di/src/DI/Config/Adapters/NeonAdapter.php index 319b3791e..9221e7edf 100644 --- a/site/vendor/nette/di/src/DI/Config/Adapters/NeonAdapter.php +++ b/site/vendor/nette/di/src/DI/Config/Adapters/NeonAdapter.php @@ -21,12 +21,8 @@ */ final class NeonAdapter implements Nette\DI\Config\Adapter { - use Nette\SmartObject; - private const PreventMergingSuffix = '!'; - - /** @var string */ - private $file; + private string $file; /** @@ -43,8 +39,10 @@ public function load(string $file): array $decoder = new Neon\Decoder; $node = $decoder->parseToNode($input); $traverser = new Neon\Traverser; - $node = $traverser->traverse($node, [$this, 'removeUnderscoreVisitor']); - $node = $traverser->traverse($node, [$this, 'convertAtSignVisitor']); + $node = $traverser->traverse($node, $this->firstClassCallableVisitor(...)); + $node = $traverser->traverse($node, $this->removeUnderscoreVisitor(...)); + $node = $traverser->traverse($node, $this->convertAtSignVisitor(...)); + $node = $traverser->traverse($node, $this->deprecatedParametersVisitor(...)); return $this->process((array) $node->toValue()); } @@ -54,12 +52,12 @@ public function process(array $arr): array { $res = []; foreach ($arr as $key => $val) { - if (is_string($key) && substr($key, -1) === self::PreventMergingSuffix) { + if (is_string($key) && str_ends_with($key, self::PreventMergingSuffix)) { if (!is_array($val) && $val !== null) { throw new Nette\DI\InvalidConfigurationException(sprintf( "Replacing operator is available only for arrays, item '%s' is not array (used in '%s')", $key, - $this->file + $this->file, )); } @@ -76,14 +74,14 @@ public function process(array $arr): array foreach ($this->process($val->attributes) as $st) { $tmp = new Statement( $tmp === null ? $st->getEntity() : [$tmp, ltrim(implode('::', (array) $st->getEntity()), ':')], - $st->arguments + $st->arguments, ); } $val = $tmp; } else { $tmp = $this->process([$val->value]); - if (is_string($tmp[0]) && strpos($tmp[0], '?') !== false) { + if (is_string($tmp[0]) && str_contains($tmp[0], '?')) { throw new Nette\DI\InvalidConfigurationException("Operator ? is deprecated in config file (used in '$this->file')"); } @@ -109,7 +107,7 @@ function (&$val): void { if ($val instanceof Statement) { $val = self::statementToEntity($val); } - } + }, ); return "# generated by Nette\n\n" . Neon\Neon::encode($data, Neon\Neon::BLOCK); } @@ -125,7 +123,7 @@ function (&$val): void { } elseif ($val instanceof Reference) { $val = '@' . $val->getValue(); } - } + }, ); $entity = $val->getEntity(); @@ -138,7 +136,7 @@ function (&$val): void { [ self::statementToEntity($entity[0]), new Neon\Entity('::' . $entity[1], $val->arguments), - ] + ], ); } elseif ($entity[0] instanceof Reference) { $entity = '@' . $entity[0]->getValue() . '::' . $entity[1]; @@ -151,8 +149,20 @@ function (&$val): void { } - /** @internal */ - public function removeUnderscoreVisitor(Neon\Node $node) + private function firstClassCallableVisitor(Neon\Node $node) + { + if ($node instanceof Neon\Node\EntityNode + && count($node->attributes) === 1 + && $node->attributes[0]->key === null + && $node->attributes[0]->value instanceof Neon\Node\LiteralNode + && $node->attributes[0]->value->value === '...' + ) { + $node->attributes[0]->value->value = Nette\DI\Resolver::getFirstClassCallable()[0]; + } + } + + + private function removeUnderscoreVisitor(Neon\Node $node) { if (!$node instanceof Neon\Node\EntityNode) { return; @@ -160,10 +170,12 @@ public function removeUnderscoreVisitor(Neon\Node $node) $index = false; foreach ($node->attributes as $i => $attr) { - if ($index) { - $attr->key = $attr->key ?? new Neon\Node\LiteralNode((string) $i); + if ($attr->key !== null) { + continue; } + $attr->key = $index ? new Neon\Node\LiteralNode((string) $i) : null; + if ($attr->value instanceof Neon\Node\LiteralNode && $attr->value->value === '_') { unset($node->attributes[$i]); $index = true; @@ -177,11 +189,10 @@ public function removeUnderscoreVisitor(Neon\Node $node) } - /** @internal */ - public function convertAtSignVisitor(Neon\Node $node) + private function convertAtSignVisitor(Neon\Node $node) { if ($node instanceof Neon\Node\StringNode) { - if (substr($node->value, 0, 2) === '@@') { + if (str_starts_with($node->value, '@@')) { trigger_error("There is no need to escape @ anymore, replace @@ with @ in: '$node->value' (used in $this->file)", E_USER_DEPRECATED); } else { $node->value = preg_replace('#^@#', '$0$0', $node->value); // escape @@ -190,9 +201,19 @@ public function convertAtSignVisitor(Neon\Node $node) } elseif ( $node instanceof Neon\Node\LiteralNode && is_string($node->value) - && substr($node->value, 0, 2) === '@@' + && str_starts_with($node->value, '@@') ) { trigger_error("There is no need to escape @ anymore, replace @@ with @ and put string in quotes: '$node->value' (used in $this->file)", E_USER_DEPRECATED); } } + + + private function deprecatedParametersVisitor(Neon\Node $node) + { + if (($node instanceof Neon\Node\StringNode || $node instanceof Neon\Node\LiteralNode) + && str_contains((string) $node->value, '%parameters%') + ) { + trigger_error('%parameters% is deprecated, use @container::getParameters() (in ' . $this->file . ')', E_USER_DEPRECATED); + } + } } diff --git a/site/vendor/nette/di/src/DI/Config/Adapters/PhpAdapter.php b/site/vendor/nette/di/src/DI/Config/Adapters/PhpAdapter.php index 17732810b..5471307b2 100644 --- a/site/vendor/nette/di/src/DI/Config/Adapters/PhpAdapter.php +++ b/site/vendor/nette/di/src/DI/Config/Adapters/PhpAdapter.php @@ -17,8 +17,6 @@ */ final class PhpAdapter implements Nette\DI\Config\Adapter { - use Nette\SmartObject; - /** * Reads configuration from PHP file. */ diff --git a/site/vendor/nette/di/src/DI/Config/Loader.php b/site/vendor/nette/di/src/DI/Config/Loader.php index 6273a8c73..8da694676 100644 --- a/site/vendor/nette/di/src/DI/Config/Loader.php +++ b/site/vendor/nette/di/src/DI/Config/Loader.php @@ -18,20 +18,15 @@ */ class Loader { - use Nette\SmartObject; - private const IncludesKey = 'includes'; - private $adapters = [ + private array $adapters = [ 'php' => Adapters\PhpAdapter::class, 'neon' => Adapters\NeonAdapter::class, ]; - - private $dependencies = []; - - private $loadedFiles = []; - - private $parameters = []; + private array $dependencies = []; + private array $loadedFiles = []; + private array $parameters = []; /** @@ -74,16 +69,6 @@ public function load(string $file, ?bool $merge = true): array } - /** @deprecated */ - public function save(array $data, string $file): void - { - trigger_error(__METHOD__ . "() is deprecated, use adapter's dump() method.", E_USER_DEPRECATED); - if (file_put_contents($file, $this->getAdapter($file)->dump($data)) === false) { - throw new Nette\IOException(sprintf("Cannot write file '%s'.", $file)); - } - } - - /** * Returns configuration files. */ @@ -106,10 +91,8 @@ public function expandIncludedFile(string $includedFile, string $mainFile): stri /** * Registers adapter for given file extension. - * @param string|Adapter $adapter - * @return static */ - public function addAdapter(string $extension, $adapter) + public function addAdapter(string $extension, string|Adapter $adapter): static { $this->adapters[strtolower($extension)] = $adapter; return $this; @@ -129,8 +112,7 @@ private function getAdapter(string $file): Adapter } - /** @return static */ - public function setParameters(array $params) + public function setParameters(array $params): static { $this->parameters = $params; return $this; diff --git a/site/vendor/nette/di/src/DI/Container.php b/site/vendor/nette/di/src/DI/Container.php index 2ecbf225f..6189e424b 100644 --- a/site/vendor/nette/di/src/DI/Container.php +++ b/site/vendor/nette/di/src/DI/Container.php @@ -17,8 +17,6 @@ */ class Container { - use Nette\SmartObject; - /** * @var mixed[] * @deprecated use Container::getParameter() or getParameters() @@ -26,25 +24,25 @@ class Container public $parameters = []; /** @var string[] services name => type (complete list of available services) */ - protected $types = []; + protected array $types = []; /** @var string[] alias => service name */ - protected $aliases = []; + protected array $aliases = []; /** @var array[] tag name => service name => tag value */ - protected $tags = []; + protected array $tags = []; /** @var array[] type => level => services */ - protected $wiring = []; + protected array $wiring = []; /** @var object[] service name => instance */ - private $instances = []; + private array $instances = []; /** @var array circular reference detector */ - private $creating; + private array $creating; /** @var array */ - private $methods; + private array $methods; public function __construct(array $params = []) @@ -52,7 +50,7 @@ public function __construct(array $params = []) $this->parameters = $params + $this->getStaticParameters(); $this->methods = array_flip(array_filter( get_class_methods($this), - function ($s) { return preg_match('#^createService.#', $s); } + fn($s) => preg_match('#^createService.#', $s), )); } @@ -63,12 +61,10 @@ public function getParameters(): array } - public function getParameter($key) + public function getParameter(string|int $key): mixed { if (!array_key_exists($key, $this->parameters)) { - $this->parameters[$key] = $this->preventDeadLock("%$key%", function () use ($key) { - return $this->getDynamicParameter($key); - }); + $this->parameters[$key] = $this->preventDeadLock("%$key%", fn() => $this->getDynamicParameter($key)); } return $this->parameters[$key]; } @@ -80,7 +76,7 @@ protected function getStaticParameters(): array } - protected function getDynamicParameter($key) + protected function getDynamicParameter(string|int $key): mixed { throw new Nette\InvalidStateException(sprintf("Parameter '%s' not found. Check if 'di › export › parameters' is enabled.", $key)); } @@ -89,9 +85,8 @@ protected function getDynamicParameter($key) /** * Adds the service to the container. * @param object $service service or its factory - * @return static */ - public function addService(string $name, object $service) + public function addService(string $name, object $service): static { $name = $this->aliases[$name] ?? $name; if (isset($this->instances[$name])) { @@ -102,18 +97,18 @@ public function addService(string $name, object $service) $rt = Nette\Utils\Type::fromReflection(new \ReflectionFunction($service)); $type = $rt ? Helpers::ensureClassType($rt, 'return type of closure') : ''; } else { - $type = get_class($service); + $type = $service::class; } if (!isset($this->methods[self::getMethodName($name)])) { $this->types[$name] = $type; - } elseif (($expectedType = $this->getServiceType($name)) && !is_a($type, $expectedType, true)) { + } elseif (($expectedType = $this->getServiceType($name)) && !is_a($type, $expectedType, allow_string: true)) { throw new Nette\InvalidArgumentException(sprintf( "Service '%s' must be instance of %s, %s.", $name, $expectedType, - $type ? "$type given" : 'add typehint to closure' + $type ? "$type given" : 'add typehint to closure', )); } @@ -180,8 +175,7 @@ public function getServiceType(string $name): string return $this->types[$name]; } elseif (isset($this->methods[$method])) { - $type = (new \ReflectionMethod($this, $method))->getReturnType(); - return $type ? $type->getName() : ''; + return (string) (new \ReflectionMethod($this, $method))->getReturnType(); } else { throw new MissingServiceException(sprintf("Service '%s' not found.", $name)); @@ -217,7 +211,7 @@ public function isCreated(string $name): bool * Creates new instance of the service. * @throws MissingServiceException */ - public function createService(string $name, array $args = []): object + public function createService(string $name): object { $name = $this->aliases[$name] ?? $name; $method = self::getMethodName($name); @@ -226,16 +220,14 @@ public function createService(string $name, array $args = []): object throw new MissingServiceException(sprintf("Service '%s' not found.", $name)); } - $service = $this->preventDeadLock($name, function () use ($callback, $args, $method) { - return $callback instanceof \Closure - ? $callback(...$args) - : $this->$method(...$args); - }); + $service = $this->preventDeadLock($name, fn() => $callback instanceof \Closure + ? $callback() + : $this->$method()); if (!is_object($service)) { throw new Nette\UnexpectedValueException(sprintf( "Unable to create service '$name', value returned by %s is not object.", - $callback instanceof \Closure ? 'closure' : "method $method()" + $callback instanceof \Closure ? 'closure' : "method $method()", )); } @@ -247,7 +239,7 @@ public function createService(string $name, array $args = []): object * Resolves service by type. * @template T of object * @param class-string $type - * @return ?T + * @return ($throw is true ? T : ?T) * @throws MissingServiceException */ public function getByType(string $type, bool $throw = true): ?object @@ -268,17 +260,17 @@ public function getByType(string $type, bool $throw = true): ?object foreach ($this->methods as $method => $foo) { $methodType = (new \ReflectionMethod(static::class, $method))->getReturnType()->getName(); - if (is_a($methodType, $type, true)) { + if (is_a($methodType, $type, allow_string: true)) { throw new MissingServiceException(sprintf( "Service of type %s is not autowired or is missing in di\u{a0}›\u{a0}export\u{a0}›\u{a0}types.", - $type + $type, )); } } throw new MissingServiceException(sprintf( 'Service of type %s not found. Did you add it to configuration file?', - $type + $type, )); } @@ -321,7 +313,7 @@ public function findByTag(string $tag): array } - private function preventDeadLock(string $key, \Closure $callback) + private function preventDeadLock(string $key, \Closure $callback): mixed { if (isset($this->creating[$key])) { throw new Nette\InvalidStateException(sprintf('Circular reference detected for: %s.', implode(', ', array_keys($this->creating)))); @@ -340,7 +332,6 @@ private function preventDeadLock(string $key, \Closure $callback) /** * Creates new instance using autowiring. - * @throws Nette\InvalidArgumentException */ public function createInstance(string $class, array $args = []): object { @@ -360,7 +351,7 @@ public function createInstance(string $class, array $args = []): object /** - * Calls all methods starting with with "inject" using autowiring. + * Calls all methods starting with "inject" using autowiring. */ public function callInjects(object $service): void { @@ -370,9 +361,8 @@ public function callInjects(object $service): void /** * Calls method using autowiring. - * @return mixed */ - public function callMethod(callable $function, array $args = []) + public function callMethod(callable $function, array $args = []): mixed { return $function(...$this->autowireArguments(Nette\Utils\Callback::toReflection($function), $args)); } @@ -380,11 +370,9 @@ public function callMethod(callable $function, array $args = []) private function autowireArguments(\ReflectionFunctionAbstract $function, array $args = []): array { - return Resolver::autowireArguments($function, $args, function (string $type, bool $single) { - return $single + return Resolver::autowireArguments($function, $args, fn(string $type, bool $single) => $single ? $this->getByType($type) - : array_map([$this, 'getService'], $this->findAutowired($type)); - }); + : array_map($this->getService(...), $this->findAutowired($type))); } diff --git a/site/vendor/nette/di/src/DI/ContainerBuilder.php b/site/vendor/nette/di/src/DI/ContainerBuilder.php index 8535575ff..92c60c134 100644 --- a/site/vendor/nette/di/src/DI/ContainerBuilder.php +++ b/site/vendor/nette/di/src/DI/ContainerBuilder.php @@ -18,8 +18,6 @@ */ class ContainerBuilder { - use Nette\SmartObject; - public const ThisService = 'self', ThisContainer = 'container'; @@ -34,22 +32,12 @@ class ContainerBuilder public $parameters = []; /** @var Definition[] */ - private $definitions = []; - - /** @var array of alias => service */ - private $aliases = []; - - /** @var Autowiring */ - private $autowiring; - - /** @var bool */ - private $needsResolve = true; - - /** @var bool */ - private $resolving = false; - - /** @var array */ - private $dependencies = []; + private array $definitions = []; + private array $aliases = []; + private Autowiring $autowiring; + private bool $needsResolve = true; + private bool $resolving = false; + private array $dependencies = []; public function __construct() @@ -89,7 +77,7 @@ public function addDefinition(?string $name, ?Definition $definition = null): De throw new Nette\InvalidStateException(sprintf( "Service '%s' has the same name as '%s' in a case-insensitive manner.", $name, - $nm + $nm, )); } } @@ -212,9 +200,8 @@ public function getAliases(): array /** * @param string[] $types - * @return static */ - public function addExcludedClasses(array $types) + public function addExcludedClasses(array $types): static { $this->needsResolve = true; $this->autowiring->addExcludedClasses($types); @@ -224,7 +211,7 @@ public function addExcludedClasses(array $types) /** * Resolves autowired service name by type. - * @param bool $throw exception if service doesn't exist? + * @return ($throw is true ? string : ?string) * @throws MissingServiceException */ public function getByType(string $type, bool $throw = false): ?string @@ -240,7 +227,7 @@ public function getByType(string $type, bool $throw = false): ?string */ public function getDefinitionByType(string $type): Definition { - return $this->getDefinition($this->getByType($type, true)); + return $this->getDefinition($this->getByType($type, throw: true)); } @@ -265,7 +252,7 @@ public function findByType(string $type): array $this->needResolved(); $found = []; foreach ($this->definitions as $name => $def) { - if (is_a($def->getType(), $type, true)) { + if (is_a($def->getType(), $type, allow_string: true)) { $found[$name] = $def; } } @@ -342,11 +329,9 @@ public function complete(): void /** * Adds item to the list of dependencies. - * @param \ReflectionClass|\ReflectionFunctionAbstract|string $dep - * @return static * @internal */ - public function addDependency($dep) + public function addDependency(\ReflectionClass|\ReflectionFunctionAbstract|string $dep): static { $this->dependencies[] = $dep; return $this; @@ -402,10 +387,10 @@ public function exportMeta(): array } - public static function literal(string $code, ?array $args = null): Nette\PhpGenerator\PhpLiteral + public static function literal(string $code, ?array $args = null): Nette\PhpGenerator\Literal { - return new Nette\PhpGenerator\PhpLiteral( - $args === null ? $code : (new Nette\PhpGenerator\Dumper)->format($code, ...$args) + return new Nette\PhpGenerator\Literal( + $args === null ? $code : (new Nette\PhpGenerator\Dumper)->format($code, ...$args), ); } diff --git a/site/vendor/nette/di/src/DI/ContainerLoader.php b/site/vendor/nette/di/src/DI/ContainerLoader.php index d8b04cb62..b1a2015a7 100644 --- a/site/vendor/nette/di/src/DI/ContainerLoader.php +++ b/site/vendor/nette/di/src/DI/ContainerLoader.php @@ -17,30 +17,20 @@ */ class ContainerLoader { - use Nette\SmartObject; - - /** @var bool */ - private $autoRebuild = false; - - /** @var string */ - private $tempDirectory; - - - public function __construct(string $tempDirectory, bool $autoRebuild = false) - { - $this->tempDirectory = $tempDirectory; - $this->autoRebuild = $autoRebuild; + public function __construct( + private string $tempDirectory, + private bool $autoRebuild = false, + ) { } /** * @param callable $generator function (Nette\DI\Compiler $compiler): string|null - * @param mixed $key */ - public function load(callable $generator, $key = null): string + public function load(callable $generator, mixed $key = null): string { $class = $this->getClassName($key); - if (!class_exists($class, false)) { + if (!class_exists($class, autoload: false)) { $this->loadFile($class, $generator); } @@ -48,10 +38,7 @@ public function load(callable $generator, $key = null): string } - /** - * @param mixed $key - */ - public function getClassName($key): string + public function getClassName(mixed $key): string { return 'Container_' . substr(md5(serialize($key)), 0, 10); } @@ -85,7 +72,7 @@ private function loadFile(string $class, callable $generator): void @unlink("$name.tmp"); // @ - file may not exist throw new Nette\IOException(sprintf("Unable to create file '%s'.", $name)); } elseif (function_exists('opcache_invalidate')) { - @opcache_invalidate($name, true); // @ can be restricted + @opcache_invalidate($name, force: true); // @ can be restricted } } } diff --git a/site/vendor/nette/di/src/DI/Definitions/AccessorDefinition.php b/site/vendor/nette/di/src/DI/Definitions/AccessorDefinition.php index 1cfc3561e..bd6c1a1a5 100644 --- a/site/vendor/nette/di/src/DI/Definitions/AccessorDefinition.php +++ b/site/vendor/nette/di/src/DI/Definitions/AccessorDefinition.php @@ -21,18 +21,16 @@ final class AccessorDefinition extends Definition { private const MethodGet = 'get'; - /** @var Reference|null */ - private $reference; + private ?Reference $reference = null; - /** @return static */ - public function setImplement(string $interface) + public function setImplement(string $interface): static { if (!interface_exists($interface)) { throw new Nette\InvalidArgumentException(sprintf( "Service '%s': Interface '%s' not found.", $this->getName(), - $interface + $interface, )); } @@ -48,22 +46,17 @@ public function setImplement(string $interface) throw new Nette\InvalidArgumentException(sprintf( "Service '%s': Interface %s must have just one non-static method get().", $this->getName(), - $interface + $interface, )); } elseif ($method->getNumberOfParameters()) { throw new Nette\InvalidArgumentException(sprintf( "Service '%s': Method %s::get() must have no parameters.", $this->getName(), - $interface + $interface, )); } - try { - Helpers::ensureClassType(Type::fromReflection($method), "return type of $interface::get()"); - } catch (Nette\DI\ServiceCreationException $e) { - trigger_error($e->getMessage(), E_USER_DEPRECATED); - } - + Helpers::ensureClassType(Type::fromReflection($method), "return type of $interface::get()"); return parent::setType($interface); } @@ -74,16 +67,12 @@ public function getImplement(): ?string } - /** - * @param string|Reference $reference - * @return static - */ - public function setReference($reference) + public function setReference(string|Reference $reference): static { if ($reference instanceof Reference) { $this->reference = $reference; } else { - $this->reference = substr($reference, 0, 1) === '@' + $this->reference = str_starts_with($reference, '@') ? new Reference(substr($reference, 1)) : Reference::fromType($reference); } @@ -106,10 +95,12 @@ public function resolveType(Nette\DI\Resolver $resolver): void public function complete(Nette\DI\Resolver $resolver): void { if (!$this->reference) { - $interface = $this->getType(); - $method = new \ReflectionMethod($interface, self::MethodGet); - $type = Type::fromReflection($method) ?? Helpers::getReturnTypeAnnotation($method); - $this->setReference(Helpers::ensureClassType($type, "return type of $interface::get()")); + if (!$this->getType()) { + throw new Nette\DI\ServiceCreationException('Type is missing in definition of service.'); + } + + $method = new \ReflectionMethod($this->getType(), self::MethodGet); + $this->setReference(Type::fromReflection($method)->getSingleName()); } $this->reference = $resolver->normalizeReference($this->reference); @@ -121,13 +112,10 @@ public function generateMethod(Nette\PhpGenerator\Method $method, Nette\DI\PhpGe $class = (new Nette\PhpGenerator\ClassType) ->addImplement($this->getType()); - $class->addProperty('container') - ->setPrivate(); - $class->addMethod('__construct') - ->addBody('$this->container = $container;') - ->addParameter('container') - ->setType($generator->getClassName()); + ->addPromotedParameter('container') + ->setPrivate() + ->setType($generator->getClassName()); $rm = new \ReflectionMethod($this->getType(), self::MethodGet); diff --git a/site/vendor/nette/di/src/DI/Definitions/Definition.php b/site/vendor/nette/di/src/DI/Definitions/Definition.php index 1aaa7583d..ca96659b8 100644 --- a/site/vendor/nette/di/src/DI/Definitions/Definition.php +++ b/site/vendor/nette/di/src/DI/Definitions/Definition.php @@ -17,29 +17,19 @@ */ abstract class Definition { - use Nette\SmartObject; - - /** @var string|null */ - private $name; - - /** @var string|null class or interface name */ - private $type; - - /** @var array */ - private $tags = []; + private ?string $name = null; + private ?string $type = null; + private array $tags = []; /** @var bool|string[] */ - private $autowired = true; - - /** @var callable|null */ - private $notifier; + private bool|array $autowired = true; + private ?\Closure $notifier = null; /** - * @return static * @internal This is managed by ContainerBuilder and should not be called by user */ - final public function setName(string $name) + final public function setName(string $name): static { if ($this->name) { throw new Nette\InvalidStateException('Name already has been set.'); @@ -56,8 +46,7 @@ final public function getName(): ?string } - /** @return static */ - protected function setType(?string $type) + protected function setType(?string $type): static { if ($this->autowired && $this->notifier && $this->type !== $type) { ($this->notifier)(); @@ -69,7 +58,7 @@ protected function setType(?string $type) throw new Nette\InvalidArgumentException(sprintf( "Service '%s': Class or interface '%s' not found.", $this->name, - $type + $type, )); } else { $this->type = Nette\DI\Helpers::normalizeClass($type); @@ -85,8 +74,7 @@ final public function getType(): ?string } - /** @return static */ - final public function setTags(array $tags) + final public function setTags(array $tags): static { $this->tags = $tags; return $this; @@ -99,29 +87,20 @@ final public function getTags(): array } - /** - * @param mixed $attr - * @return static - */ - final public function addTag(string $tag, $attr = true) + final public function addTag(string $tag, mixed $attr = true): static { $this->tags[$tag] = $attr; return $this; } - /** @return mixed */ - final public function getTag(string $tag) + final public function getTag(string $tag): mixed { return $this->tags[$tag] ?? null; } - /** - * @param bool|string|string[] $state - * @return static - */ - final public function setAutowired($state = true) + final public function setAutowired(bool|string|array $state = true): static { if ($this->notifier && $this->autowired !== $state) { ($this->notifier)(); @@ -129,20 +108,19 @@ final public function setAutowired($state = true) $this->autowired = is_string($state) || is_array($state) ? (array) $state - : (bool) $state; + : $state; return $this; } /** @return bool|string[] */ - final public function getAutowired() + final public function getAutowired(): bool|array { return $this->autowired; } - /** @return static */ - public function setExported(bool $state = true) + public function setExported(bool $state = true): static { return $this->addTag('nette.exported', $state); } @@ -172,7 +150,7 @@ abstract public function complete(Nette\DI\Resolver $resolver): void; abstract public function generateMethod(Nette\PhpGenerator\Method $method, Nette\DI\PhpGenerator $generator): void; - final public function setNotifier(?callable $notifier): void + final public function setNotifier(?\Closure $notifier): void { $this->notifier = $notifier; } @@ -195,22 +173,6 @@ public function getClass(): ?string } - /** @deprecated Use '$def instanceof Nette\DI\Definitions\ImportedDefinition' */ - public function isDynamic(): bool - { - trigger_error(sprintf('Service %s: %s() is deprecated, use "instanceof ImportedDefinition".', $this->getName(), __METHOD__), E_USER_DEPRECATED); - return false; - } - - - /** @deprecated Use Nette\DI\Definitions\FactoryDefinition or AccessorDefinition */ - public function getImplement(): ?string - { - trigger_error(sprintf('Service %s: %s() is deprecated.', $this->getName(), __METHOD__), E_USER_DEPRECATED); - return null; - } - - /** @deprecated Use getAutowired() */ public function isAutowired() { diff --git a/site/vendor/nette/di/src/DI/Definitions/FactoryDefinition.php b/site/vendor/nette/di/src/DI/Definitions/FactoryDefinition.php index 4916ffd6d..7c2e69caa 100644 --- a/site/vendor/nette/di/src/DI/Definitions/FactoryDefinition.php +++ b/site/vendor/nette/di/src/DI/Definitions/FactoryDefinition.php @@ -13,7 +13,6 @@ use Nette\DI\Helpers; use Nette\DI\ServiceCreationException; use Nette\PhpGenerator as Php; -use Nette\Utils\Reflection; use Nette\Utils\Type; @@ -24,11 +23,7 @@ final class FactoryDefinition extends Definition { private const MethodCreate = 'create'; - /** @var array */ - public $parameters = []; - - /** @var Definition */ - private $resultDefinition; + private Definition $resultDefinition; public function __construct() @@ -37,14 +32,13 @@ public function __construct() } - /** @return static */ - public function setImplement(string $interface) + public function setImplement(string $interface): static { if (!interface_exists($interface)) { throw new Nette\InvalidArgumentException(sprintf( "Service '%s': Interface '%s' not found.", $this->getName(), - $interface + $interface, )); } @@ -54,16 +48,11 @@ public function setImplement(string $interface) throw new Nette\InvalidArgumentException(sprintf( "Service '%s': Interface %s must have just one non-static method create().", $this->getName(), - $interface + $interface, )); } - try { - Helpers::ensureClassType(Type::fromReflection($method), "return type of $interface::create()"); - } catch (Nette\DI\ServiceCreationException $e) { - trigger_error($e->getMessage(), E_USER_DEPRECATED); - } - + Helpers::ensureClassType(Type::fromReflection($method), "return type of $interface::create()"); return parent::setType($interface); } @@ -74,14 +63,13 @@ public function getImplement(): ?string } - final public function getResultType(): ?string + public function getResultType(): ?string { return $this->resultDefinition->getType(); } - /** @return static */ - public function setResultDefinition(Definition $definition) + public function setResultDefinition(Definition $definition): static { $this->resultDefinition = $definition; return $this; @@ -95,46 +83,13 @@ public function getResultDefinition(): Definition } - /** @deprecated */ - public function setParameters(array $params) - { - if ($params) { - $old = $new = []; - foreach ($params as $k => $v) { - $tmp = explode(' ', is_int($k) ? $v : $k); - $old[] = '%' . end($tmp) . '%'; - $new[] = '$' . end($tmp); - } - - trigger_error(sprintf( - "Service '%s': Option 'parameters' is deprecated and should be removed. The %s should be replaced with %s in configuration.", - $this->getName(), - implode(', ', $old), - implode(', ', $new) - ), E_USER_DEPRECATED); - } - - $this->parameters = $params; - return $this; - } - - - /** @deprecated */ - public function getParameters(): array - { - return $this->parameters; - } - - public function resolveType(Nette\DI\Resolver $resolver): void { - $interface = $this->getType(); - if (!$interface) { + if (!$this->getType()) { throw new ServiceCreationException('Type is missing in definition of service.'); } - $method = new \ReflectionMethod($interface, self::MethodCreate); - $type = Type::fromReflection($method) ?? Helpers::getReturnTypeAnnotation($method); + $type = Type::fromReflection(new \ReflectionMethod($this->getType(), self::MethodCreate)); $resultDef = $this->resultDefinition; try { @@ -144,15 +99,15 @@ public function resolveType(Nette\DI\Resolver $resolver): void throw $e; } - $resultDef->setType(Helpers::ensureClassType($type, "return type of $interface::create()")); + $resultDef->setType($type->getSingleName()); $resolver->resolveDefinition($resultDef); } - if ($type && !$type->allows($resultDef->getType())) { + if (!$type->allows($resultDef->getType())) { throw new ServiceCreationException(sprintf( 'Factory for %s cannot create incompatible %s type.', $type, - $resultDef->getType() + $resultDef->getType(), )); } } @@ -163,10 +118,7 @@ public function complete(Nette\DI\Resolver $resolver): void $resultDef = $this->resultDefinition; if ($resultDef instanceof ServiceDefinition) { - if (!$this->parameters) { - $this->completeParameters($resolver); - } - + $this->completeParameters($resolver); $this->convertArguments($resultDef->getCreator()->arguments); foreach ($resultDef->getSetup() as $setup) { $this->convertArguments($setup->arguments); @@ -200,16 +152,15 @@ private function completeParameters(Nette\DI\Resolver $resolver): void } foreach ($method->getParameters() as $param) { - $methodType = Type::fromReflection($param); if (isset($ctorParams[$param->name])) { $ctorParam = $ctorParams[$param->name]; $ctorType = Type::fromReflection($ctorParam); - if ($ctorType && !$ctorType->allows((string) $methodType)) { + if ($ctorType && !$ctorType->allows((string) Type::fromReflection($param))) { throw new ServiceCreationException(sprintf( "Type of \$%s in %s::create() doesn't match type in %s constructor.", $param->name, $interface, - $class + $class, )); } @@ -217,29 +168,20 @@ private function completeParameters(Nette\DI\Resolver $resolver): void } elseif (!$this->resultDefinition->getSetup()) { // [param1, param2] => '$param1, $param2' - $stringifyParams = function (array $params): string { - return implode(', ', array_map( - function (string $param) { return '$' . $param; }, - $params - )); - }; + $stringifyParams = fn(array $params): string => implode( + ', ', + array_map(fn(string $param) => '$' . $param, $params), + ); $ctorParamsKeys = array_keys($ctorParams); $hint = Nette\Utils\Helpers::getSuggestion($ctorParamsKeys, $param->name); throw new ServiceCreationException(sprintf( 'Cannot implement %s::create(): factory method parameters (%s) are not matching %s::__construct() parameters (%s).', $interface, - $stringifyParams(array_map(function (\ReflectionParameter $param) { return $param->name; }, $method->getParameters())), + $stringifyParams(array_map(fn(\ReflectionParameter $param) => $param->name, $method->getParameters())), $class, - $stringifyParams($ctorParamsKeys) + $stringifyParams($ctorParamsKeys), ) . ($hint ? " Did you mean to use '\${$hint}' in factory method?" : '')); } - - $paramDef = $methodType . ' ' . $param->name; - if ($param->isDefaultValueAvailable()) { - $this->parameters[$paramDef] = Reflection::getParameterDefaultValue($param); - } else { - $this->parameters[] = $paramDef; - } } } @@ -259,13 +201,10 @@ public function generateMethod(Php\Method $method, Nette\DI\PhpGenerator $genera $class = (new Php\ClassType) ->addImplement($this->getType()); - $class->addProperty('container') - ->setPrivate(); - $class->addMethod('__construct') - ->addBody('$this->container = $container;') - ->addParameter('container') - ->setType($generator->getClassName()); + ->addPromotedParameter('container') + ->setPrivate() + ->setType($generator->getClassName()); $methodCreate = $class->addMethod(self::MethodCreate); $this->resultDefinition->generateMethod($methodCreate, $generator); @@ -275,8 +214,8 @@ public function generateMethod(Php\Method $method, Nette\DI\PhpGenerator $genera $rm = new \ReflectionMethod($this->getType(), self::MethodCreate); $methodCreate - ->setParameters($generator->convertParameters($this->parameters)) - ->setReturnType((string) (Type::fromReflection($rm) ?? $this->getResultType())) + ->setParameters(array_map((new Php\Factory)->fromParameterReflection(...), $rm->getParameters())) + ->setReturnType((string) Type::fromReflection($rm)) ->setBody($body); $method->setBody('return new class ($this) ' . $class . ';'); diff --git a/site/vendor/nette/di/src/DI/Definitions/ImportedDefinition.php b/site/vendor/nette/di/src/DI/Definitions/ImportedDefinition.php index 2002f6f71..eb97fbcbe 100644 --- a/site/vendor/nette/di/src/DI/Definitions/ImportedDefinition.php +++ b/site/vendor/nette/di/src/DI/Definitions/ImportedDefinition.php @@ -18,8 +18,7 @@ */ final class ImportedDefinition extends Definition { - /** @return static */ - public function setType(?string $type) + public function setType(?string $type): static { return parent::setType($type); } @@ -40,15 +39,7 @@ public function generateMethod(Nette\PhpGenerator\Method $method, PhpGenerator $ $method->setReturnType('void') ->setBody( 'throw new Nette\\DI\\ServiceCreationException(?);', - ["Unable to create imported service '{$this->getName()}', it must be added using addService()"] + ["Unable to create imported service '{$this->getName()}', it must be added using addService()"], ); } - - - /** @deprecated use '$def instanceof ImportedDefinition' */ - public function isDynamic(): bool - { - trigger_error(sprintf('Service %s: %s() is deprecated, use "instanceof ImportedDefinition".', $this->getName(), __METHOD__), E_USER_DEPRECATED); - return true; - } } diff --git a/site/vendor/nette/di/src/DI/Definitions/LocatorDefinition.php b/site/vendor/nette/di/src/DI/Definitions/LocatorDefinition.php index 0412ff7ab..f4fee5d66 100644 --- a/site/vendor/nette/di/src/DI/Definitions/LocatorDefinition.php +++ b/site/vendor/nette/di/src/DI/Definitions/LocatorDefinition.php @@ -18,14 +18,11 @@ final class LocatorDefinition extends Definition { /** @var Reference[] */ - private $references = []; + private array $references = []; + private ?string $tagged = null; - /** @var string|null */ - private $tagged; - - /** @return static */ - public function setImplement(string $interface) + public function setImplement(string $interface): static { if (!interface_exists($interface)) { throw new Nette\InvalidArgumentException(sprintf("Service '%s': Interface '%s' not found.", $this->getName(), $interface)); @@ -42,19 +39,21 @@ public function setImplement(string $interface) || (preg_match('#^(get|create)[A-Z]#', $method->name) && $method->getNumberOfParameters() === 0) )) { throw new Nette\InvalidArgumentException(sprintf( - "Service '%s': Method %s::%s() does not meet the requirements: is create(\$name), get(\$name), create*() or get*() and is non-static.", + "Service '%s': Method %s::%s() does not meet the requirements: is create*(), get*() or get(\$name) and is non-static.", $this->getName(), $interface, - $method->name + $method->name, )); } if ($method->getNumberOfParameters() === 0) { - try { - Nette\DI\Helpers::ensureClassType(Nette\Utils\Type::fromReflection($method), "return type of $interface::$method->name()", true); - } catch (Nette\DI\ServiceCreationException $e) { - trigger_error($e->getMessage(), E_USER_DEPRECATED); - } + Nette\DI\Helpers::ensureClassType( + Nette\Utils\Type::fromReflection($method), + "return type of $interface::$method->name()", + allowNullable: true, + ); + } elseif (str_starts_with($method->name, 'create')) { + trigger_error(sprintf("Service '%s': Method %s::create(\$name) is deprecated, use createFoo().", $this->getName(), $interface), E_USER_DEPRECATED); } } @@ -68,12 +67,11 @@ public function getImplement(): ?string } - /** @return static */ - public function setReferences(array $references) + public function setReferences(array $references): static { $this->references = []; foreach ($references as $name => $ref) { - $this->references[$name] = substr($ref, 0, 1) === '@' + $this->references[$name] = str_starts_with($ref, '@') ? new Reference(substr($ref, 1)) : Reference::fromType($ref); } @@ -89,8 +87,7 @@ public function getReferences(): array } - /** @return static */ - public function setTagged(?string $tagged) + public function setTagged(?string $tagged): static { $this->tagged = $tagged; return $this; @@ -118,8 +115,8 @@ public function complete(Nette\DI\Resolver $resolver): void "Service '%s': duplicated tag '%s' with value '%s'.", $this->getName(), $this->tagged, - $tag - ), E_USER_NOTICE); + $tag, + )); } $this->references[$tag] = new Reference($name); @@ -137,13 +134,10 @@ public function generateMethod(Nette\PhpGenerator\Method $method, Nette\DI\PhpGe $class = (new Nette\PhpGenerator\ClassType) ->addImplement($this->getType()); - $class->addProperty('container') - ->setPrivate(); - $class->addMethod('__construct') - ->addBody('$this->container = $container;') - ->addParameter('container') - ->setType($generator->getClassName()); + ->addPromotedParameter('container') + ->setPrivate() + ->setType($generator->getClassName()); foreach ((new \ReflectionClass($this->getType()))->getMethods() as $rm) { preg_match('#^(get|create)(.*)#', $rm->name, $m); @@ -154,7 +148,7 @@ public function generateMethod(Nette\PhpGenerator\Method $method, Nette\DI\PhpGe ->setReturnType((string) Nette\Utils\Type::fromReflection($rm)); if (!$name) { - $class->addProperty('mapping', array_map(function ($item) { return $item->getValue(); }, $this->references)) + $class->addProperty('mapping', array_map(fn($item) => $item->getValue(), $this->references)) ->setPrivate(); $methodInner->setBody('if (!isset($this->mapping[$name])) { diff --git a/site/vendor/nette/di/src/DI/Definitions/Reference.php b/site/vendor/nette/di/src/DI/Definitions/Reference.php index d7b94584e..25625dec7 100644 --- a/site/vendor/nette/di/src/DI/Definitions/Reference.php +++ b/site/vendor/nette/di/src/DI/Definitions/Reference.php @@ -9,28 +9,23 @@ namespace Nette\DI\Definitions; -use Nette; - /** * Reference to service. Either by name or by type or reference to the 'self' service. */ final class Reference { - use Nette\SmartObject; - public const Self = 'self'; /** @deprecated use Reference::Self */ public const SELF = self::Self; - /** @var string */ - private $value; + private string $value; - public static function fromType(string $value): self + public static function fromType(string $value): static { - if (strpos($value, '\\') === false) { + if (!str_contains($value, '\\')) { $value = '\\' . $value; } @@ -52,13 +47,13 @@ public function getValue(): string public function isName(): bool { - return strpos($this->value, '\\') === false && $this->value !== self::Self; + return !str_contains($this->value, '\\') && $this->value !== self::Self; } public function isType(): bool { - return strpos($this->value, '\\') !== false; + return str_contains($this->value, '\\'); } diff --git a/site/vendor/nette/di/src/DI/Definitions/ServiceDefinition.php b/site/vendor/nette/di/src/DI/Definitions/ServiceDefinition.php index ede56644b..6cec76a86 100644 --- a/site/vendor/nette/di/src/DI/Definitions/ServiceDefinition.php +++ b/site/vendor/nette/di/src/DI/Definitions/ServiceDefinition.php @@ -22,11 +22,12 @@ */ final class ServiceDefinition extends Definition { - /** @var Statement */ - private $creator; + use Nette\SmartObject; + + private Statement $creator; /** @var Statement[] */ - private $setup = []; + private array $setup = []; public function __construct() @@ -35,8 +36,7 @@ public function __construct() } - /** @return static */ - public function setType(?string $type) + public function setType(?string $type): static { return parent::setType($type); } @@ -44,10 +44,8 @@ public function setType(?string $type) /** * Alias for setCreator() - * @param string|array|Definition|Reference|Statement $factory - * @return static */ - public function setFactory($factory, array $args = []) + public function setFactory(string|array|Definition|Reference|Statement $factory, array $args = []): static { return $this->setCreator($factory, $args); } @@ -62,11 +60,7 @@ public function getFactory(): Statement } - /** - * @param string|array|Definition|Reference|Statement $creator - * @return static - */ - public function setCreator($creator, array $args = []) + public function setCreator(string|array|Definition|Reference|Statement $creator, array $args = []): static { $this->creator = $creator instanceof Statement ? $creator @@ -81,23 +75,20 @@ public function getCreator(): Statement } - /** @return string|array|Definition|Reference|null */ - public function getEntity() + public function getEntity(): string|array|Definition|Reference|null { return $this->creator->getEntity(); } - /** @return static */ - public function setArguments(array $args = []) + public function setArguments(array $args = []): static { $this->creator->arguments = $args; return $this; } - /** @return static */ - public function setArgument($key, $value) + public function setArgument($key, $value): static { $this->creator->arguments[$key] = $value; return $this; @@ -106,9 +97,8 @@ public function setArgument($key, $value) /** * @param Statement[] $setup - * @return static */ - public function setSetup(array $setup) + public function setSetup(array $setup): static { foreach ($setup as &$entity) { if (!$entity instanceof Statement) { @@ -129,11 +119,7 @@ public function getSetup(): array } - /** - * @param string|array|Definition|Reference|Statement $entity - * @return static - */ - public function addSetup($entity, array $args = []) + public function addSetup(string|array|Definition|Reference|Statement $entity, array $args = []): static { $entity = $entity instanceof Statement ? $entity diff --git a/site/vendor/nette/di/src/DI/Definitions/Statement.php b/site/vendor/nette/di/src/DI/Definitions/Statement.php index ec2a035cd..cd80f6d44 100644 --- a/site/vendor/nette/di/src/DI/Definitions/Statement.php +++ b/site/vendor/nette/di/src/DI/Definitions/Statement.php @@ -10,7 +10,6 @@ namespace Nette\DI\Definitions; use Nette; -use Nette\Utils\Strings; /** @@ -22,17 +21,11 @@ final class Statement implements Nette\Schema\DynamicParameter { use Nette\SmartObject; - /** @var array */ - public $arguments; + public array $arguments; + private string|array|Definition|Reference|null $entity; - /** @var string|array|Definition|Reference|null */ - private $entity; - - /** - * @param string|array|Definition|Reference|null $entity - */ - public function __construct($entity, array $arguments = []) + public function __construct(string|array|Definition|Reference|null $entity, array $arguments = []) { if ( $entity !== null @@ -50,13 +43,13 @@ public function __construct($entity, array $arguments = []) } // normalize Class::method to [Class, method] - if (is_string($entity) && Strings::contains($entity, '::') && !Strings::contains($entity, '?')) { + if (is_string($entity) && str_contains($entity, '::') && !str_contains($entity, '?')) { $entity = explode('::', $entity, 2); } - if (is_string($entity) && substr($entity, 0, 1) === '@') { // normalize @service to Reference + if (is_string($entity) && str_starts_with($entity, '@')) { // normalize @service to Reference $entity = new Reference(substr($entity, 1)); - } elseif (is_array($entity) && is_string($entity[0]) && substr($entity[0], 0, 1) === '@') { + } elseif (is_array($entity) && is_string($entity[0]) && str_starts_with($entity[0], '@')) { $entity[0] = new Reference(substr($entity[0], 1)); } @@ -65,8 +58,7 @@ public function __construct($entity, array $arguments = []) } - /** @return string|array|Definition|Reference|null */ - public function getEntity() + public function getEntity(): string|array|Definition|Reference|null { return $this->entity; } diff --git a/site/vendor/nette/di/src/DI/DependencyChecker.php b/site/vendor/nette/di/src/DI/DependencyChecker.php index 89f03ae51..4b143af19 100644 --- a/site/vendor/nette/di/src/DI/DependencyChecker.php +++ b/site/vendor/nette/di/src/DI/DependencyChecker.php @@ -11,7 +11,6 @@ use Nette; use Nette\Utils\Reflection; -use Nette\Utils\Type; use ReflectionClass; use ReflectionMethod; @@ -21,22 +20,19 @@ */ class DependencyChecker { - use Nette\SmartObject; - public const Version = 1; /** @deprecated use DependencyChecker::Version */ public const VERSION = self::Version; - /** @var array of ReflectionClass|\ReflectionFunctionAbstract|string */ - private $dependencies = []; + /** @var array */ + private array $dependencies = []; /** * Adds dependencies to the list. - * @return static */ - public function add(array $deps) + public function add(array $deps): static { $this->dependencies = array_merge($this->dependencies, $deps); return $this; @@ -67,7 +63,7 @@ public function export(): array $functions[] = rtrim(Reflection::toString($dep), '()'); } else { - throw new Nette\InvalidStateException(sprintf('Unexpected dependency %s', gettype($dep))); + throw new Nette\InvalidStateException(sprintf('Unexpected dependency %s', get_debug_type($dep))); } } @@ -89,7 +85,7 @@ public static function isExpired( array &$phpFiles, array $classes, array $functions, - string $hash + string $hash, ): bool { try { @@ -99,7 +95,7 @@ public static function isExpired( return $version !== self::Version || $files !== $currentFiles || ($phpFiles !== $origPhpFiles && $hash !== self::calculateHash($classes, $functions)); - } catch (\ReflectionException $e) { + } catch (\ReflectionException) { return true; } } @@ -125,8 +121,8 @@ class_uses($name), $name, $prop->name, $prop->getDocComment(), - (string) Type::fromReflection($prop), - PHP_VERSION_ID >= 80000 ? count($prop->getAttributes(Attributes\Inject::class)) : null, + (string) $prop->getType(), + count($prop->getAttributes(Attributes\Inject::class)), ]; } } @@ -138,7 +134,7 @@ class_uses($name), $method->name, $method->getDocComment(), self::hashParameters($method), - (string) Type::fromReflection($method), + (string) $method->getReturnType(), ]; } } @@ -146,8 +142,10 @@ class_uses($name), $flip = array_flip($classes); foreach ($functions as $name) { - if (strpos($name, '::')) { - $method = new ReflectionMethod($name); + if (str_contains($name, '::')) { + $method = PHP_VERSION_ID < 80300 + ? new ReflectionMethod($name) + : ReflectionMethod::createFromMethodName($name); $class = $method->getDeclaringClass(); if (isset($flip[$class->name])) { continue; @@ -164,7 +162,7 @@ class_uses($name), $uses, $method->getDocComment(), self::hashParameters($method), - (string) Type::fromReflection($method), + (string) $method->getReturnType(), ]; } @@ -178,10 +176,10 @@ private static function hashParameters(\ReflectionFunctionAbstract $method): arr foreach ($method->getParameters() as $param) { $res[] = [ $param->name, - (string) Type::fromReflection($param), + (string) $param->getType(), $param->isVariadic(), $param->isDefaultValueAvailable() - ? is_object($tmp = Reflection::getParameterDefaultValue($param)) ? ['object' => get_class($tmp)] : ['value' => $tmp] + ? is_object($tmp = Reflection::getParameterDefaultValue($param)) ? ['object' => $tmp::class] : ['value' => $tmp] : null, ]; } diff --git a/site/vendor/nette/di/src/DI/DynamicParameter.php b/site/vendor/nette/di/src/DI/DynamicParameter.php index 682576594..8c3ae486e 100644 --- a/site/vendor/nette/di/src/DI/DynamicParameter.php +++ b/site/vendor/nette/di/src/DI/DynamicParameter.php @@ -15,6 +15,6 @@ /** * @internal */ -final class DynamicParameter extends Nette\PhpGenerator\PhpLiteral implements Nette\Schema\DynamicParameter +final class DynamicParameter extends Nette\PhpGenerator\Literal implements Nette\Schema\DynamicParameter { } diff --git a/site/vendor/nette/di/src/DI/Extensions/ConstantsExtension.php b/site/vendor/nette/di/src/DI/Extensions/ConstantsExtension.php deleted file mode 100644 index 3d34fb5f3..000000000 --- a/site/vendor/nette/di/src/DI/Extensions/ConstantsExtension.php +++ /dev/null @@ -1,28 +0,0 @@ -getConfig() as $name => $value) { - $this->initialization->addBody('define(?, ?);', [$name, $value]); - } - } -} diff --git a/site/vendor/nette/di/src/DI/Extensions/DIExtension.php b/site/vendor/nette/di/src/DI/Extensions/DIExtension.php index 0551187d4..5b789cffa 100644 --- a/site/vendor/nette/di/src/DI/Extensions/DIExtension.php +++ b/site/vendor/nette/di/src/DI/Extensions/DIExtension.php @@ -18,17 +18,10 @@ */ final class DIExtension extends Nette\DI\CompilerExtension { - /** @var array */ - public $exportedTags = []; - - /** @var array */ - public $exportedTypes = []; - - /** @var bool */ - private $debugMode; - - /** @var float */ - private $time; + public array $exportedTags = []; + public array $exportedTypes = []; + private bool $debugMode; + private float $time; public function __construct(bool $debugMode = false) @@ -37,39 +30,33 @@ public function __construct(bool $debugMode = false) $this->time = microtime(true); $this->config = new class { - /** @var ?bool */ - public $debugger; + public ?bool $debugger = null; /** @var string[] */ - public $excluded = []; - - /** @var ?string */ - public $parentClass; - - /** @var object */ - public $export; + public array $excluded = []; + public ?string $parentClass = null; + public object $export; }; $this->config->export = new class { - /** @var bool */ - public $parameters = true; + public bool $parameters = true; /** @var string[]|bool|null */ - public $tags = true; + public array|bool|null $tags = true; /** @var string[]|bool|null */ - public $types = true; + public array|bool|null $types = true; }; } - public function loadConfiguration() + public function loadConfiguration(): void { $builder = $this->getContainerBuilder(); $builder->addExcludedClasses($this->config->excluded); } - public function afterCompile(Nette\PhpGenerator\ClassType $class) + public function afterCompile(Nette\PhpGenerator\ClassType $class): void { if ($this->config->parentClass) { $class->setExtends($this->config->parentClass); @@ -119,7 +106,7 @@ private function restrictTypes(Nette\PhpGenerator\ClassType $class): void $prop = $class->getProperty('wiring'); $prop->setValue(array_intersect_key( $prop->getValue(), - $this->exportedTypes + (is_array($option) ? array_flip($option) : []) + $this->exportedTypes + (is_array($option) ? array_flip($option) : []), )); } @@ -130,7 +117,7 @@ private function enableTracyIntegration(): void $this->initialization->addBody($this->getContainerBuilder()->formatPhp('?;', [ new Nette\DI\Definitions\Statement( '@Tracy\Bar::addPanel', - [new Nette\DI\Definitions\Statement(Nette\Bridges\DITracy\ContainerPanel::class)] + [new Nette\DI\Definitions\Statement(Nette\Bridges\DITracy\ContainerPanel::class)], ), ])); } diff --git a/site/vendor/nette/di/src/DI/Extensions/DecoratorExtension.php b/site/vendor/nette/di/src/DI/Extensions/DecoratorExtension.php index 17667d498..7afa70339 100644 --- a/site/vendor/nette/di/src/DI/Extensions/DecoratorExtension.php +++ b/site/vendor/nette/di/src/DI/Extensions/DecoratorExtension.php @@ -25,7 +25,7 @@ public function getConfigSchema(): Nette\Schema\Schema 'setup' => Expect::list(), 'tags' => Expect::array(), 'inject' => Expect::bool(), - ]) + ]), ); } @@ -68,7 +68,7 @@ public function addSetups(string $type, array $setups): void public function addTags(string $type, array $tags): void { - $tags = Nette\Utils\Arrays::normalize($tags, true); + $tags = Nette\Utils\Arrays::normalize($tags, filling: true); foreach ($this->findByType($type) as $def) { $def->setTags($def->getTags() + $tags); } @@ -77,9 +77,10 @@ public function addTags(string $type, array $tags): void private function findByType(string $type): array { - return array_filter($this->getContainerBuilder()->getDefinitions(), function (Definitions\Definition $def) use ($type): bool { - return is_a($def->getType(), $type, true) - || ($def instanceof Definitions\FactoryDefinition && is_a($def->getResultType(), $type, true)); - }); + return array_filter( + $this->getContainerBuilder()->getDefinitions(), + fn(Definitions\Definition $def): bool => is_a($def->getType(), $type, true) + || ($def instanceof Definitions\FactoryDefinition && is_a($def->getResultType(), $type, allow_string: true)), + ); } } diff --git a/site/vendor/nette/di/src/DI/Extensions/DefinitionSchema.php b/site/vendor/nette/di/src/DI/Extensions/DefinitionSchema.php index 77146ebd0..94e566134 100644 --- a/site/vendor/nette/di/src/DI/Extensions/DefinitionSchema.php +++ b/site/vendor/nette/di/src/DI/Extensions/DefinitionSchema.php @@ -23,10 +23,7 @@ */ class DefinitionSchema implements Schema { - use Nette\SmartObject; - - /** @var Nette\DI\ContainerBuilder */ - private $builder; + private Nette\DI\ContainerBuilder $builder; public function __construct(Nette\DI\ContainerBuilder $builder) @@ -51,7 +48,6 @@ public function complete($def, Context $context) } } - $def = $this->expandParameters($def); $type = $this->sniffType(end($context->path), $def); $def = $this->getSchema($type)->complete($def, $context); if ($def) { @@ -98,44 +94,18 @@ public function normalize($def, Context $context) } elseif (!is_array($def) || isset($def[0], $def[1])) { return ['create' => $def]; - } elseif (is_array($def)) { + } else { // back compatibility if (isset($def['factory']) && !isset($def['create'])) { $def['create'] = $def['factory']; unset($def['factory']); } - - if ( - isset($def['class']) - && !isset($def['type']) - && !isset($def['dynamic']) - && !isset($def['imported']) - ) { + if (isset($def['class']) && !isset($def['type']) && !isset($def['imported'])) { $def[isset($def['create']) ? 'type' : 'create'] = $def['class']; unset($def['class']); } - foreach (['class' => 'type', 'dynamic' => 'imported'] as $alias => $original) { - if (array_key_exists($alias, $def)) { - if (array_key_exists($original, $def)) { - throw new Nette\DI\InvalidConfigurationException(sprintf( - "Options '%s' and '%s' are aliases, use only '%s'.", - $alias, - $original, - $original - )); - } - - trigger_error(sprintf("Service '%s': option '$alias' should be changed to '$original'.", end($context->path)), E_USER_DEPRECATED); - $def[$original] = $def[$alias]; - unset($def[$alias]); - } - } - return $def; - - } else { - throw new Nette\DI\InvalidConfigurationException('Unexpected format of service definition'); } } @@ -149,7 +119,7 @@ private function sniffType($key, array $def): string { if (is_string($key)) { $name = preg_match('#^@[\w\\\\]+$#D', $key) - ? $this->builder->getByType(substr($key, 1), false) + ? $this->builder->getByType(substr($key, 1)) : $key; if ($name && $this->builder->hasDefinition($name)) { @@ -177,20 +147,6 @@ private function sniffType($key, array $def): string } - private function expandParameters(array $config): array - { - $params = $this->builder->parameters; - if (isset($config['parameters'])) { - foreach ((array) $config['parameters'] as $k => $v) { - $v = explode(' ', is_int($k) ? $v : $k); - $params[end($v)] = $this->builder::literal('$' . end($v)); - } - } - - return Nette\DI\Helpers::expand($config, $params); - } - - private static function getSchema(string $type): Schema { static $cache; @@ -241,7 +197,6 @@ private static function getFactorySchema(): Schema 'implement' => Expect::string(), 'arguments' => Expect::array(), 'setup' => Expect::listOf('callable|Nette\DI\Definitions\Statement|array:1'), - 'parameters' => Expect::array(), 'references' => Expect::array(), 'tagged' => Expect::string(), 'inject' => Expect::bool(), diff --git a/site/vendor/nette/di/src/DI/Extensions/ExtensionsExtension.php b/site/vendor/nette/di/src/DI/Extensions/ExtensionsExtension.php index c527f85ac..591ad4fda 100644 --- a/site/vendor/nette/di/src/DI/Extensions/ExtensionsExtension.php +++ b/site/vendor/nette/di/src/DI/Extensions/ExtensionsExtension.php @@ -23,7 +23,7 @@ public function getConfigSchema(): Nette\Schema\Schema } - public function loadConfiguration() + public function loadConfiguration(): void { foreach ($this->getConfig() as $name => $class) { if (is_int($name)) { @@ -35,10 +35,10 @@ public function loadConfiguration() [$class, $args] = [$class->getEntity(), $class->arguments]; } - if (!is_a($class, Nette\DI\CompilerExtension::class, true)) { + if (!is_a($class, Nette\DI\CompilerExtension::class, allow_string: true)) { throw new Nette\DI\InvalidConfigurationException(sprintf( "Extension '%s' not found or is not Nette\\DI\\CompilerExtension descendant.", - $class + $class, )); } diff --git a/site/vendor/nette/di/src/DI/Extensions/InjectExtension.php b/site/vendor/nette/di/src/DI/Extensions/InjectExtension.php index d32082c46..91948615f 100644 --- a/site/vendor/nette/di/src/DI/Extensions/InjectExtension.php +++ b/site/vendor/nette/di/src/DI/Extensions/InjectExtension.php @@ -66,6 +66,9 @@ private function updateDefinition(Definitions\ServiceDefinition $def): void } } + if ($builder) { + self::checkType($class, $property, $type, $builder); + } array_unshift($setups, $inject); } @@ -93,17 +96,15 @@ public static function getInjectMethods(string $class): array { $classes = []; foreach (get_class_methods($class) as $name) { - if (substr($name, 0, 6) === 'inject') { + if (str_starts_with($name, 'inject')) { $classes[$name] = (new \ReflectionMethod($class, $name))->getDeclaringClass()->name; } } $methods = array_keys($classes); - uksort($classes, function (string $a, string $b) use ($classes, $methods): int { - return $classes[$a] === $classes[$b] - ? array_search($a, $methods, true) <=> array_search($b, $methods, true) - : (is_a($classes[$a], $classes[$b], true) ? 1 : -1); - }); + uksort($classes, fn(string $a, string $b): int => $classes[$a] === $classes[$b] + ? array_search($a, $methods, strict: true) <=> array_search($b, $methods, strict: true) + : (is_a($classes[$a], $classes[$b], allow_string: true) ? 1 : -1)); return array_keys($classes); } @@ -116,16 +117,10 @@ public static function getInjectProperties(string $class): array { $res = []; foreach ((new \ReflectionClass($class))->getProperties() as $rp) { - $name = $rp->getName(); - $hasAttr = PHP_VERSION_ID >= 80000 && $rp->getAttributes(DI\Attributes\Inject::class); + $hasAttr = $rp->getAttributes(DI\Attributes\Inject::class); if ($hasAttr || DI\Helpers::parseAnnotation($rp, 'inject') !== null) { - if (!$rp->isPublic() || $rp->isStatic()) { - trigger_error(sprintf('Property %s for injection must be public and non-static.', Reflection::toString($rp)), E_USER_WARNING); - continue; - } - - if (PHP_VERSION_ID >= 80100 && $rp->isReadOnly()) { - throw new Nette\InvalidStateException(sprintf('Property %s for injection must not be readonly.', Reflection::toString($rp))); + if (!$rp->isPublic() || $rp->isStatic() || $rp->isReadOnly()) { + throw new Nette\InvalidStateException(sprintf('Property %s for injection must not be static, readonly and must be public.', Reflection::toString($rp))); } $type = Nette\Utils\Type::fromReflection($rp); @@ -144,21 +139,34 @@ public static function getInjectProperties(string $class): array /** - * Calls all methods starting with with "inject" using autowiring. - * @param object $service + * Calls all methods starting with "inject" using autowiring. */ - public static function callInjects(DI\Container $container, $service): void + public static function callInjects(DI\Container $container, object $service): void { - if (!is_object($service)) { - throw new Nette\InvalidArgumentException(sprintf('Service must be object, %s given.', gettype($service))); - } - - foreach (self::getInjectMethods(get_class($service)) as $method) { + foreach (self::getInjectMethods($service::class) as $method) { $container->callMethod([$service, $method]); } - foreach (self::getInjectProperties(get_class($service)) as $property => $type) { + foreach (self::getInjectProperties($service::class) as $property => $type) { + self::checkType($service, $property, $type, $container); $service->$property = $container->getByType($type); } } + + + private static function checkType( + object|string $class, + string $name, + ?string $type, + DI\Container|DI\ContainerBuilder $container, + ): void + { + if (!$container->getByType($type, throw: false)) { + throw new Nette\DI\MissingServiceException(sprintf( + 'Service of type %s required by %s not found. Did you add it to configuration file?', + $type, + Reflection::toString(new \ReflectionProperty($class, $name)), + )); + } + } } diff --git a/site/vendor/nette/di/src/DI/Extensions/ParametersExtension.php b/site/vendor/nette/di/src/DI/Extensions/ParametersExtension.php index 76b33ce12..c9fdc73dd 100644 --- a/site/vendor/nette/di/src/DI/Extensions/ParametersExtension.php +++ b/site/vendor/nette/di/src/DI/Extensions/ParametersExtension.php @@ -22,13 +22,11 @@ final class ParametersExtension extends Nette\DI\CompilerExtension { /** @var string[] */ - public $dynamicParams = []; + public array $dynamicParams = []; /** @var string[][] */ - public $dynamicValidators = []; - - /** @var array */ - private $compilerConfig; + public array $dynamicValidators = []; + private array $compilerConfig; public function __construct(array &$compilerConfig) @@ -37,7 +35,7 @@ public function __construct(array &$compilerConfig) } - public function loadConfiguration() + public function loadConfiguration(): void { $builder = $this->getContainerBuilder(); $params = $this->config; @@ -45,16 +43,12 @@ public function loadConfiguration() $params[$key] = new DynamicParameter('$this->getParameter(' . var_export($key, true) . ')'); } - $builder->parameters = Helpers::expand($params, $params, true); - - // expand all except 'services' - $slice = array_diff_key($this->compilerConfig, ['services' => 1]); - $slice = Helpers::expand($slice, $builder->parameters); - $this->compilerConfig = $slice + $this->compilerConfig; + $builder->parameters = Helpers::expand($params, $params, recursive: true); + $this->compilerConfig = Helpers::expand($this->compilerConfig, $builder->parameters); } - public function afterCompile(Nette\PhpGenerator\ClassType $class) + public function afterCompile(Nette\PhpGenerator\ClassType $class): void { $builder = $this->getContainerBuilder(); $dynamicParams = array_fill_keys($this->dynamicParams, true); @@ -62,7 +56,7 @@ public function afterCompile(Nette\PhpGenerator\ClassType $class) $value = [$value]; array_walk_recursive($value, function ($val) use (&$dynamicParams, $key): void { if ($val instanceof DynamicParameter) { - $dynamicParams[$key] = $dynamicParams[$key] ?? true; + $dynamicParams[$key] ??= true; } elseif ($val instanceof Nette\DI\Definitions\Statement) { $dynamicParams[$key] = false; } @@ -73,33 +67,36 @@ public function afterCompile(Nette\PhpGenerator\ClassType $class) ->addBody('return ?;', [array_diff_key($builder->parameters, $dynamicParams)]); $class->addMember($method); - $dynamicParams = array_keys($dynamicParams, true, true); if (!$dynamicParams) { return; } $resolver = new Nette\DI\Resolver($builder); $generator = new Nette\DI\PhpGenerator($builder); - $method = Method::from([Container::class, 'getDynamicParameter']); - $class->addMember($method); - $method->addBody('switch (true) {'); - foreach ($dynamicParams as $key) { + $method = $class->inheritMethod('getDynamicParameter'); + $method->addBody('return match($key) {'); + foreach ($dynamicParams as $key => $foo) { $value = Helpers::expand($this->config[$key] ?? null, $builder->parameters); - $value = $generator->convertArguments($resolver->completeArguments(Helpers::filterArguments([$value])))[0]; - $method->addBody("\tcase \$key === ?: return ?;", [$key, $value]); + try { + $value = $generator->convertArguments($resolver->completeArguments(Helpers::filterArguments([$value])))[0]; + $method->addBody("\t? => ?,", [$key, $value]); + } catch (Nette\DI\ServiceCreationException $e) { + $method->addBody("\t? => throw new Nette\\DI\\ServiceCreationException(?),", [$key, $e->getMessage()]); + } } - $method->addBody("\tdefault: return parent::getDynamicParameter(\$key);\n};"); + $method->addBody("\tdefault => parent::getDynamicParameter(\$key),\n};"); - $method = Method::from([Container::class, 'getParameters']); - $class->addMember($method); - $method->addBody('array_map([$this, \'getParameter\'], ?);', [$dynamicParams]); - $method->addBody('return parent::getParameters();'); + if ($preload = array_keys($dynamicParams, true, true)) { + $method = $class->inheritMethod('getParameters'); + $method->addBody('array_map($this->getParameter(...), ?);', [$preload]); + $method->addBody('return parent::getParameters();'); + } foreach ($this->dynamicValidators as [$param, $expected, $path]) { if ($param instanceof DynamicParameter) { $this->initialization->addBody( 'Nette\Utils\Validators::assert(?, ?, ?);', - [$param, $expected, "dynamic parameter used in '" . implode("\u{a0}›\u{a0}", $path) . "'"] + [$param, $expected, "dynamic parameter used in '" . implode("\u{a0}›\u{a0}", $path) . "'"], ); } } diff --git a/site/vendor/nette/di/src/DI/Extensions/PhpExtension.php b/site/vendor/nette/di/src/DI/Extensions/PhpExtension.php deleted file mode 100644 index 117bdfe84..000000000 --- a/site/vendor/nette/di/src/DI/Extensions/PhpExtension.php +++ /dev/null @@ -1,54 +0,0 @@ -getConfig() as $name => $value) { - if ($value === null) { - continue; - - } elseif ($name === 'include_path') { - $this->initialization->addBody('set_include_path(?);', [str_replace(';', PATH_SEPARATOR, $value)]); - - } elseif ($name === 'ignore_user_abort') { - $this->initialization->addBody('ignore_user_abort(?);', [$value]); - - } elseif ($name === 'max_execution_time') { - $this->initialization->addBody('set_time_limit(?);', [$value]); - - } elseif ($name === 'date.timezone') { - $this->initialization->addBody('date_default_timezone_set(?);', [$value]); - - } elseif (function_exists('ini_set')) { - $this->initialization->addBody('ini_set(?, ?);', [$name, $value === false ? '0' : (string) $value]); - - } elseif (ini_get($name) !== (string) $value) { - throw new Nette\NotSupportedException('Required function ini_set() is disabled.'); - } - } - } -} diff --git a/site/vendor/nette/di/src/DI/Extensions/SearchExtension.php b/site/vendor/nette/di/src/DI/Extensions/SearchExtension.php index 34b6daea1..eb872534d 100644 --- a/site/vendor/nette/di/src/DI/Extensions/SearchExtension.php +++ b/site/vendor/nette/di/src/DI/Extensions/SearchExtension.php @@ -20,11 +20,8 @@ */ final class SearchExtension extends Nette\DI\CompilerExtension { - /** @var array */ - private $classes = []; - - /** @var string */ - private $tempDir; + private array $classes = []; + private string $tempDir; public function __construct(string $tempDir) @@ -43,21 +40,20 @@ public function getConfigSchema(): Nette\Schema\Schema 'extends' => Expect::anyOf(Expect::listOf('string'), Expect::string()->castTo('array'))->default([]), 'implements' => Expect::anyOf(Expect::listOf('string'), Expect::string()->castTo('array'))->default([]), 'exclude' => Expect::structure([ + 'files' => Expect::anyOf(Expect::listOf('string'), Expect::string()->castTo('array'))->default([]), 'classes' => Expect::anyOf(Expect::listOf('string'), Expect::string()->castTo('array'))->default([]), 'extends' => Expect::anyOf(Expect::listOf('string'), Expect::string()->castTo('array'))->default([]), 'implements' => Expect::anyOf(Expect::listOf('string'), Expect::string()->castTo('array'))->default([]), ]), 'tags' => Expect::array(), - ]) - )->before(function ($val) { - return is_string($val['in'] ?? null) + ]), + )->before(fn($val) => is_string($val['in'] ?? null) ? ['default' => $val] - : $val; - }); + : $val); } - public function loadConfiguration() + public function loadConfiguration(): void { foreach (array_filter($this->config) as $name => $batch) { if (!is_dir($batch->in)) { @@ -65,7 +61,7 @@ public function loadConfiguration() "Option '%s\u{a0}›\u{a0}%s\u{a0}›\u{a0}in' must be valid directory name, '%s' given.", $this->name, $name, - $batch->in + $batch->in, )); } @@ -78,15 +74,16 @@ public function loadConfiguration() public function findClasses(\stdClass $config): array { + $exclude = $config->exclude; $robot = new RobotLoader; $robot->setTempDirectory($this->tempDir); $robot->addDirectory($config->in); $robot->acceptFiles = $config->files ?: ['*.php']; + $robot->ignoreDirs = array_merge($robot->ignoreDirs, $exclude->files); $robot->reportParseErrors(false); $robot->refresh(); $classes = array_unique(array_keys($robot->getIndexedClasses())); - $exclude = $config->exclude; $acceptRE = self::buildNameRegexp($config->classes); $rejectRE = self::buildNameRegexp($exclude->classes); $acceptParent = array_merge($config->extends, $config->implements); @@ -97,7 +94,7 @@ public function findClasses(\stdClass $config): array if (!class_exists($class) && !interface_exists($class) && !trait_exists($class)) { throw new Nette\InvalidStateException(sprintf( 'Class %s was found, but it cannot be loaded by autoloading.', - $class + $class, )); } @@ -107,12 +104,12 @@ public function findClasses(\stdClass $config): array || ($rc->isInterface() && count($methods = $rc->getMethods()) === 1 - && $methods[0]->name === 'create') + && in_array($methods[0]->name, ['get', 'create'], true)) ) && (!$acceptRE || preg_match($acceptRE, $rc->name)) && (!$rejectRE || !preg_match($rejectRE, $rc->name)) - && (!$acceptParent || Arrays::some($acceptParent, function ($nm) use ($rc) { return $rc->isSubclassOf($nm); })) - && (!$rejectParent || Arrays::every($rejectParent, function ($nm) use ($rc) { return !$rc->isSubclassOf($nm); })) + && (!$acceptParent || Arrays::some($acceptParent, fn($nm) => $rc->isSubclassOf($nm))) + && (!$rejectParent || Arrays::every($rejectParent, fn($nm) => !$rc->isSubclassOf($nm))) ) { $found[] = $rc->name; } @@ -122,7 +119,7 @@ public function findClasses(\stdClass $config): array } - public function beforeCompile() + public function beforeCompile(): void { $builder = $this->getContainerBuilder(); @@ -133,10 +130,14 @@ public function beforeCompile() } foreach ($this->classes as $class => $tags) { - $def = class_exists($class) - ? $builder->addDefinition(null)->setType($class) - : $builder->addFactoryDefinition(null)->setImplement($class); - $def->setTags(Arrays::normalize($tags, true)); + if (class_exists($class)) { + $def = $builder->addDefinition(null)->setType($class); + } elseif (method_exists($class, 'create')) { + $def = $builder->addFactoryDefinition(null)->setImplement($class); + } else { + $def = $builder->addAccessorDefinition(null)->setImplement($class); + } + $def->setTags(Arrays::normalize($tags, filling: true)); } } @@ -144,8 +145,8 @@ public function beforeCompile() private static function buildNameRegexp(array $masks): ?string { $res = []; - foreach ((array) $masks as $mask) { - $mask = (strpos($mask, '\\') === false ? '**\\' : '') . $mask; + foreach ($masks as $mask) { + $mask = (str_contains($mask, '\\') ? '' : '**\\') . $mask; $mask = preg_quote($mask, '#'); $mask = str_replace('\*\*\\\\', '(.*\\\\)?', $mask); $mask = str_replace('\\\\\*\*', '(\\\\.*)?', $mask); diff --git a/site/vendor/nette/di/src/DI/Extensions/ServicesExtension.php b/site/vendor/nette/di/src/DI/Extensions/ServicesExtension.php index 7a92aeedd..8bb50257d 100644 --- a/site/vendor/nette/di/src/DI/Extensions/ServicesExtension.php +++ b/site/vendor/nette/di/src/DI/Extensions/ServicesExtension.php @@ -16,19 +16,17 @@ /** - * Service definitions loader. + * Services definitions loader. */ final class ServicesExtension extends Nette\DI\CompilerExtension { - use Nette\SmartObject; - public function getConfigSchema(): Nette\Schema\Schema { return Nette\Schema\Expect::arrayOf(new DefinitionSchema($this->getContainerBuilder())); } - public function loadConfiguration() + public function loadConfiguration(): void { $this->loadDefinitions($this->config); } @@ -37,7 +35,7 @@ public function loadConfiguration() /** * Loads list of service definitions. */ - public function loadDefinitions(array $config) + public function loadDefinitions(array $config): void { foreach ($config as $key => $defConfig) { $this->loadDefinition($this->convertKeyToName($key), $defConfig); @@ -103,7 +101,7 @@ private function updateServiceDefinition(Definitions\ServiceDefinition $definiti $definition->setSetup([]); } - foreach (Helpers::filterArguments($config->setup) as $id => $setup) { + foreach (Helpers::filterArguments($config->setup) as $setup) { if (is_array($setup)) { $setup = new Statement(key($setup), array_values($setup)); } @@ -136,7 +134,7 @@ private function updateFactoryDefinition(Definitions\FactoryDefinition $definiti if (isset($config->implement)) { $definition->setImplement($config->implement); - $definition->setAutowired(true); + $definition->setAutowired(); } if ($config->create) { @@ -161,7 +159,7 @@ private function updateFactoryDefinition(Definitions\FactoryDefinition $definiti $resultDef->setSetup([]); } - foreach (Helpers::filterArguments($config->setup) as $id => $setup) { + foreach (Helpers::filterArguments($config->setup) as $setup) { if (is_array($setup)) { $setup = new Statement(key($setup), array_values($setup)); } @@ -170,10 +168,6 @@ private function updateFactoryDefinition(Definitions\FactoryDefinition $definiti } } - if (isset($config->parameters)) { - $definition->setParameters($config->parameters); - } - if (isset($config->inject)) { $definition->addTag(InjectExtension::TagInject, $config->inject); } @@ -187,6 +181,16 @@ private function updateLocatorDefinition(Definitions\LocatorDefinition $definiti } if (isset($config->references)) { + foreach ($config->references as $name => $reference) { + if ($reference instanceof Statement) { + $config->references[$name] = '@' . $this->getContainerBuilder() + ->addDefinition(null) + ->setFactory($reference) + ->setAutowired(false) + ->getName(); + } + } + $definition->setReferences($config->references); } @@ -231,7 +235,7 @@ private function convertKeyToName($key): ?string if (is_int($key)) { return null; } elseif (preg_match('#^@[\w\\\\]+$#D', $key)) { - return $this->getContainerBuilder()->getByType(substr($key, 1), true); + return $this->getContainerBuilder()->getByType(substr($key, 1), throw: true); } return $key; diff --git a/site/vendor/nette/di/src/DI/Helpers.php b/site/vendor/nette/di/src/DI/Helpers.php index 7ad902fb9..c662e2afe 100644 --- a/site/vendor/nette/di/src/DI/Helpers.php +++ b/site/vendor/nette/di/src/DI/Helpers.php @@ -26,12 +26,9 @@ final class Helpers /** * Expands %placeholders%. - * @param mixed $var - * @param bool|array $recursive - * @return mixed * @throws Nette\InvalidArgumentException */ - public static function expand($var, array $params, $recursive = false) + public static function expand(mixed $var, array $params, bool|array $recursive = false): mixed { if (is_array($var)) { $res = []; @@ -43,10 +40,11 @@ public static function expand($var, array $params, $recursive = false) } elseif ($var instanceof Statement) { return new Statement( self::expand($var->getEntity(), $params, $recursive), - self::expand($var->arguments, $params, $recursive) + self::expand($var->arguments, $params, $recursive), ); } elseif ($var === '%parameters%' && !array_key_exists('parameters', $params)) { + trigger_error('%parameters% is deprecated, use @container::getParameters()', E_USER_DEPRECATED); return $recursive ? self::expand($params, $params, $recursive) : $params; @@ -65,7 +63,12 @@ public static function expand($var, array $params, $recursive = false) * Expands %placeholders% in string * @throws Nette\InvalidArgumentException */ - private static function expandString(string $string, array $params, ?array $recursive, bool $onlyString = false) + private static function expandString( + string $string, + array $params, + ?array $recursive, + bool $onlyString = false, + ): mixed { $parts = preg_split('#%([\w.-]*)%#i', $string, -1, PREG_SPLIT_DELIM_CAPTURE); $res = []; @@ -88,12 +91,17 @@ private static function expandString(string $string, array $params, ?array $recu } return $dynamic - ? new Statement('::implode', ['', $res]) + ? new Statement('::implode', [$res]) : implode('', $res); } - private static function expandParameter(string $parameter, array $params, ?array $recursive, bool $onlyString) + private static function expandParameter( + string $parameter, + array $params, + ?array $recursive, + bool $onlyString, + ): mixed { $val = $params; $path = []; @@ -113,6 +121,8 @@ private static function expandParameter(string $parameter, array $params, ?array } } elseif ($val instanceof DynamicParameter) { $val = new DynamicParameter($val . '[' . var_export($key, true) . ']'); + } elseif ($val instanceof Statement) { + $val = new Statement('(?)[?]', [$val, $key]); } else { throw new Nette\InvalidArgumentException(sprintf("Missing parameter '%s'.", $parameter)); } @@ -123,10 +133,8 @@ private static function expandParameter(string $parameter, array $params, ?array /** * Escapes '%' and '@' - * @param mixed $value - * @return mixed */ - public static function escape($value) + public static function escape(mixed $value): mixed { if (is_array($value)) { $res = []; @@ -151,14 +159,13 @@ public static function filterArguments(array $args): array { foreach ($args as $k => $v) { if ( - PHP_VERSION_ID >= 80100 - && is_string($v) + is_string($v) && preg_match('#^([\w\\\\]+)::\w+$#D', $v, $m) && enum_exists($m[1]) ) { - $args[$k] = new Nette\PhpGenerator\PhpLiteral($v); + $args[$k] = new Nette\PhpGenerator\Literal($v); } elseif (is_string($v) && preg_match('#^[\w\\\\]*::[A-Z][a-zA-Z0-9_]*$#D', $v)) { - $args[$k] = new Nette\PhpGenerator\PhpLiteral(ltrim($v, ':')); + $args[$k] = new Nette\PhpGenerator\Literal(ltrim($v, ':')); } elseif (is_string($v) && preg_match('#^@[\w\\\\]+$#D', $v)) { $args[$k] = new Reference(substr($v, 1)); } elseif (is_array($v)) { @@ -175,10 +182,8 @@ public static function filterArguments(array $args): array /** * Replaces @extension with real extension name in service definition. - * @param mixed $config - * @return mixed */ - public static function prefixServiceName($config, string $namespace) + public static function prefixServiceName(mixed $config, string $namespace): mixed { if (is_string($config)) { if (strncmp($config, '@extension.', 10) === 0) { @@ -191,7 +196,7 @@ public static function prefixServiceName($config, string $namespace) } elseif ($config instanceof Statement) { return new Statement( self::prefixServiceName($config->getEntity(), $namespace), - self::prefixServiceName($config->arguments, $namespace) + self::prefixServiceName($config->arguments, $namespace), ); } elseif (is_array($config)) { foreach ($config as &$val) { @@ -205,7 +210,6 @@ public static function prefixServiceName($config, string $namespace) /** * Returns an annotation value. - * @param \ReflectionFunctionAbstract|\ReflectionProperty|\ReflectionClass $ref */ public static function parseAnnotation(\Reflector $ref, string $name): ?string { @@ -263,11 +267,9 @@ public static function normalizeClass(string $type): string /** * Non data-loss type conversion. - * @param mixed $value - * @return mixed * @throws Nette\InvalidStateException */ - public static function convertType($value, string $type) + public static function convertType(mixed $value, string $type): mixed { if (is_scalar($value)) { $norm = ($value === false ? '0' : (string) $value); @@ -284,8 +286,8 @@ public static function convertType($value, string $type) throw new Nette\InvalidStateException(sprintf( 'Cannot convert %s to %s.', - is_scalar($value) ? "'$value'" : gettype($value), - $type + is_scalar($value) ? "'$value'" : get_debug_type($value), + $type, )); } } diff --git a/site/vendor/nette/di/src/DI/PhpGenerator.php b/site/vendor/nette/di/src/DI/PhpGenerator.php index 00ba2755d..42a979059 100644 --- a/site/vendor/nette/di/src/DI/PhpGenerator.php +++ b/site/vendor/nette/di/src/DI/PhpGenerator.php @@ -13,7 +13,6 @@ use Nette\DI\Definitions\Reference; use Nette\DI\Definitions\Statement; use Nette\PhpGenerator as Php; -use Nette\Utils\Strings; /** @@ -21,13 +20,8 @@ */ class PhpGenerator { - use Nette\SmartObject; - - /** @var ContainerBuilder */ - private $builder; - - /** @var string */ - private $className; + private ContainerBuilder $builder; + private ?string $className = null; public function __construct(ContainerBuilder $builder) @@ -44,15 +38,11 @@ public function generate(string $className): Php\ClassType $this->className = $className; $class = new Php\ClassType($this->className); $class->setExtends(Container::class); - $class->addMethod('__construct') - ->addBody('parent::__construct($params);') - ->addParameter('params', []) - ->setType('array'); + $class->inheritMethod('__construct') + ->addBody('parent::__construct($params);'); foreach ($this->builder->exportMeta() as $key => $value) { - $class->addProperty($key) - ->setProtected() - ->setValue($value); + $class->inheritProperty($key)->setValue($value); } $definitions = $this->builder->getDefinitions(); @@ -66,8 +56,7 @@ public function generate(string $className): Php\ClassType ->setReturnType($className) ->setBody('return $this;'); - $class->addMethod('initialize') - ->setReturnType('void'); + $class->inheritMethod('initialize'); return $class; } @@ -119,7 +108,7 @@ public function formatStatement(Statement $statement): string $arguments = $statement->arguments; switch (true) { - case is_string($entity) && Strings::contains($entity, '?'): // PHP literal + case is_string($entity) && str_contains($entity, '?'): // PHP literal return $this->formatPhp($entity, $arguments); case is_string($entity): // create class @@ -131,7 +120,7 @@ public function formatStatement(Statement $statement): string switch (true) { case $entity[1][0] === '$': // property getter, setter or appender $name = substr($entity[1], 1); - if ($append = (substr($name, -2) === '[]')) { + if ($append = (str_ends_with($name, '[]'))) { $name = substr($name, 0, -2); } @@ -144,7 +133,7 @@ public function formatStatement(Statement $statement): string case $entity[0] instanceof Statement: $inner = $this->formatPhp('?', [$entity[0]]); - if (substr($inner, 0, 4) === 'new ') { + if (str_starts_with($inner, 'new ')) { $inner = "($inner)"; } @@ -190,35 +179,17 @@ public function convertArguments(array $args): array } else { $val = ContainerBuilder::literal('$this->getService(?)', [$name]); } + } elseif ( + is_object($val) + && !$val instanceof Php\Literal && !$val instanceof \stdClass && !$val instanceof \UnitEnum + ) { + trigger_error(sprintf('Nette DI: suspicious dumping of objects %s when generating the container', $val::class)); } }); return $args; } - /** - * Converts parameters from Definition to PhpGenerator. - * @return Php\Parameter[] - */ - public function convertParameters(array $parameters): array - { - $res = []; - foreach ($parameters as $k => $v) { - $tmp = explode(' ', is_int($k) ? $v : $k); - $param = $res[] = new Php\Parameter(end($tmp)); - if (!is_int($k)) { - $param->setDefaultValue($v); - } - - if (isset($tmp[1])) { - $param->setType($tmp[0]); - } - } - - return $res; - } - - public function getClassName(): ?string { return $this->className; diff --git a/site/vendor/nette/di/src/DI/Resolver.php b/site/vendor/nette/di/src/DI/Resolver.php index 15ec7db1a..5848d73fe 100644 --- a/site/vendor/nette/di/src/DI/Resolver.php +++ b/site/vendor/nette/di/src/DI/Resolver.php @@ -17,9 +17,7 @@ use Nette\Utils\Arrays; use Nette\Utils\Callback; use Nette\Utils\Reflection; -use Nette\Utils\Strings; use Nette\Utils\Validators; -use ReflectionClass; /** @@ -28,22 +26,13 @@ */ class Resolver { - use Nette\SmartObject; + private ContainerBuilder $builder; + private ?Definition $currentService = null; + private ?string $currentServiceType = null; + private bool $currentServiceAllowed = false; - /** @var ContainerBuilder */ - private $builder; - - /** @var Definition|null */ - private $currentService; - - /** @var string|null */ - private $currentServiceType; - - /** @var bool */ - private $currentServiceAllowed = false; - - /** @var \SplObjectStorage circular reference detector */ - private $recursive; + /** circular reference detector */ + private \SplObjectStorage $recursive; public function __construct(ContainerBuilder $builder) @@ -62,7 +51,7 @@ public function getContainerBuilder(): ContainerBuilder public function resolveDefinition(Definition $def): void { if ($this->recursive->contains($def)) { - $names = array_map(function ($item) { return $item->getName(); }, iterator_to_array($this->recursive)); + $names = array_map(fn($item) => $item->getName(), iterator_to_array($this->recursive)); throw new ServiceCreationException(sprintf('Circular reference detected for services: %s.', implode(', ', $names))); } @@ -104,7 +93,10 @@ public function resolveEntityType(Statement $statement): ?string { $entity = $this->normalizeEntity($statement); - if (is_array($entity)) { + if ($statement->arguments === self::getFirstClassCallable()) { + return \Closure::class; + + } elseif (is_array($entity)) { if ($entity[0] instanceof Reference || $entity[0] instanceof Statement) { $entity[0] = $this->resolveEntityType($entity[0] instanceof Statement ? $entity[0] : new Statement($entity[0])); if (!$entity[0]) { @@ -131,12 +123,16 @@ public function resolveEntityType(Statement $statement): ?string $this->addDependency($reflection); $type = Nette\Utils\Type::fromReflection($reflection) ?? ($annotation = Helpers::getReturnTypeAnnotation($reflection)); - if ($type && !in_array($type->getSingleName(), ['object', 'mixed'], true)) { + if ($type && !in_array($type->getSingleName(), ['object', 'mixed'], strict: true)) { if (isset($annotation)) { trigger_error('Annotation @return should be replaced with native return type at ' . Callback::toString($entity), E_USER_DEPRECATED); } - return Helpers::ensureClassType($type, sprintf('return type of %s()', Callback::toString($entity)), true); + return Helpers::ensureClassType( + $type, + sprintf('return type of %s()', Callback::toString($entity)), + allowNullable: true, + ); } return null; @@ -150,7 +146,7 @@ public function resolveEntityType(Statement $statement): ?string interface_exists($entity) ? "Interface %s can not be used as 'create' or 'factory', did you mean 'implement'?" : "Class '%s' not found.", - $entity + $entity, )); } @@ -163,7 +159,7 @@ interface_exists($entity) public function completeDefinition(Definition $def): void { - $this->currentService = in_array($def, $this->builder->getDefinitions(), true) + $this->currentService = in_array($def, $this->builder->getDefinitions(), strict: true) ? $def : null; $this->currentServiceType = $def->getType(); @@ -188,14 +184,21 @@ public function completeStatement(Statement $statement, bool $currentServiceAllo $this->currentServiceAllowed = $currentServiceAllowed; $entity = $this->normalizeEntity($statement); $arguments = $this->convertReferences($statement->arguments); - $getter = function (string $type, bool $single) { - return $single + $getter = fn(string $type, bool $single) => $single ? $this->getByType($type) - : array_values(array_filter($this->builder->findAutowired($type), function ($obj) { return $obj !== $this->currentService; })); - }; + : array_values(array_filter($this->builder->findAutowired($type), fn($obj) => $obj !== $this->currentService)); switch (true) { - case is_string($entity) && Strings::contains($entity, '?'): // PHP literal + case $statement->arguments === self::getFirstClassCallable(): + if (!is_array($entity) || !PhpHelpers::isIdentifier($entity[1])) { + throw new ServiceCreationException(sprintf('Cannot create closure for %s(...)', $entity)); + } + if ($entity[0] instanceof Statement) { + $entity[0] = $this->completeStatement($entity[0], $this->currentServiceAllowed); + } + break; + + case is_string($entity) && str_contains($entity, '?'): // PHP literal break; case $entity === 'not': @@ -221,17 +224,17 @@ public function completeStatement(Statement $statement, bool $currentServiceAllo case is_string($entity): // create class if (!class_exists($entity)) { throw new ServiceCreationException(sprintf("Class '%s' not found.", $entity)); - } elseif ((new ReflectionClass($entity))->isAbstract()) { + } elseif ((new \ReflectionClass($entity))->isAbstract()) { throw new ServiceCreationException(sprintf('Class %s is abstract.', $entity)); - } elseif (($rm = (new ReflectionClass($entity))->getConstructor()) !== null && !$rm->isPublic()) { + } elseif (($rm = (new \ReflectionClass($entity))->getConstructor()) !== null && !$rm->isPublic()) { throw new ServiceCreationException(sprintf('Class %s has %s constructor.', $entity, $rm->isProtected() ? 'protected' : 'private')); - } elseif ($constructor = (new ReflectionClass($entity))->getConstructor()) { + } elseif ($constructor = (new \ReflectionClass($entity))->getConstructor()) { $arguments = self::autowireArguments($constructor, $arguments, $getter); $this->addDependency($constructor); } elseif ($arguments) { throw new ServiceCreationException(sprintf( 'Unable to pass arguments, class %s has no constructor.', - $entity + $entity, )); } @@ -242,10 +245,10 @@ public function completeStatement(Statement $statement, bool $currentServiceAllo break; case is_array($entity): - if (!preg_match('#^\$?(\\\\?' . PhpHelpers::PHP_IDENT . ')+(\[\])?$#D', $entity[1])) { + if (!preg_match('#^\$?(\\\\?' . PhpHelpers::ReIdentifier . ')+(\[\])?$#D', $entity[1])) { throw new ServiceCreationException(sprintf( "Expected function, method or property name, '%s' given.", - $entity[1] + $entity[1], )); } @@ -254,7 +257,7 @@ public function completeStatement(Statement $statement, bool $currentServiceAllo if (!Arrays::isList($arguments)) { throw new ServiceCreationException(sprintf( 'Unable to pass specified arguments to %s.', - $entity[0] + $entity[0], )); } elseif (!function_exists($entity[1])) { throw new ServiceCreationException(sprintf("Function %s doesn't exist.", $entity[1])); @@ -273,7 +276,7 @@ public function completeStatement(Statement $statement, bool $currentServiceAllo case $entity[0] instanceof Reference: if ($entity[1][0] === '$') { // property getter, setter or appender Validators::assert($arguments, 'list:0..1', "setup arguments for '" . Callback::toString($entity) . "'"); - if (!$arguments && substr($entity[1], -2) === '[]') { + if (!$arguments && str_ends_with($entity[1], '[]')) { throw new ServiceCreationException(sprintf('Missing argument for %s.', $entity[1])); } } elseif ( @@ -281,7 +284,7 @@ public function completeStatement(Statement $statement, bool $currentServiceAllo ? $this->resolveReferenceType($entity[0]) : $this->resolveEntityType($entity[0] instanceof Statement ? $entity[0] : new Statement($entity[0])) ) { - $rc = new ReflectionClass($type); + $rc = new \ReflectionClass($type); if ($rc->hasMethod($entity[1])) { $rm = $rc->getMethod($entity[1]); if (!$rm->isPublic()) { @@ -301,7 +304,7 @@ public function completeStatement(Statement $statement, bool $currentServiceAllo try { $arguments = $this->completeArguments($arguments); } catch (ServiceCreationException $e) { - if (!strpos($e->getMessage(), ' (used in')) { + if (!str_contains($e->getMessage(), ' (used in')) { $e->setMessage($e->getMessage() . " (used in {$this->entityToString($entity)})"); } @@ -319,9 +322,7 @@ public function completeArguments(array $arguments): array $entity = $val->getEntity(); if ($entity === 'typed' || $entity === 'tagged') { $services = []; - $current = $this->currentService - ? $this->currentService->getName() - : null; + $current = $this->currentService?->getName(); foreach ($val->arguments as $argument) { foreach ($entity === 'tagged' ? $this->builder->findByTag($argument) : $this->builder->findAutowired($argument) as $name => $foo) { if ($name !== $current) { @@ -342,8 +343,8 @@ public function completeArguments(array $arguments): array } - /** @return string|array|Reference literal, Class, Reference, [Class, member], [, globalFunc], [Reference, member], [Statement, member] */ - private function normalizeEntity(Statement $statement) + /** Returns literal, Class, Reference, [Class, member], [, globalFunc], [Reference, member], [Statement, member] */ + private function normalizeEntity(Statement $statement): string|array|Reference|null { $entity = $statement->getEntity(); if (is_array($entity)) { @@ -353,7 +354,7 @@ private function normalizeEntity(Statement $statement) } if ($item instanceof Definition) { - $name = current(array_keys($this->builder->getDefinitions(), $item, true)); + $name = current(array_keys($this->builder->getDefinitions(), $item, strict: true)); if ($name === false) { throw new ServiceCreationException(sprintf("Service '%s' not found in definitions.", $item->getName())); } @@ -389,7 +390,7 @@ public function normalizeReference(Reference $ref): Reference try { return $this->getByType($service); - } catch (NotAllowedDuringResolvingException $e) { + } catch (NotAllowedDuringResolvingException) { return new Reference($service); } } @@ -413,12 +414,12 @@ public function getByType(string $type): Reference if ( $this->currentService && $this->currentServiceAllowed - && is_a($this->currentServiceType, $type, true) + && is_a($this->currentServiceType, $type, allow_string: true) ) { return new Reference(Reference::Self); } - $name = $this->builder->getByType($type, true); + $name = $this->builder->getByType($type, throw: true); if ( !$this->currentServiceAllowed && $this->currentService === $this->builder->getDefinition($name) @@ -432,10 +433,8 @@ public function getByType(string $type): Reference /** * Adds item to the list of dependencies. - * @param \ReflectionClass|\ReflectionFunctionAbstract|string $dep - * @return static */ - public function addDependency($dep) + public function addDependency(\ReflectionClass|\ReflectionFunctionAbstract|string $dep): static { $this->builder->addDependency($dep); return $this; @@ -444,7 +443,7 @@ public function addDependency($dep) private function completeException(\Throwable $e, Definition $def): ServiceCreationException { - if ($e instanceof ServiceCreationException && Strings::startsWith($e->getMessage(), "Service '")) { + if ($e instanceof ServiceCreationException && str_starts_with($e->getMessage(), "Service '")) { return $e; } @@ -472,17 +471,15 @@ private function completeException(\Throwable $e, Definition $def): ServiceCreat private function entityToString($entity): string { - $referenceToText = function (Reference $ref): string { - return $ref->isSelf() && $this->currentService + $referenceToText = fn(Reference $ref): string => $ref->isSelf() && $this->currentService ? '@' . $this->currentService->getName() : '@' . $ref->getValue(); - }; if (is_string($entity)) { return $entity . '::__construct()'; } elseif ($entity instanceof Reference) { $entity = $referenceToText($entity); } elseif (is_array($entity)) { - if (strpos($entity[1], '$') === false) { + if (!str_contains($entity[1], '$')) { $entity[1] .= '()'; } @@ -506,12 +503,12 @@ private function convertReferences(array $arguments): array $pair = explode('::', substr($val, 1), 2); if (!isset($pair[1])) { // @service $val = new Reference($pair[0]); - } elseif (preg_match('#^[A-Z][a-zA-Z0-9_]*$#D', $pair[1], $m)) { // @service::CONSTANT + } elseif (preg_match('#^[A-Z][a-zA-Z0-9_]*$#D', $pair[1])) { // @service::CONSTANT $val = ContainerBuilder::literal($this->resolveReferenceType(new Reference($pair[0])) . '::' . $pair[1]); } else { // @service::property $val = new Statement([new Reference($pair[0]), '$' . $pair[1]]); } - } elseif (is_string($val) && substr($val, 0, 2) === '@@') { // escaped text @@ + } elseif (is_string($val) && str_starts_with($val, '@@')) { // escaped text @@ $val = substr($val, 1); } }); @@ -527,10 +524,9 @@ private function convertReferences(array $arguments): array public static function autowireArguments( \ReflectionFunctionAbstract $method, array $arguments, - callable $getter + callable $getter, ): array { - $optCount = 0; $useName = false; $num = -1; $res = []; @@ -539,10 +535,10 @@ public static function autowireArguments( $paramName = $param->name; if ($param->isVariadic()) { - if ($useName && Arrays::some($arguments, function ($val, $key) { return is_int($key); })) { + if ($useName && Arrays::some($arguments, fn($val, $key) => is_int($key))) { throw new ServiceCreationException(sprintf( 'Cannot use positional argument after named or omitted argument in %s.', - Reflection::toString($param) + Reflection::toString($param), )); } elseif (array_key_exists($paramName, $arguments)) { @@ -550,7 +546,7 @@ public static function autowireArguments( throw new ServiceCreationException(sprintf( 'Parameter %s must be array, %s given.', Reflection::toString($param), - gettype($arguments[$paramName]) + gettype($arguments[$paramName]), )); } @@ -562,49 +558,23 @@ public static function autowireArguments( $arguments = []; } - $optCount = 0; - break; - } elseif (array_key_exists($key = $paramName, $arguments) || array_key_exists($key = $num, $arguments)) { - $res[$useName ? $paramName : $num] = $arguments[$key]; + $val = $arguments[$key]; + $res[$useName ? $paramName : $num] = is_scalar($val) && $param->getAttributes(\SensitiveParameter::class) + ? ContainerBuilder::literal('/*sensitive{*/?/*}*/', [$val]) + : $val; unset($arguments[$key], $arguments[$num]); // unset $num to enable overwriting in configuration } elseif (($aw = self::autowireArgument($param, $getter)) !== null) { $res[$useName ? $paramName : $num] = $aw; - } elseif (PHP_VERSION_ID >= 80000) { - if ($param->isOptional()) { - $useName = true; - } else { - $res[$num] = null; - trigger_error(sprintf( - 'The parameter %s should have a declared value in the configuration.', - Reflection::toString($param) - ), E_USER_DEPRECATED); - } - } else { - $res[$num] = $param->isDefaultValueAvailable() - ? Reflection::getParameterDefaultValue($param) - : null; - - if (!$param->isOptional()) { - trigger_error(sprintf( - 'The parameter %s should have a declared value in the configuration.', - Reflection::toString($param) - ), E_USER_DEPRECATED); - } - } - - if (PHP_VERSION_ID < 80000) { - $optCount = $param->isOptional() && $res[$num] === ($param->isDefaultValueAvailable() ? Reflection::getParameterDefaultValue($param) : null) - ? $optCount + 1 - : 0; + $useName = true; // is optional } } // extra parameters - while (!$useName && !$optCount && array_key_exists(++$num, $arguments)) { + while (!$useName && array_key_exists(++$num, $arguments)) { $res[$num] = $arguments[$num]; unset($arguments[$num]); } @@ -612,10 +582,8 @@ public static function autowireArguments( if ($arguments) { throw new ServiceCreationException(sprintf( 'Unable to pass specified arguments to %s.', - Reflection::toString($method) + Reflection::toString($method), )); - } elseif ($optCount) { - $res = array_slice($res, 0, -$optCount); } return $res; @@ -626,58 +594,49 @@ public static function autowireArguments( * Resolves missing argument using autowiring. * @param (callable(string $type, bool $single): (object|object[]|null)) $getter * @throws ServiceCreationException - * @return mixed */ - private static function autowireArgument(\ReflectionParameter $parameter, callable $getter) + private static function autowireArgument(\ReflectionParameter $parameter, callable $getter): mixed { $desc = Reflection::toString($parameter); $type = Nette\Utils\Type::fromReflection($parameter); - if ($type && $type->isClass()) { + if ($type?->isClass()) { $class = $type->getSingleName(); try { $res = $getter($class, true); - } catch (MissingServiceException $e) { + } catch (MissingServiceException) { $res = null; } catch (ServiceCreationException $e) { throw new ServiceCreationException("{$e->getMessage()} (required by $desc)", 0, $e); } - if ($res !== null || $parameter->allowsNull()) { + if ($res !== null || $parameter->isOptional()) { return $res; } elseif (class_exists($class) || interface_exists($class)) { throw new ServiceCreationException(sprintf( 'Service of type %s required by %s not found. Did you add it to configuration file?', $class, - $desc + $desc, )); } else { throw new ServiceCreationException(sprintf( "Class '%s' required by %s not found. Check the parameter type and 'use' statements.", $class, - $desc + $desc, )); } } elseif ($itemType = self::isArrayOf($parameter, $type)) { return $getter($itemType, false); - } elseif ( - ($type && $parameter->allowsNull()) - || $parameter->isOptional() - || $parameter->isDefaultValueAvailable() - ) { - // !optional + defaultAvailable, !optional + !defaultAvailable since 8.1.0 = func($a = null, $b) - // optional + !defaultAvailable, optional + defaultAvailable since 8.0.0 = i.e. Exception::__construct, mysqli::mysqli, ... - // optional + !defaultAvailable = variadics - // in other cases the optional and defaultAvailable are identical + } elseif ($parameter->isOptional()) { return null; } else { throw new ServiceCreationException(sprintf( 'Parameter %s has %s, so its value must be specified.', $desc, - $type && !$type->isSingle() ? 'complex type and no default value' : 'no class type or default value' + $type && !$type->isSimple() ? 'complex type and no default value' : 'no class type or default value', )); } } @@ -687,16 +646,23 @@ private static function isArrayOf(\ReflectionParameter $parameter, ?Nette\Utils\ { $method = $parameter->getDeclaringFunction(); return $method instanceof \ReflectionMethod - && $type - && $type->getSingleName() === 'array' + && $type?->getSingleName() === 'array' && preg_match( '#@param[ \t]+(?|([\w\\\\]+)\[\]|list<([\w\\\\]+)>|array)[ \t]+\$' . $parameter->name . '#', (string) $method->getDocComment(), - $m + $m, ) && ($itemType = Reflection::expandClassName($m[1], $method->getDeclaringClass())) && (class_exists($itemType) || interface_exists($itemType)) ? $itemType : null; } + + + /** @internal */ + public static function getFirstClassCallable(): array + { + static $x = [new Nette\PhpGenerator\Literal('...')]; + return $x; + } } diff --git a/site/vendor/nette/di/src/DI/exceptions.php b/site/vendor/nette/di/src/DI/exceptions.php index b441c5ed3..83fcb526d 100644 --- a/site/vendor/nette/di/src/DI/exceptions.php +++ b/site/vendor/nette/di/src/DI/exceptions.php @@ -25,7 +25,7 @@ class MissingServiceException extends Nette\InvalidStateException */ class ServiceCreationException extends Nette\InvalidStateException { - public function setMessage(string $message): self + public function setMessage(string $message): static { $this->message = $message; return $this; diff --git a/site/vendor/phpstan/phpstan/phpstan.phar b/site/vendor/phpstan/phpstan/phpstan.phar index 8a63504e0df0ff0dbe990413cb8fb68a659a4662..d06f90920658204e6676bd1d5c1d5fb529578a66 100755 GIT binary patch delta 315435 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

)$aty2(N3rek9j@ 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

=`;Avu0D1<73)28bir4cWG2c-BZ}7uMhzB! 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%0A*UIzNrh4IdEx>%^yIg{JE2XY@7g7{_?uM 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 Yamw+DA&z$o_x0v|^2sMt#s`l7ACfoXy8r+H diff --git a/site/vendor/phpstan/phpstan/phpstan.phar.asc b/site/vendor/phpstan/phpstan/phpstan.phar.asc index 31cfd82f9..ea93270d1 100644 --- a/site/vendor/phpstan/phpstan/phpstan.phar.asc +++ b/site/vendor/phpstan/phpstan/phpstan.phar.asc @@ -1,16 +1,16 @@ -----BEGIN PGP SIGNATURE----- -iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmWlDBoACgkQUcZzBf/C -5cCrUQ/9F+fvTIiZGqtJd9wql2ILy5wb4dNw+5gJ1C4kTIIxzTC4kHFUE5CGgUfY -ru2tFiO+PRS8rlK1c1yUY6MZ9KtfVzDNm8y5sXBrHgiisy6hkPpXYEp7t+oKznhY -KZTy6GZsYc74iFrpx5s4xJoBjUJ1qRnR5YrDDYQCaxhp6ppq4k5TCnpwRfAcH1y/ -7V5mgNLxtrNGV2KZoqkxEWBHao7JOzWMrbjPqb8QndDUQFje5Jv1OeDbTrTZvJu2 -arWXUZtBMUKJIYkvBzg2BXZaCE2Qk97uTQWqY5aSSKj+BOb/5uiN3RsFydlJ1iUB -b6SHAxIqHcq8u6xXCEj81cpe2RJyeWFiwbFyEUb61wHxKquSjq9tFA+Rkmk167Lx -HRJsSxRi5m0Z7Yf+b9+59hqFDB5gW82yk5KVLB9RDj5BkKMDhHSgG6RHTuP/VjnS -tJSepbRXyo47y7LcOh5l5ZSHytF8IZ30hmo/nGj5A5uLGSuVmyFcBC8OC34+EvHk -8E3MtfVp5I2fIBm3HNQCTdie8UK6iaKMifEJeUbjbAmEsgmfY8UMbHK8EvzOIx3B -StO72W/JZtFwtuxFsjdlh/kelyTGTgVtbfGzHz8057d3toD/49Y1SJuoXd9ZXcEa -5hsDgXPdocRUxYYorXUUhV3aP47Kg30Xe5Bkp2DdC9HDqe5pFOQ= -=I8YO +iQIzBAABCgAdFiEEynwsejDI6OEnSoR2UcZzBf/C5cAFAmWw+a0ACgkQUcZzBf/C +5cAToQ/8D3XHtsO5mN1k9HUQKwSQIhWnFVVleRidk9vFRSZhPJjV7HelLNZw5bnp +ojHGINUlqFHuOxlGGbdYSAQAcix6Jb+CE0kCI5mI3+OBfL2NiF9LHTgG6mMPLsSx +Lvk0Q4Wbl14Zc33252pEiWkRIUGQREM2nYmmYF35SJfhABZhF0wxWTQEBLSDKyn4 +qoeVC55RtafIUJ0x/auxvszp6Z6ca7Z1fmjFyIglhwHLt0iSv2nWcxQKNng/AqHr +a80J7qrcI8L1H69ScargAvh1X/CNp3YCMfDHj15NVOO7tZO+aEFtQARpw8JW+CJx +zEfw6+B0Dk5AMt2KPxDgVKXth+3rKRQ5nF0bo3cyEEikrfVMqhHWu6d0crpDtRfW +hQ5k3bSVbk5aY805pzU3PbGMea0eWY35igiWa/Kyu33dPvXxI/zkRF2zkL76d7K5 +JzWidcs9enz7hTqFTG3bKODogtaIlvN/vjw4hNrojhfam941DT6cicepntq6o6fy +H40f1xQ4W4no7dRs+2HDg63BeYyxKeoya+yCWQY0/q/xFdp5xNS6rMNE9XHXKIPY +3rUw7lbQELr/b1/Ob3o8zhrbpu/BKjkxCrU5bNlUspvBk5c2MA+DmYtbhTZBkUa/ +j99L6ysyNAmoCyy1uRkUR86qsYA3NjpVJntgmSZmbf79vjKa45M= +=9AJu -----END PGP SIGNATURE----- diff --git a/site/vendor/symfony/cache/Adapter/AbstractAdapter.php b/site/vendor/symfony/cache/Adapter/AbstractAdapter.php index ed90f4716..7525fe039 100644 --- a/site/vendor/symfony/cache/Adapter/AbstractAdapter.php +++ b/site/vendor/symfony/cache/Adapter/AbstractAdapter.php @@ -86,7 +86,7 @@ static function ($deferred, $namespace, &$expiredIds, $getId, $defaultLifetime) * * Using ApcuAdapter makes system caches compatible with read-only filesystems. */ - public static function createSystemCache(string $namespace, int $defaultLifetime, string $version, string $directory, LoggerInterface $logger = null): AdapterInterface + public static function createSystemCache(string $namespace, int $defaultLifetime, string $version, string $directory, ?LoggerInterface $logger = null): AdapterInterface { $opcache = new PhpFilesAdapter($namespace, $defaultLifetime, $directory, true); if (null !== $logger) { diff --git a/site/vendor/symfony/cache/Adapter/ApcuAdapter.php b/site/vendor/symfony/cache/Adapter/ApcuAdapter.php index ae794e680..427e575ca 100644 --- a/site/vendor/symfony/cache/Adapter/ApcuAdapter.php +++ b/site/vendor/symfony/cache/Adapter/ApcuAdapter.php @@ -25,7 +25,7 @@ class ApcuAdapter extends AbstractAdapter /** * @throws CacheException if APCu is not enabled */ - public function __construct(string $namespace = '', int $defaultLifetime = 0, string $version = null, MarshallerInterface $marshaller = null) + public function __construct(string $namespace = '', int $defaultLifetime = 0, ?string $version = null, ?MarshallerInterface $marshaller = null) { if (!static::isSupported()) { throw new CacheException('APCu is not enabled.'); diff --git a/site/vendor/symfony/cache/Adapter/ArrayAdapter.php b/site/vendor/symfony/cache/Adapter/ArrayAdapter.php index 63e1f887e..ec5056d7e 100644 --- a/site/vendor/symfony/cache/Adapter/ArrayAdapter.php +++ b/site/vendor/symfony/cache/Adapter/ArrayAdapter.php @@ -74,7 +74,7 @@ static function ($key, $value, $isHit, $tags) { ); } - public function get(string $key, callable $callback, float $beta = null, array &$metadata = null): mixed + public function get(string $key, callable $callback, ?float $beta = null, ?array &$metadata = null): mixed { $item = $this->getItem($key); $metadata = $item->getMetadata(); diff --git a/site/vendor/symfony/cache/Adapter/ChainAdapter.php b/site/vendor/symfony/cache/Adapter/ChainAdapter.php index d1356248a..304f35fbf 100644 --- a/site/vendor/symfony/cache/Adapter/ChainAdapter.php +++ b/site/vendor/symfony/cache/Adapter/ChainAdapter.php @@ -88,7 +88,7 @@ static function ($sourceItem, $item, $defaultLifetime, $sourceMetadata = null) { ); } - public function get(string $key, callable $callback, float $beta = null, array &$metadata = null): mixed + public function get(string $key, callable $callback, ?float $beta = null, ?array &$metadata = null): mixed { $doSave = true; $callback = static function (CacheItem $item, bool &$save) use ($callback, &$doSave) { @@ -98,7 +98,7 @@ public function get(string $key, callable $callback, float $beta = null, array & return $value; }; - $wrap = function (CacheItem $item = null, bool &$save = true) use ($key, $callback, $beta, &$wrap, &$doSave, &$metadata) { + $wrap = function (?CacheItem $item = null, bool &$save = true) use ($key, $callback, $beta, &$wrap, &$doSave, &$metadata) { static $lastItem; static $i = 0; $adapter = $this->adapters[$i]; diff --git a/site/vendor/symfony/cache/Adapter/CouchbaseBucketAdapter.php b/site/vendor/symfony/cache/Adapter/CouchbaseBucketAdapter.php index f8cb92dbf..18136da17 100644 --- a/site/vendor/symfony/cache/Adapter/CouchbaseBucketAdapter.php +++ b/site/vendor/symfony/cache/Adapter/CouchbaseBucketAdapter.php @@ -39,7 +39,7 @@ class CouchbaseBucketAdapter extends AbstractAdapter private \CouchbaseBucket $bucket; private MarshallerInterface $marshaller; - public function __construct(\CouchbaseBucket $bucket, string $namespace = '', int $defaultLifetime = 0, MarshallerInterface $marshaller = null) + public function __construct(\CouchbaseBucket $bucket, string $namespace = '', int $defaultLifetime = 0, ?MarshallerInterface $marshaller = null) { if (!static::isSupported()) { throw new CacheException('Couchbase >= 2.6.0 < 3.0.0 is required.'); diff --git a/site/vendor/symfony/cache/Adapter/CouchbaseCollectionAdapter.php b/site/vendor/symfony/cache/Adapter/CouchbaseCollectionAdapter.php index b5bb603e3..a1cfb0843 100644 --- a/site/vendor/symfony/cache/Adapter/CouchbaseCollectionAdapter.php +++ b/site/vendor/symfony/cache/Adapter/CouchbaseCollectionAdapter.php @@ -32,7 +32,7 @@ class CouchbaseCollectionAdapter extends AbstractAdapter private Collection $connection; private MarshallerInterface $marshaller; - public function __construct(Collection $connection, string $namespace = '', int $defaultLifetime = 0, MarshallerInterface $marshaller = null) + public function __construct(Collection $connection, string $namespace = '', int $defaultLifetime = 0, ?MarshallerInterface $marshaller = null) { if (!static::isSupported()) { throw new CacheException('Couchbase >= 3.0.5 < 4.0.0 is required.'); @@ -183,7 +183,7 @@ protected function doSave(array $values, $lifetime): array|bool } $upsertOptions = new UpsertOptions(); - $upsertOptions->expiry(\DateTimeImmutable::createFromFormat('U', time() + $lifetime)); + $upsertOptions->expiry($lifetime); $ko = []; foreach ($values as $key => $value) { diff --git a/site/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php b/site/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php index 4de4727c5..4ca1b8ec7 100644 --- a/site/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php +++ b/site/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php @@ -56,7 +56,7 @@ class DoctrineDbalAdapter extends AbstractAdapter implements PruneableInterface * * @throws InvalidArgumentException When namespace contains invalid characters */ - public function __construct(Connection|string $connOrDsn, string $namespace = '', int $defaultLifetime = 0, array $options = [], MarshallerInterface $marshaller = null) + public function __construct(Connection|string $connOrDsn, string $namespace = '', int $defaultLifetime = 0, array $options = [], ?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])); diff --git a/site/vendor/symfony/cache/Adapter/FilesystemAdapter.php b/site/vendor/symfony/cache/Adapter/FilesystemAdapter.php index 7185dd487..13daa568c 100644 --- a/site/vendor/symfony/cache/Adapter/FilesystemAdapter.php +++ b/site/vendor/symfony/cache/Adapter/FilesystemAdapter.php @@ -20,7 +20,7 @@ class FilesystemAdapter extends AbstractAdapter implements PruneableInterface { use FilesystemTrait; - public function __construct(string $namespace = '', int $defaultLifetime = 0, string $directory = null, MarshallerInterface $marshaller = null) + public function __construct(string $namespace = '', int $defaultLifetime = 0, ?string $directory = null, ?MarshallerInterface $marshaller = null) { $this->marshaller = $marshaller ?? new DefaultMarshaller(); parent::__construct('', $defaultLifetime); diff --git a/site/vendor/symfony/cache/Adapter/FilesystemTagAwareAdapter.php b/site/vendor/symfony/cache/Adapter/FilesystemTagAwareAdapter.php index e78536794..80edee433 100644 --- a/site/vendor/symfony/cache/Adapter/FilesystemTagAwareAdapter.php +++ b/site/vendor/symfony/cache/Adapter/FilesystemTagAwareAdapter.php @@ -35,7 +35,7 @@ class FilesystemTagAwareAdapter extends AbstractTagAwareAdapter implements Prune */ private const TAG_FOLDER = 'tags'; - public function __construct(string $namespace = '', int $defaultLifetime = 0, string $directory = null, MarshallerInterface $marshaller = null) + public function __construct(string $namespace = '', int $defaultLifetime = 0, ?string $directory = null, ?MarshallerInterface $marshaller = null) { $this->marshaller = new TagAwareMarshaller($marshaller); parent::__construct('', $defaultLifetime); diff --git a/site/vendor/symfony/cache/Adapter/MemcachedAdapter.php b/site/vendor/symfony/cache/Adapter/MemcachedAdapter.php index 8e14016d3..b0a41fedd 100644 --- a/site/vendor/symfony/cache/Adapter/MemcachedAdapter.php +++ b/site/vendor/symfony/cache/Adapter/MemcachedAdapter.php @@ -45,7 +45,7 @@ class MemcachedAdapter extends AbstractAdapter * * Using a MemcachedAdapter as a pure items store is fine. */ - public function __construct(\Memcached $client, string $namespace = '', int $defaultLifetime = 0, MarshallerInterface $marshaller = null) + public function __construct(\Memcached $client, string $namespace = '', int $defaultLifetime = 0, ?MarshallerInterface $marshaller = null) { if (!static::isSupported()) { throw new CacheException('Memcached > 3.1.5 is required.'); @@ -111,6 +111,8 @@ public static function createConnection(#[\SensitiveParameter] array|string $ser $params = preg_replace_callback('#^memcached:(//)?(?:([^@]*+)@)?#', function ($m) use (&$username, &$password) { if (!empty($m[2])) { [$username, $password] = explode(':', $m[2], 2) + [1 => null]; + $username = rawurldecode($username); + $password = null !== $password ? rawurldecode($password) : null; } return 'file:'.($m[1] ?? ''); diff --git a/site/vendor/symfony/cache/Adapter/NullAdapter.php b/site/vendor/symfony/cache/Adapter/NullAdapter.php index 07c7af816..d5d2ef6b4 100644 --- a/site/vendor/symfony/cache/Adapter/NullAdapter.php +++ b/site/vendor/symfony/cache/Adapter/NullAdapter.php @@ -37,7 +37,7 @@ static function ($key) { ); } - public function get(string $key, callable $callback, float $beta = null, array &$metadata = null): mixed + public function get(string $key, callable $callback, ?float $beta = null, ?array &$metadata = null): mixed { $save = true; diff --git a/site/vendor/symfony/cache/Adapter/PdoAdapter.php b/site/vendor/symfony/cache/Adapter/PdoAdapter.php index 94a80fe52..4fee819da 100644 --- a/site/vendor/symfony/cache/Adapter/PdoAdapter.php +++ b/site/vendor/symfony/cache/Adapter/PdoAdapter.php @@ -54,7 +54,7 @@ class PdoAdapter extends AbstractAdapter implements PruneableInterface * @throws InvalidArgumentException When PDO error mode is not PDO::ERRMODE_EXCEPTION * @throws InvalidArgumentException When namespace contains invalid characters */ - public function __construct(#[\SensitiveParameter] \PDO|string $connOrDsn, string $namespace = '', int $defaultLifetime = 0, array $options = [], MarshallerInterface $marshaller = null) + 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)); diff --git a/site/vendor/symfony/cache/Adapter/PhpArrayAdapter.php b/site/vendor/symfony/cache/Adapter/PhpArrayAdapter.php index f6decd848..0cda1cce8 100644 --- a/site/vendor/symfony/cache/Adapter/PhpArrayAdapter.php +++ b/site/vendor/symfony/cache/Adapter/PhpArrayAdapter.php @@ -78,7 +78,7 @@ public static function create(string $file, CacheItemPoolInterface $fallbackPool return new static($file, $fallbackPool); } - public function get(string $key, callable $callback, float $beta = null, array &$metadata = null): mixed + public function get(string $key, callable $callback, ?float $beta = null, ?array &$metadata = null): mixed { if (!isset($this->values)) { $this->initialize(); diff --git a/site/vendor/symfony/cache/Adapter/PhpFilesAdapter.php b/site/vendor/symfony/cache/Adapter/PhpFilesAdapter.php index b610d293b..b298fbeba 100644 --- a/site/vendor/symfony/cache/Adapter/PhpFilesAdapter.php +++ b/site/vendor/symfony/cache/Adapter/PhpFilesAdapter.php @@ -43,7 +43,7 @@ class PhpFilesAdapter extends AbstractAdapter implements PruneableInterface * * @throws CacheException if OPcache is not enabled */ - public function __construct(string $namespace = '', int $defaultLifetime = 0, string $directory = null, bool $appendOnly = false) + public function __construct(string $namespace = '', int $defaultLifetime = 0, ?string $directory = null, bool $appendOnly = false) { $this->appendOnly = $appendOnly; self::$startTime ??= $_SERVER['REQUEST_TIME'] ?? time(); diff --git a/site/vendor/symfony/cache/Adapter/ProxyAdapter.php b/site/vendor/symfony/cache/Adapter/ProxyAdapter.php index 88fccde4a..c022dd5fa 100644 --- a/site/vendor/symfony/cache/Adapter/ProxyAdapter.php +++ b/site/vendor/symfony/cache/Adapter/ProxyAdapter.php @@ -80,7 +80,7 @@ static function (CacheItemInterface $innerItem, CacheItem $item, $expiry = null) ); } - public function get(string $key, callable $callback, float $beta = null, array &$metadata = null): mixed + public function get(string $key, callable $callback, ?float $beta = null, ?array &$metadata = null): mixed { if (!$this->pool instanceof CacheInterface) { return $this->doGet($this, $key, $callback, $beta, $metadata); diff --git a/site/vendor/symfony/cache/Adapter/RedisAdapter.php b/site/vendor/symfony/cache/Adapter/RedisAdapter.php index d8e37b1d7..e33f2f65f 100644 --- a/site/vendor/symfony/cache/Adapter/RedisAdapter.php +++ b/site/vendor/symfony/cache/Adapter/RedisAdapter.php @@ -18,7 +18,7 @@ class RedisAdapter extends AbstractAdapter { use RedisTrait; - public function __construct(\Redis|\RedisArray|\RedisCluster|\Predis\ClientInterface|\Relay\Relay $redis, string $namespace = '', int $defaultLifetime = 0, MarshallerInterface $marshaller = null) + public function __construct(\Redis|\RedisArray|\RedisCluster|\Predis\ClientInterface|\Relay\Relay $redis, string $namespace = '', int $defaultLifetime = 0, ?MarshallerInterface $marshaller = null) { $this->init($redis, $namespace, $defaultLifetime, $marshaller); } diff --git a/site/vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php b/site/vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php index a3ef9f109..a44ef986d 100644 --- a/site/vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php +++ b/site/vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php @@ -60,7 +60,7 @@ class RedisTagAwareAdapter extends AbstractTagAwareAdapter private string $redisEvictionPolicy; private string $namespace; - public function __construct(\Redis|Relay|\RedisArray|\RedisCluster|\Predis\ClientInterface $redis, string $namespace = '', int $defaultLifetime = 0, MarshallerInterface $marshaller = null) + public function __construct(\Redis|Relay|\RedisArray|\RedisCluster|\Predis\ClientInterface $redis, string $namespace = '', int $defaultLifetime = 0, ?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()))); diff --git a/site/vendor/symfony/cache/Adapter/TagAwareAdapter.php b/site/vendor/symfony/cache/Adapter/TagAwareAdapter.php index dae2991bd..6c4a42802 100644 --- a/site/vendor/symfony/cache/Adapter/TagAwareAdapter.php +++ b/site/vendor/symfony/cache/Adapter/TagAwareAdapter.php @@ -51,7 +51,7 @@ class TagAwareAdapter implements TagAwareAdapterInterface, TagAwareCacheInterfac private static \Closure $getTagsByKey; private static \Closure $saveTags; - public function __construct(AdapterInterface $itemsPool, AdapterInterface $tagsPool = null, float $knownTagVersionsTtl = 0.15) + public function __construct(AdapterInterface $itemsPool, ?AdapterInterface $tagsPool = null, float $knownTagVersionsTtl = 0.15) { $this->pool = $itemsPool; $this->tags = $tagsPool ?? $itemsPool; diff --git a/site/vendor/symfony/cache/Adapter/TraceableAdapter.php b/site/vendor/symfony/cache/Adapter/TraceableAdapter.php index 784c156b4..b5bce143f 100644 --- a/site/vendor/symfony/cache/Adapter/TraceableAdapter.php +++ b/site/vendor/symfony/cache/Adapter/TraceableAdapter.php @@ -35,7 +35,7 @@ public function __construct(AdapterInterface $pool) $this->pool = $pool; } - public function get(string $key, callable $callback, float $beta = null, array &$metadata = null): mixed + 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)); diff --git a/site/vendor/symfony/cache/DataCollector/CacheDataCollector.php b/site/vendor/symfony/cache/DataCollector/CacheDataCollector.php index 08ab8816c..b9bcdaf13 100644 --- a/site/vendor/symfony/cache/DataCollector/CacheDataCollector.php +++ b/site/vendor/symfony/cache/DataCollector/CacheDataCollector.php @@ -36,7 +36,7 @@ public function addInstance(string $name, TraceableAdapter $instance): void $this->instances[$name] = $instance; } - public function collect(Request $request, Response $response, \Throwable $exception = null): void + public function collect(Request $request, Response $response, ?\Throwable $exception = null): void { $empty = ['calls' => [], 'adapters' => [], 'config' => [], 'options' => [], 'statistics' => []]; $this->data = ['instances' => $empty, 'total' => $empty]; diff --git a/site/vendor/symfony/cache/DependencyInjection/CachePoolPass.php b/site/vendor/symfony/cache/DependencyInjection/CachePoolPass.php index e29e9e298..e1ebd6729 100644 --- a/site/vendor/symfony/cache/DependencyInjection/CachePoolPass.php +++ b/site/vendor/symfony/cache/DependencyInjection/CachePoolPass.php @@ -178,11 +178,11 @@ public function process(ContainerBuilder $container): void $container->removeDefinition('cache.early_expiration_handler'); } - $notAliasedCacheClearerId = $aliasedCacheClearerId = 'cache.global_clearer'; - while ($container->hasAlias('cache.global_clearer')) { - $aliasedCacheClearerId = (string) $container->getAlias('cache.global_clearer'); + $notAliasedCacheClearerId = 'cache.global_clearer'; + while ($container->hasAlias($notAliasedCacheClearerId)) { + $notAliasedCacheClearerId = (string) $container->getAlias($notAliasedCacheClearerId); } - if ($container->hasDefinition($aliasedCacheClearerId)) { + if ($container->hasDefinition($notAliasedCacheClearerId)) { $clearers[$notAliasedCacheClearerId] = $allPools; } diff --git a/site/vendor/symfony/cache/LockRegistry.php b/site/vendor/symfony/cache/LockRegistry.php index 4b750cb44..c5c5fde89 100644 --- a/site/vendor/symfony/cache/LockRegistry.php +++ b/site/vendor/symfony/cache/LockRegistry.php @@ -83,7 +83,7 @@ public static function setFiles(array $files): array return $previousFiles; } - public static function compute(callable $callback, ItemInterface $item, bool &$save, CacheInterface $pool, \Closure $setMetadata = null, LoggerInterface $logger = null): mixed + public static function compute(callable $callback, ItemInterface $item, bool &$save, CacheInterface $pool, ?\Closure $setMetadata = null, ?LoggerInterface $logger = null): mixed { if ('\\' === \DIRECTORY_SEPARATOR && null === self::$lockedFiles) { // disable locking on Windows by default diff --git a/site/vendor/symfony/cache/Marshaller/DefaultMarshaller.php b/site/vendor/symfony/cache/Marshaller/DefaultMarshaller.php index 973b137ae..34bbeb893 100644 --- a/site/vendor/symfony/cache/Marshaller/DefaultMarshaller.php +++ b/site/vendor/symfony/cache/Marshaller/DefaultMarshaller.php @@ -23,7 +23,7 @@ class DefaultMarshaller implements MarshallerInterface private bool $useIgbinarySerialize = true; private bool $throwOnSerializationFailure = false; - public function __construct(bool $useIgbinarySerialize = null, 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'), '<='); diff --git a/site/vendor/symfony/cache/Marshaller/SodiumMarshaller.php b/site/vendor/symfony/cache/Marshaller/SodiumMarshaller.php index ee64c949a..49eb716a6 100644 --- a/site/vendor/symfony/cache/Marshaller/SodiumMarshaller.php +++ b/site/vendor/symfony/cache/Marshaller/SodiumMarshaller.php @@ -29,7 +29,7 @@ class SodiumMarshaller implements MarshallerInterface * more rotating keys can be provided to decrypt values; * each key must be generated using sodium_crypto_box_keypair() */ - public function __construct(array $decryptionKeys, MarshallerInterface $marshaller = null) + public function __construct(array $decryptionKeys, ?MarshallerInterface $marshaller = null) { if (!self::isSupported()) { throw new CacheException('The "sodium" PHP extension is not loaded.'); diff --git a/site/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php b/site/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php index f5c2867af..825f32cc0 100644 --- a/site/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php +++ b/site/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php @@ -20,7 +20,7 @@ class TagAwareMarshaller implements MarshallerInterface { private MarshallerInterface $marshaller; - public function __construct(MarshallerInterface $marshaller = null) + public function __construct(?MarshallerInterface $marshaller = null) { $this->marshaller = $marshaller ?? new DefaultMarshaller(); } diff --git a/site/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php b/site/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php index 0dd43c0d0..af180219e 100644 --- a/site/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php +++ b/site/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php @@ -27,14 +27,14 @@ class EarlyExpirationDispatcher private ReverseContainer $reverseContainer; private ?\Closure $callbackWrapper; - public function __construct(MessageBusInterface $bus, ReverseContainer $reverseContainer, callable $callbackWrapper = null) + public function __construct(MessageBusInterface $bus, ReverseContainer $reverseContainer, ?callable $callbackWrapper = null) { $this->bus = $bus; $this->reverseContainer = $reverseContainer; $this->callbackWrapper = null === $callbackWrapper ? null : $callbackWrapper(...); } - public function __invoke(callable $callback, CacheItem $item, bool &$save, AdapterInterface $pool, \Closure $setMetadata, LoggerInterface $logger = null): mixed + public function __invoke(callable $callback, CacheItem $item, bool &$save, AdapterInterface $pool, \Closure $setMetadata, ?LoggerInterface $logger = null): mixed { if (!$item->isHit() || null === $message = EarlyExpirationMessage::create($this->reverseContainer, $callback, $item, $pool)) { // The item is stale or the callback cannot be reversed: we must compute the value now diff --git a/site/vendor/symfony/cache/Traits/ContractsTrait.php b/site/vendor/symfony/cache/Traits/ContractsTrait.php index 083ce1f9d..8d830f0ab 100644 --- a/site/vendor/symfony/cache/Traits/ContractsTrait.php +++ b/site/vendor/symfony/cache/Traits/ContractsTrait.php @@ -59,7 +59,7 @@ public function setCallbackWrapper(?callable $callbackWrapper): callable return $previousWrapper; } - private function doGet(AdapterInterface $pool, string $key, callable $callback, ?float $beta, array &$metadata = null): mixed + 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)); diff --git a/site/vendor/symfony/cache/Traits/FilesystemCommonTrait.php b/site/vendor/symfony/cache/Traits/FilesystemCommonTrait.php index cd14886ff..7fa0f2e87 100644 --- a/site/vendor/symfony/cache/Traits/FilesystemCommonTrait.php +++ b/site/vendor/symfony/cache/Traits/FilesystemCommonTrait.php @@ -82,7 +82,7 @@ protected function doUnlink(string $file): bool return @unlink($file); } - private function write(string $file, string $data, int $expiresAt = null): bool + private function write(string $file, string $data, ?int $expiresAt = null): bool { $unlink = false; set_error_handler(static fn ($type, $message, $file, $line) => throw new \ErrorException($message, 0, $type, $file, $line)); @@ -119,7 +119,7 @@ private function write(string $file, string $data, int $expiresAt = null): bool } } - private function getFile(string $id, bool $mkdir = false, string $directory = null): string + private function getFile(string $id, bool $mkdir = false, ?string $directory = null): string { // Use xxh128 to favor speed over security, which is not an issue here $hash = str_replace('/', '-', base64_encode(hash('xxh128', static::class.$id, true))); diff --git a/site/vendor/symfony/cache/Traits/RedisTrait.php b/site/vendor/symfony/cache/Traits/RedisTrait.php index 4928db07f..12887c107 100644 --- a/site/vendor/symfony/cache/Traits/RedisTrait.php +++ b/site/vendor/symfony/cache/Traits/RedisTrait.php @@ -563,7 +563,7 @@ protected function doSave(array $values, int $lifetime): array|bool return $failed; } - private function pipeline(\Closure $generator, object $redis = null): \Generator + private function pipeline(\Closure $generator, ?object $redis = null): \Generator { $ids = []; $redis ??= $this->redis; diff --git a/site/vendor/symfony/cache/Traits/RelayProxy.php b/site/vendor/symfony/cache/Traits/RelayProxy.php index c55206ead..90af7a7d4 100644 --- a/site/vendor/symfony/cache/Traits/RelayProxy.php +++ b/site/vendor/symfony/cache/Traits/RelayProxy.php @@ -236,12 +236,12 @@ public function info(...$sections): \Relay\Relay|array|false return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->info(...\func_get_args()); } - public function flushdb($async = false): \Relay\Relay|bool + public function flushdb($sync = null): \Relay\Relay|bool { return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushdb(...\func_get_args()); } - public function flushall($async = false): \Relay\Relay|bool + public function flushall($sync = null): \Relay\Relay|bool { return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->flushall(...\func_get_args()); } @@ -326,6 +326,11 @@ public function lastsave(): \Relay\Relay|false|int return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lastsave(...\func_get_args()); } + public function lcs($key1, $key2, $options = null): mixed + { + return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->lcs(...\func_get_args()); + } + public function bgsave($schedule = false): \Relay\Relay|bool { return ($this->lazyObjectState->realInstance ??= ($this->lazyObjectState->initializer)())->bgsave(...\func_get_args()); diff --git a/site/vendor/symfony/config/Builder/ClassBuilder.php b/site/vendor/symfony/config/Builder/ClassBuilder.php index 8194a1526..619ebd857 100644 --- a/site/vendor/symfony/config/Builder/ClassBuilder.php +++ b/site/vendor/symfony/config/Builder/ClassBuilder.php @@ -119,7 +119,7 @@ public function addMethod(string $name, string $body, array $params = []): void $this->methods[] = new Method(strtr($body, ['NAME' => $this->camelCase($name)] + $params)); } - public function addProperty(string $name, string $classType = null, string $defaultValue = null): Property + public function addProperty(string $name, ?string $classType = null, ?string $defaultValue = null): Property { $property = new Property($name, '_' !== $name[0] ? $this->camelCase($name) : $name); if (null !== $classType) { diff --git a/site/vendor/symfony/config/CHANGELOG.md b/site/vendor/symfony/config/CHANGELOG.md index 094d5abba..51e2d1fee 100644 --- a/site/vendor/symfony/config/CHANGELOG.md +++ b/site/vendor/symfony/config/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +7.0 +--- + + * Require explicit argument when calling `NodeBuilder::setParent()` + 6.3 --- diff --git a/site/vendor/symfony/config/ConfigCacheInterface.php b/site/vendor/symfony/config/ConfigCacheInterface.php index be7f0986c..7b9d38897 100644 --- a/site/vendor/symfony/config/ConfigCacheInterface.php +++ b/site/vendor/symfony/config/ConfigCacheInterface.php @@ -39,9 +39,7 @@ public function isFresh(): bool; * @param string $content The content to write into the cache * @param ResourceInterface[]|null $metadata An array of ResourceInterface instances * - * @return void - * * @throws \RuntimeException When the cache file cannot be written */ - public function write(string $content, array $metadata = null); + public function write(string $content, ?array $metadata = null): void; } diff --git a/site/vendor/symfony/config/Definition/ArrayNode.php b/site/vendor/symfony/config/Definition/ArrayNode.php index 1448220cd..15ad47862 100644 --- a/site/vendor/symfony/config/Definition/ArrayNode.php +++ b/site/vendor/symfony/config/Definition/ArrayNode.php @@ -22,20 +22,17 @@ */ class ArrayNode extends BaseNode implements PrototypeNodeInterface { - protected $xmlRemappings = []; - protected $children = []; - protected $allowFalse = false; - protected $allowNewKeys = true; - protected $addIfNotSet = false; - protected $performDeepMerging = true; - protected $ignoreExtraKeys = false; - protected $removeExtraKeys = true; - protected $normalizeKeys = true; - - /** - * @return void - */ - public function setNormalizeKeys(bool $normalizeKeys) + protected array $xmlRemappings = []; + protected array $children = []; + protected bool $allowFalse = false; + protected bool $allowNewKeys = true; + protected bool $addIfNotSet = false; + protected bool $performDeepMerging = true; + protected bool $ignoreExtraKeys = false; + protected bool $removeExtraKeys = true; + protected bool $normalizeKeys = true; + + public function setNormalizeKeys(bool $normalizeKeys): void { $this->normalizeKeys = $normalizeKeys; } @@ -80,10 +77,8 @@ public function getChildren(): array * Sets the xml remappings that should be performed. * * @param array $remappings An array of the form [[string, string]] - * - * @return void */ - public function setXmlRemappings(array $remappings) + public function setXmlRemappings(array $remappings): void { $this->xmlRemappings = $remappings; } @@ -101,40 +96,32 @@ public function getXmlRemappings(): array /** * Sets whether to add default values for this array if it has not been * defined in any of the configuration files. - * - * @return void */ - public function setAddIfNotSet(bool $boolean) + public function setAddIfNotSet(bool $boolean): void { $this->addIfNotSet = $boolean; } /** * Sets whether false is allowed as value indicating that the array should be unset. - * - * @return void */ - public function setAllowFalse(bool $allow) + public function setAllowFalse(bool $allow): void { $this->allowFalse = $allow; } /** * Sets whether new keys can be defined in subsequent configurations. - * - * @return void */ - public function setAllowNewKeys(bool $allow) + public function setAllowNewKeys(bool $allow): void { $this->allowNewKeys = $allow; } /** * Sets if deep merging should occur. - * - * @return void */ - public function setPerformDeepMerging(bool $boolean) + public function setPerformDeepMerging(bool $boolean): void { $this->performDeepMerging = $boolean; } @@ -144,10 +131,8 @@ public function setPerformDeepMerging(bool $boolean) * * @param bool $boolean To allow extra keys * @param bool $remove To remove extra keys - * - * @return void */ - public function setIgnoreExtraKeys(bool $boolean, bool $remove = true) + public function setIgnoreExtraKeys(bool $boolean, bool $remove = true): void { $this->ignoreExtraKeys = $boolean; $this->removeExtraKeys = $this->ignoreExtraKeys && $remove; @@ -161,10 +146,7 @@ public function shouldIgnoreExtraKeys(): bool return $this->ignoreExtraKeys; } - /** - * @return void - */ - public function setName(string $name) + public function setName(string $name): void { $this->name = $name; } @@ -193,12 +175,10 @@ public function getDefaultValue(): mixed /** * Adds a child node. * - * @return void - * * @throws \InvalidArgumentException when the child node has no name * @throws \InvalidArgumentException when the child node's name is not unique */ - public function addChild(NodeInterface $node) + public function addChild(NodeInterface $node): void { $name = $node->getName(); if ('' === $name) { @@ -258,10 +238,7 @@ protected function finalizeValue(mixed $value): mixed return $value; } - /** - * @return void - */ - protected function validateType(mixed $value) + 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))); diff --git a/site/vendor/symfony/config/Definition/BaseNode.php b/site/vendor/symfony/config/Definition/BaseNode.php index 85f0f7eeb..3ef9680bb 100644 --- a/site/vendor/symfony/config/Definition/BaseNode.php +++ b/site/vendor/symfony/config/Definition/BaseNode.php @@ -29,24 +29,24 @@ abstract class BaseNode implements NodeInterface private static array $placeholderUniquePrefixes = []; private static array $placeholders = []; - protected $name; - protected $parent; - protected $normalizationClosures = []; - protected $normalizedTypes = []; - protected $finalValidationClosures = []; - protected $allowOverwrite = true; - protected $required = false; - protected $deprecation = []; - protected $equivalentValues = []; - protected $attributes = []; - protected $pathSeparator; + protected string $name; + protected ?NodeInterface $parent; + protected array $normalizationClosures = []; + protected array $normalizedTypes = []; + protected array $finalValidationClosures = []; + protected bool $allowOverwrite = true; + protected bool $required = false; + protected array $deprecation = []; + protected array $equivalentValues = []; + protected array $attributes = []; + protected string $pathSeparator; private mixed $handlingPlaceholder = null; /** * @throws \InvalidArgumentException if the name contains a period */ - public function __construct(?string $name, NodeInterface $parent = null, string $pathSeparator = self::DEFAULT_PATH_SEPARATOR) + public function __construct(?string $name, ?NodeInterface $parent = null, string $pathSeparator = self::DEFAULT_PATH_SEPARATOR) { if (str_contains($name = (string) $name, $pathSeparator)) { throw new \InvalidArgumentException('The name must not contain ".'.$pathSeparator.'".'); @@ -98,10 +98,7 @@ public static function resetPlaceholders(): void self::$placeholders = []; } - /** - * @return void - */ - public function setAttribute(string $key, mixed $value) + public function setAttribute(string $key, mixed $value): void { $this->attributes[$key] = $value; } @@ -121,28 +118,20 @@ public function getAttributes(): array return $this->attributes; } - /** - * @return void - */ - public function setAttributes(array $attributes) + public function setAttributes(array $attributes): void { $this->attributes = $attributes; } - /** - * @return void - */ - public function removeAttribute(string $key) + public function removeAttribute(string $key): void { unset($this->attributes[$key]); } /** * Sets an info message. - * - * @return void */ - public function setInfo(string $info) + public function setInfo(string $info): void { $this->setAttribute('info', $info); } @@ -157,10 +146,8 @@ public function getInfo(): ?string /** * Sets the example configuration for this node. - * - * @return void */ - public function setExample(string|array $example) + public function setExample(string|array $example): void { $this->setAttribute('example', $example); } @@ -175,20 +162,16 @@ public function getExample(): string|array|null /** * Adds an equivalent value. - * - * @return void */ - public function addEquivalentValue(mixed $originalValue, mixed $equivalentValue) + public function addEquivalentValue(mixed $originalValue, mixed $equivalentValue): void { $this->equivalentValues[] = [$originalValue, $equivalentValue]; } /** * Set this node as required. - * - * @return void */ - public function setRequired(bool $boolean) + public function setRequired(bool $boolean): void { $this->required = $boolean; } @@ -202,10 +185,8 @@ public function setRequired(bool $boolean) * @param string $package The name of the composer package that is triggering the deprecation * @param string $version The version of the package that introduced the deprecation * @param string $message the deprecation message to use - * - * @return void */ - public function setDeprecated(string $package, string $version, string $message = 'The child node "%node%" at path "%path%" is deprecated.') + public function setDeprecated(string $package, string $version, string $message = 'The child node "%node%" at path "%path%" is deprecated.'): void { $this->deprecation = [ 'package' => $package, @@ -216,10 +197,8 @@ public function setDeprecated(string $package, string $version, string $message /** * Sets if this node can be overridden. - * - * @return void */ - public function setAllowOverwrite(bool $allow) + public function setAllowOverwrite(bool $allow): void { $this->allowOverwrite = $allow; } @@ -228,10 +207,8 @@ public function setAllowOverwrite(bool $allow) * Sets the closures used for normalization. * * @param \Closure[] $closures An array of Closures used for normalization - * - * @return void */ - public function setNormalizationClosures(array $closures) + public function setNormalizationClosures(array $closures): void { $this->normalizationClosures = $closures; } @@ -240,10 +217,8 @@ public function setNormalizationClosures(array $closures) * Sets the list of types supported by normalization. * * see ExprBuilder::TYPE_* constants. - * - * @return void */ - public function setNormalizedTypes(array $types) + public function setNormalizedTypes(array $types): void { $this->normalizedTypes = $types; } @@ -262,10 +237,8 @@ public function getNormalizedTypes(): array * Sets the closures used for final validation. * * @param \Closure[] $closures An array of Closures used for final validation - * - * @return void */ - public function setFinalValidationClosures(array $closures) + public function setFinalValidationClosures(array $closures): void { $this->finalValidationClosures = $closures; } @@ -442,11 +415,9 @@ final public function finalize(mixed $value): mixed /** * Validates the type of a Node. * - * @return void - * * @throws InvalidTypeException when the value is invalid */ - abstract protected function validateType(mixed $value); + abstract protected function validateType(mixed $value): void; /** * Normalizes the value. diff --git a/site/vendor/symfony/config/Definition/BooleanNode.php b/site/vendor/symfony/config/Definition/BooleanNode.php index 7ec903cd6..f6ab5bfb1 100644 --- a/site/vendor/symfony/config/Definition/BooleanNode.php +++ b/site/vendor/symfony/config/Definition/BooleanNode.php @@ -20,10 +20,7 @@ */ class BooleanNode extends ScalarNode { - /** - * @return void - */ - protected function validateType(mixed $value) + 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))); diff --git a/site/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php b/site/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php index 3ada5c550..0fae1a169 100644 --- a/site/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php +++ b/site/vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php @@ -23,21 +23,21 @@ */ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinitionInterface { - protected $performDeepMerging = true; - protected $ignoreExtraKeys = false; - protected $removeExtraKeys = true; - protected $children = []; - protected $prototype; - protected $atLeastOne = false; - protected $allowNewKeys = true; - protected $key; - protected $removeKeyItem; - protected $addDefaults = false; - protected $addDefaultChildren = false; - protected $nodeBuilder; - protected $normalizeKeys = true; - - public function __construct(?string $name, NodeParentInterface $parent = null) + protected bool $performDeepMerging = true; + protected bool $ignoreExtraKeys = false; + protected bool $removeExtraKeys = true; + protected array $children = []; + protected NodeDefinition $prototype; + protected bool $atLeastOne = false; + protected bool $allowNewKeys = true; + protected ?string $key = null; + protected bool $removeKeyItem = false; + protected bool $addDefaults = false; + protected int|string|array|null|false $addDefaultChildren = false; + protected NodeBuilder $nodeBuilder; + protected bool $normalizeKeys = true; + + public function __construct(?string $name, ?NodeParentInterface $parent = null) { parent::__construct($name, $parent); @@ -45,10 +45,7 @@ public function __construct(?string $name, NodeParentInterface $parent = null) $this->trueEquivalent = []; } - /** - * @return void - */ - public function setBuilder(NodeBuilder $builder) + public function setBuilder(NodeBuilder $builder): void { $this->nodeBuilder = $builder; } @@ -126,7 +123,7 @@ public function addDefaultsIfNotSet(): static * * @return $this */ - public function addDefaultChildrenIfNoneSet(int|string|array $children = null): static + public function addDefaultChildrenIfNoneSet(int|string|array|null $children = null): static { $this->addDefaultChildren = $children; @@ -169,7 +166,7 @@ public function disallowNewKeysInSubsequentConfigs(): static * * @return $this */ - public function fixXmlConfig(string $singular, string $plural = null): static + public function fixXmlConfig(string $singular, ?string $plural = null): static { $this->normalization()->remap($singular, $plural); @@ -425,11 +422,9 @@ protected function createNode(): NodeInterface /** * Validate the configuration of a concrete node. * - * @return void - * * @throws InvalidDefinitionException */ - protected function validateConcreteNode(ArrayNode $node) + protected function validateConcreteNode(ArrayNode $node): void { $path = $node->getPath(); @@ -457,11 +452,9 @@ protected function validateConcreteNode(ArrayNode $node) /** * Validate the configuration of a prototype node. * - * @return void - * * @throws InvalidDefinitionException */ - protected function validatePrototypeNode(PrototypedArrayNode $node) + protected function validatePrototypeNode(PrototypedArrayNode $node): void { $path = $node->getPath(); diff --git a/site/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php b/site/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php index 3d8fad4d5..15e63961a 100644 --- a/site/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php +++ b/site/vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php @@ -21,7 +21,7 @@ */ class BooleanNodeDefinition extends ScalarNodeDefinition { - public function __construct(?string $name, NodeParentInterface $parent = null) + public function __construct(?string $name, ?NodeParentInterface $parent = null) { parent::__construct($name, $parent); diff --git a/site/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php b/site/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php index bb40307e1..cf646a140 100644 --- a/site/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php +++ b/site/vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php @@ -20,8 +20,6 @@ interface BuilderAwareInterface { /** * Sets a custom children builder. - * - * @return void */ - public function setBuilder(NodeBuilder $builder); + public function setBuilder(NodeBuilder $builder): void; } diff --git a/site/vendor/symfony/config/Definition/Builder/ExprBuilder.php b/site/vendor/symfony/config/Definition/Builder/ExprBuilder.php index 9cb441481..3c33ef080 100644 --- a/site/vendor/symfony/config/Definition/Builder/ExprBuilder.php +++ b/site/vendor/symfony/config/Definition/Builder/ExprBuilder.php @@ -26,11 +26,11 @@ class ExprBuilder public const TYPE_NULL = 'null'; public const TYPE_ARRAY = 'array'; - protected $node; + public string $allowedTypes; + public ?\Closure $ifPart = null; + public ?\Closure $thenPart = null; - public $allowedTypes; - public $ifPart; - public $thenPart; + protected NodeDefinition $node; public function __construct(NodeDefinition $node) { @@ -42,7 +42,7 @@ public function __construct(NodeDefinition $node) * * @return $this */ - public function always(\Closure $then = null): static + public function always(?\Closure $then = null): static { $this->ifPart = static fn () => true; $this->allowedTypes = self::TYPE_ANY; @@ -61,7 +61,7 @@ public function always(\Closure $then = null): static * * @return $this */ - public function ifTrue(\Closure $closure = null): static + public function ifTrue(?\Closure $closure = null): static { $this->ifPart = $closure ?? static fn ($v) => true === $v; $this->allowedTypes = self::TYPE_ANY; diff --git a/site/vendor/symfony/config/Definition/Builder/MergeBuilder.php b/site/vendor/symfony/config/Definition/Builder/MergeBuilder.php index f8980a6e0..e22ed446a 100644 --- a/site/vendor/symfony/config/Definition/Builder/MergeBuilder.php +++ b/site/vendor/symfony/config/Definition/Builder/MergeBuilder.php @@ -18,9 +18,10 @@ */ class MergeBuilder { - protected $node; - public $allowFalse = false; - public $allowOverwrite = true; + public bool $allowFalse = false; + public bool $allowOverwrite = true; + + protected NodeDefinition $node; public function __construct(NodeDefinition $node) { diff --git a/site/vendor/symfony/config/Definition/Builder/NodeBuilder.php b/site/vendor/symfony/config/Definition/Builder/NodeBuilder.php index 7cda0bc7d..d79075a91 100644 --- a/site/vendor/symfony/config/Definition/Builder/NodeBuilder.php +++ b/site/vendor/symfony/config/Definition/Builder/NodeBuilder.php @@ -18,8 +18,8 @@ */ class NodeBuilder implements NodeParentInterface { - protected $parent; - protected $nodeMapping; + protected (NodeDefinition&ParentNodeDefinitionInterface)|null $parent = null; + protected array $nodeMapping; public function __construct() { @@ -39,11 +39,8 @@ public function __construct() * * @return $this */ - public function setParent(ParentNodeDefinitionInterface $parent = null): static + public function setParent((NodeDefinition&ParentNodeDefinitionInterface)|null $parent): static { - if (1 > \func_num_args()) { - trigger_deprecation('symfony/form', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__); - } $this->parent = $parent; return $this; @@ -107,10 +104,8 @@ public function variableNode(string $name): VariableNodeDefinition /** * Returns the parent node. - * - * @return NodeDefinition&ParentNodeDefinitionInterface */ - public function end() + public function end(): NodeDefinition&ParentNodeDefinitionInterface { return $this->parent; } diff --git a/site/vendor/symfony/config/Definition/Builder/NodeDefinition.php b/site/vendor/symfony/config/Definition/Builder/NodeDefinition.php index 2c93a0f7d..54e976e24 100644 --- a/site/vendor/symfony/config/Definition/Builder/NodeDefinition.php +++ b/site/vendor/symfony/config/Definition/Builder/NodeDefinition.php @@ -22,23 +22,23 @@ */ abstract class NodeDefinition implements NodeParentInterface { - protected $name; - protected $normalization; - protected $validation; - protected $defaultValue; - protected $default = false; - protected $required = false; - protected $deprecation = []; - protected $merge; - protected $allowEmptyValue = true; - protected $nullEquivalent; - protected $trueEquivalent = true; - protected $falseEquivalent = false; - protected $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR; - protected $parent; - protected $attributes = []; - - public function __construct(?string $name, NodeParentInterface $parent = null) + protected ?string $name = null; + protected NormalizationBuilder $normalization; + protected ValidationBuilder $validation; + protected mixed $defaultValue; + protected bool $default = false; + protected bool $required = false; + protected array $deprecation = []; + protected MergeBuilder $merge; + protected bool $allowEmptyValue = true; + protected mixed $nullEquivalent = null; + protected mixed $trueEquivalent = true; + protected mixed $falseEquivalent = false; + protected string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR; + protected NodeParentInterface|NodeInterface|null $parent; + protected array $attributes = []; + + public function __construct(?string $name, ?NodeParentInterface $parent = null) { $this->parent = $parent; $this->name = $name; @@ -90,8 +90,10 @@ public function attribute(string $key, mixed $value): static /** * Returns the parent node. + * + * @return NodeParentInterface|NodeBuilder|self|ArrayNodeDefinition|VariableNodeDefinition */ - public function end(): NodeParentInterface|NodeBuilder|self|ArrayNodeDefinition|VariableNodeDefinition|null + public function end(): NodeParentInterface { return $this->parent; } diff --git a/site/vendor/symfony/config/Definition/Builder/NormalizationBuilder.php b/site/vendor/symfony/config/Definition/Builder/NormalizationBuilder.php index 0e362d9fa..9ca02e1fa 100644 --- a/site/vendor/symfony/config/Definition/Builder/NormalizationBuilder.php +++ b/site/vendor/symfony/config/Definition/Builder/NormalizationBuilder.php @@ -18,10 +18,11 @@ */ class NormalizationBuilder { - protected $node; - public $before = []; - public $declaredTypes = []; - public $remappings = []; + public array $before = []; + public array $declaredTypes = []; + public array $remappings = []; + + protected NodeDefinition $node; public function __construct(NodeDefinition $node) { @@ -36,7 +37,7 @@ public function __construct(NodeDefinition $node) * * @return $this */ - public function remap(string $key, string $plural = null): static + public function remap(string $key, ?string $plural = null): static { $this->remappings[] = [$key, null === $plural ? $key.'s' : $plural]; @@ -48,7 +49,7 @@ public function remap(string $key, string $plural = null): static * * @return ExprBuilder|$this */ - public function before(\Closure $closure = null): ExprBuilder|static + public function before(?\Closure $closure = null): ExprBuilder|static { if (null !== $closure) { $this->before[] = $closure; diff --git a/site/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php b/site/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php index 890910c95..41129a2ff 100644 --- a/site/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php +++ b/site/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php @@ -20,8 +20,8 @@ */ abstract class NumericNodeDefinition extends ScalarNodeDefinition { - protected $min; - protected $max; + protected int|float|null $min = null; + protected int|float|null $max = null; /** * Ensures that the value is smaller than the given reference. diff --git a/site/vendor/symfony/config/Definition/Builder/TreeBuilder.php b/site/vendor/symfony/config/Definition/Builder/TreeBuilder.php index cdee55772..5170e19d1 100644 --- a/site/vendor/symfony/config/Definition/Builder/TreeBuilder.php +++ b/site/vendor/symfony/config/Definition/Builder/TreeBuilder.php @@ -20,17 +20,10 @@ */ class TreeBuilder implements NodeParentInterface { - /** - * @var NodeInterface|null - */ - protected $tree; + protected ?NodeInterface $tree = null; + protected ?NodeDefinition $root = null; - /** - * @var NodeDefinition - */ - protected $root; - - public function __construct(string $name, string $type = 'array', NodeBuilder $builder = null) + public function __construct(string $name, string $type = 'array', ?NodeBuilder $builder = null) { $builder ??= new NodeBuilder(); $this->root = $builder->node($name, $type)->setParent($this); @@ -54,10 +47,7 @@ public function buildTree(): NodeInterface return $this->tree ??= $this->root->getNode(true); } - /** - * @return void - */ - public function setPathSeparator(string $separator) + public function setPathSeparator(string $separator): void { // unset last built as changing path separator changes all nodes $this->tree = null; diff --git a/site/vendor/symfony/config/Definition/Builder/ValidationBuilder.php b/site/vendor/symfony/config/Definition/Builder/ValidationBuilder.php index 1bee851b6..88e089da1 100644 --- a/site/vendor/symfony/config/Definition/Builder/ValidationBuilder.php +++ b/site/vendor/symfony/config/Definition/Builder/ValidationBuilder.php @@ -18,8 +18,9 @@ */ class ValidationBuilder { - protected $node; - public $rules = []; + public array $rules = []; + + protected NodeDefinition $node; public function __construct(NodeDefinition $node) { @@ -31,7 +32,7 @@ public function __construct(NodeDefinition $node) * * @return ExprBuilder|$this */ - public function rule(\Closure $closure = null): ExprBuilder|static + public function rule(?\Closure $closure = null): ExprBuilder|static { if (null !== $closure) { $this->rules[] = $closure; diff --git a/site/vendor/symfony/config/Definition/ConfigurationInterface.php b/site/vendor/symfony/config/Definition/ConfigurationInterface.php index 7b5d443fe..97a325bb6 100644 --- a/site/vendor/symfony/config/Definition/ConfigurationInterface.php +++ b/site/vendor/symfony/config/Definition/ConfigurationInterface.php @@ -22,8 +22,6 @@ interface ConfigurationInterface { /** * Generates the configuration tree builder. - * - * @return TreeBuilder */ - public function getConfigTreeBuilder(); + public function getConfigTreeBuilder(): TreeBuilder; } diff --git a/site/vendor/symfony/config/Definition/Configurator/DefinitionConfigurator.php b/site/vendor/symfony/config/Definition/Configurator/DefinitionConfigurator.php index 006a444be..13fe45ca4 100644 --- a/site/vendor/symfony/config/Definition/Configurator/DefinitionConfigurator.php +++ b/site/vendor/symfony/config/Definition/Configurator/DefinitionConfigurator.php @@ -29,7 +29,7 @@ public function __construct( ) { } - public function import(string $resource, string $type = null, bool $ignoreErrors = false): void + public function import(string $resource, ?string $type = null, bool $ignoreErrors = false): void { $this->loader->setCurrentDir(\dirname($this->path)); $this->loader->import($resource, $type, $ignoreErrors, $this->file); diff --git a/site/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php b/site/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php index 34f93ce07..34584c43b 100644 --- a/site/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php +++ b/site/vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php @@ -31,18 +31,12 @@ class XmlReferenceDumper { private ?string $reference = null; - /** - * @return string - */ - public function dump(ConfigurationInterface $configuration, string $namespace = null) + public function dump(ConfigurationInterface $configuration, ?string $namespace = null): string { return $this->dumpNode($configuration->getConfigTreeBuilder()->buildTree(), $namespace); } - /** - * @return string - */ - public function dumpNode(NodeInterface $node, string $namespace = null) + public function dumpNode(NodeInterface $node, ?string $namespace = null): string { $this->reference = ''; $this->writeNode($node, 0, true, $namespace); @@ -52,7 +46,7 @@ public function dumpNode(NodeInterface $node, string $namespace = null) return $ref; } - private function writeNode(NodeInterface $node, int $depth = 0, bool $root = false, string $namespace = null): void + private function writeNode(NodeInterface $node, int $depth = 0, bool $root = false, ?string $namespace = null): void { $rootName = ($root ? 'config' : $node->getName()); $rootNamespace = ($namespace ?: ($root ? 'http://example.org/schema/dic/'.$node->getName() : null)); diff --git a/site/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php b/site/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php index 97a391ada..4f720aa97 100644 --- a/site/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php +++ b/site/vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php @@ -30,18 +30,12 @@ class YamlReferenceDumper { private ?string $reference = null; - /** - * @return string - */ - public function dump(ConfigurationInterface $configuration) + public function dump(ConfigurationInterface $configuration): string { return $this->dumpNode($configuration->getConfigTreeBuilder()->buildTree()); } - /** - * @return string - */ - public function dumpAtPath(ConfigurationInterface $configuration, string $path) + public function dumpAtPath(ConfigurationInterface $configuration, string $path): string { $rootNode = $node = $configuration->getConfigTreeBuilder()->buildTree(); @@ -67,10 +61,7 @@ public function dumpAtPath(ConfigurationInterface $configuration, string $path) return $this->dumpNode($node); } - /** - * @return string - */ - public function dumpNode(NodeInterface $node) + public function dumpNode(NodeInterface $node): string { $this->reference = ''; $this->writeNode($node); @@ -80,7 +71,7 @@ public function dumpNode(NodeInterface $node) return $ref; } - private function writeNode(NodeInterface $node, NodeInterface $parentNode = null, int $depth = 0, bool $prototypedArray = false): void + private function writeNode(NodeInterface $node, ?NodeInterface $parentNode = null, int $depth = 0, bool $prototypedArray = false): void { $comments = []; $default = ''; diff --git a/site/vendor/symfony/config/Definition/EnumNode.php b/site/vendor/symfony/config/Definition/EnumNode.php index 4edeae904..29fe0bdfb 100644 --- a/site/vendor/symfony/config/Definition/EnumNode.php +++ b/site/vendor/symfony/config/Definition/EnumNode.php @@ -22,7 +22,7 @@ class EnumNode extends ScalarNode { private array $values; - public function __construct(?string $name, NodeInterface $parent = null, array $values = [], string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR) + public function __construct(?string $name, ?NodeInterface $parent = null, array $values = [], string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR) { if (!$values) { throw new \InvalidArgumentException('$values must contain at least one element.'); @@ -46,10 +46,7 @@ public function __construct(?string $name, NodeInterface $parent = null, array $ $this->values = $values; } - /** - * @return array - */ - public function getValues() + public function getValues(): array { return $this->values; } @@ -68,10 +65,7 @@ public function getPermissibleValues(string $separator): string }, $this->values))); } - /** - * @return void - */ - protected function validateType(mixed $value) + protected function validateType(mixed $value): void { if ($value instanceof \UnitEnum) { return; diff --git a/site/vendor/symfony/config/Definition/Exception/InvalidConfigurationException.php b/site/vendor/symfony/config/Definition/Exception/InvalidConfigurationException.php index 794447bf8..e3f29f8e6 100644 --- a/site/vendor/symfony/config/Definition/Exception/InvalidConfigurationException.php +++ b/site/vendor/symfony/config/Definition/Exception/InvalidConfigurationException.php @@ -22,10 +22,7 @@ class InvalidConfigurationException extends Exception private ?string $path = null; private bool $containsHints = false; - /** - * @return void - */ - public function setPath(string $path) + public function setPath(string $path): void { $this->path = $path; } @@ -37,10 +34,8 @@ public function getPath(): ?string /** * Adds extra information that is suffixed to the original exception message. - * - * @return void */ - public function addHint(string $hint) + public function addHint(string $hint): void { if (!$this->containsHints) { $this->message .= "\nHint: ".$hint; diff --git a/site/vendor/symfony/config/Definition/FloatNode.php b/site/vendor/symfony/config/Definition/FloatNode.php index ce4193e09..1023a1674 100644 --- a/site/vendor/symfony/config/Definition/FloatNode.php +++ b/site/vendor/symfony/config/Definition/FloatNode.php @@ -20,10 +20,7 @@ */ class FloatNode extends NumericNode { - /** - * @return void - */ - protected function validateType(mixed $value) + protected function validateType(mixed $value): void { // Integers are also accepted, we just cast them if (\is_int($value)) { diff --git a/site/vendor/symfony/config/Definition/IntegerNode.php b/site/vendor/symfony/config/Definition/IntegerNode.php index 4a3e3253c..3fe70f621 100644 --- a/site/vendor/symfony/config/Definition/IntegerNode.php +++ b/site/vendor/symfony/config/Definition/IntegerNode.php @@ -20,10 +20,7 @@ */ class IntegerNode extends NumericNode { - /** - * @return void - */ - protected function validateType(mixed $value) + 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))); diff --git a/site/vendor/symfony/config/Definition/Loader/DefinitionFileLoader.php b/site/vendor/symfony/config/Definition/Loader/DefinitionFileLoader.php index 506f787ca..940b894f7 100644 --- a/site/vendor/symfony/config/Definition/Loader/DefinitionFileLoader.php +++ b/site/vendor/symfony/config/Definition/Loader/DefinitionFileLoader.php @@ -34,7 +34,7 @@ public function __construct( parent::__construct($locator); } - public function load(mixed $resource, string $type = null): mixed + public function load(mixed $resource, ?string $type = null): mixed { // the loader variable is exposed to the included file below $loader = $this; @@ -57,7 +57,7 @@ public function load(mixed $resource, string $type = null): mixed return null; } - public function supports(mixed $resource, string $type = null): bool + public function supports(mixed $resource, ?string $type = null): bool { if (!\is_string($resource)) { return false; diff --git a/site/vendor/symfony/config/Definition/NumericNode.php b/site/vendor/symfony/config/Definition/NumericNode.php index da32b843a..b55ee922b 100644 --- a/site/vendor/symfony/config/Definition/NumericNode.php +++ b/site/vendor/symfony/config/Definition/NumericNode.php @@ -20,10 +20,10 @@ */ class NumericNode extends ScalarNode { - protected $min; - protected $max; + protected int|float|null $min; + protected int|float|null $max; - public function __construct(?string $name, NodeInterface $parent = null, int|float $min = null, int|float $max = null, string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR) + public function __construct(?string $name, ?NodeInterface $parent = null, int|float|null $min = null, int|float|null $max = null, string $pathSeparator = BaseNode::DEFAULT_PATH_SEPARATOR) { parent::__construct($name, $parent, $pathSeparator); $this->min = $min; diff --git a/site/vendor/symfony/config/Definition/Processor.php b/site/vendor/symfony/config/Definition/Processor.php index dc3d4c69b..272ddcc44 100644 --- a/site/vendor/symfony/config/Definition/Processor.php +++ b/site/vendor/symfony/config/Definition/Processor.php @@ -67,7 +67,7 @@ public function processConfiguration(ConfigurationInterface $configuration, arra * @param string $key The key to normalize * @param string|null $plural The plural form of the key if it is irregular */ - public static function normalizeConfig(array $config, string $key, string $plural = null): array + public static function normalizeConfig(array $config, string $key, ?string $plural = null): array { $plural ??= $key.'s'; diff --git a/site/vendor/symfony/config/Definition/PrototypeNodeInterface.php b/site/vendor/symfony/config/Definition/PrototypeNodeInterface.php index 9dce7444b..109889f37 100644 --- a/site/vendor/symfony/config/Definition/PrototypeNodeInterface.php +++ b/site/vendor/symfony/config/Definition/PrototypeNodeInterface.php @@ -20,8 +20,6 @@ interface PrototypeNodeInterface extends NodeInterface { /** * Sets the name of the node. - * - * @return void */ - public function setName(string $name); + public function setName(string $name): void; } diff --git a/site/vendor/symfony/config/Definition/PrototypedArrayNode.php b/site/vendor/symfony/config/Definition/PrototypedArrayNode.php index c105ac1f3..a11e72638 100644 --- a/site/vendor/symfony/config/Definition/PrototypedArrayNode.php +++ b/site/vendor/symfony/config/Definition/PrototypedArrayNode.php @@ -23,12 +23,12 @@ */ class PrototypedArrayNode extends ArrayNode { - protected $prototype; - protected $keyAttribute; - protected $removeKeyAttribute = false; - protected $minNumberOfElements = 0; - protected $defaultValue = []; - protected $defaultChildren; + protected PrototypeNodeInterface $prototype; + protected ?string $keyAttribute = null; + protected bool $removeKeyAttribute = false; + protected int $minNumberOfElements = 0; + protected array $defaultValue = []; + protected ?array $defaultChildren = null; /** * @var NodeInterface[] An array of the prototypes of the simplified value children */ @@ -37,10 +37,8 @@ class PrototypedArrayNode extends ArrayNode /** * Sets the minimum number of elements that a prototype based node must * contain. By default this is zero, meaning no elements. - * - * @return void */ - public function setMinNumberOfElements(int $number) + public function setMinNumberOfElements(int $number): void { $this->minNumberOfElements = $number; } @@ -68,10 +66,8 @@ public function setMinNumberOfElements(int $number) * * @param string $attribute The name of the attribute which value is to be used as a key * @param bool $remove Whether or not to remove the key - * - * @return void */ - public function setKeyAttribute(string $attribute, bool $remove = true) + public function setKeyAttribute(string $attribute, bool $remove = true): void { $this->keyAttribute = $attribute; $this->removeKeyAttribute = $remove; @@ -87,10 +83,8 @@ public function getKeyAttribute(): ?string /** * Sets the default value of this node. - * - * @return void */ - public function setDefaultValue(array $value) + public function setDefaultValue(array $value): void { $this->defaultValue = $value; } @@ -104,10 +98,8 @@ public function hasDefaultValue(): bool * Adds default children when none are set. * * @param int|string|array|null $children The number of children|The child name|The children names to be added - * - * @return void */ - public function setAddChildrenIfNoneSet(int|string|array|null $children = ['defaults']) + public function setAddChildrenIfNoneSet(int|string|array|null $children = ['defaults']): void { if (null === $children) { $this->defaultChildren = ['defaults']; @@ -137,10 +129,8 @@ public function getDefaultValue(): mixed /** * Sets the node prototype. - * - * @return void */ - public function setPrototype(PrototypeNodeInterface $node) + public function setPrototype(PrototypeNodeInterface $node): void { $this->prototype = $node; } @@ -156,11 +146,9 @@ public function getPrototype(): PrototypeNodeInterface /** * Disable adding concrete children for prototyped nodes. * - * @return never - * * @throws Exception */ - public function addChild(NodeInterface $node) + public function addChild(NodeInterface $node): never { throw new Exception('A prototyped array node cannot have concrete children.'); } diff --git a/site/vendor/symfony/config/Definition/ScalarNode.php b/site/vendor/symfony/config/Definition/ScalarNode.php index e11fa1ee1..a7ccb917c 100644 --- a/site/vendor/symfony/config/Definition/ScalarNode.php +++ b/site/vendor/symfony/config/Definition/ScalarNode.php @@ -27,10 +27,7 @@ */ class ScalarNode extends VariableNode { - /** - * @return void - */ - protected function validateType(mixed $value) + 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))); diff --git a/site/vendor/symfony/config/Definition/VariableNode.php b/site/vendor/symfony/config/Definition/VariableNode.php index 6bdc65b4e..a4fbace8e 100644 --- a/site/vendor/symfony/config/Definition/VariableNode.php +++ b/site/vendor/symfony/config/Definition/VariableNode.php @@ -23,14 +23,11 @@ */ class VariableNode extends BaseNode implements PrototypeNodeInterface { - protected $defaultValueSet = false; - protected $defaultValue; - protected $allowEmptyValue = true; + protected bool $defaultValueSet = false; + protected mixed $defaultValue = null; + protected bool $allowEmptyValue = true; - /** - * @return void - */ - public function setDefaultValue(mixed $value) + public function setDefaultValue(mixed $value): void { $this->defaultValueSet = true; $this->defaultValue = $value; @@ -52,26 +49,18 @@ public function getDefaultValue(): mixed * Sets if this node is allowed to have an empty value. * * @param bool $boolean True if this entity will accept empty values - * - * @return void */ - public function setAllowEmptyValue(bool $boolean) + public function setAllowEmptyValue(bool $boolean): void { $this->allowEmptyValue = $boolean; } - /** - * @return void - */ - public function setName(string $name) + public function setName(string $name): void { $this->name = $name; } - /** - * @return void - */ - protected function validateType(mixed $value) + protected function validateType(mixed $value): void { } diff --git a/site/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php b/site/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php index da0b55ba8..2d2a4de00 100644 --- a/site/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php +++ b/site/vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php @@ -18,7 +18,7 @@ */ class FileLoaderImportCircularReferenceException extends LoaderLoadException { - public function __construct(array $resources, int $code = 0, \Throwable $previous = null) + 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]); diff --git a/site/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php b/site/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php index c5173ae58..5641a3145 100644 --- a/site/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php +++ b/site/vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php @@ -20,17 +20,14 @@ 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, array $paths = []) { parent::__construct($message, $code, $previous); $this->paths = $paths; } - /** - * @return array - */ - public function getPaths() + public function getPaths(): array { return $this->paths; } diff --git a/site/vendor/symfony/config/Exception/LoaderLoadException.php b/site/vendor/symfony/config/Exception/LoaderLoadException.php index 57afd6a8d..a2d5e33c7 100644 --- a/site/vendor/symfony/config/Exception/LoaderLoadException.php +++ b/site/vendor/symfony/config/Exception/LoaderLoadException.php @@ -25,7 +25,7 @@ class LoaderLoadException extends \Exception * @param \Throwable|null $previous A previous exception * @param string|null $type The type of resource */ - public function __construct(mixed $resource, string $sourceResource = null, int $code = 0, \Throwable $previous = null, string $type = null) + public function __construct(mixed $resource, ?string $sourceResource = null, int $code = 0, ?\Throwable $previous = null, ?string $type = null) { if (!\is_string($resource)) { try { @@ -76,10 +76,7 @@ public function __construct(mixed $resource, string $sourceResource = null, int parent::__construct($message, $code, $previous); } - /** - * @return string - */ - protected function varToString(mixed $var) + protected function varToString(mixed $var): string { if (\is_object($var)) { return sprintf('Object(%s)', $var::class); diff --git a/site/vendor/symfony/config/FileLocator.php b/site/vendor/symfony/config/FileLocator.php index e147d9b1a..bf800694b 100644 --- a/site/vendor/symfony/config/FileLocator.php +++ b/site/vendor/symfony/config/FileLocator.php @@ -20,7 +20,7 @@ */ class FileLocator implements FileLocatorInterface { - protected $paths; + protected array $paths; /** * @param string|string[] $paths A path or an array of paths where to look for resources @@ -31,9 +31,11 @@ public function __construct(string|array $paths = []) } /** - * @return string|array + * @return string|string[] + * + * @psalm-return ($first is true ? string : string[]) */ - public function locate(string $name, string $currentPath = null, bool $first = true) + public function locate(string $name, ?string $currentPath = null, bool $first = true): string|array { if ('' === $name) { throw new \InvalidArgumentException('An empty file name is not valid to be located.'); diff --git a/site/vendor/symfony/config/FileLocatorInterface.php b/site/vendor/symfony/config/FileLocatorInterface.php index e3ca1d49c..87cecf477 100644 --- a/site/vendor/symfony/config/FileLocatorInterface.php +++ b/site/vendor/symfony/config/FileLocatorInterface.php @@ -25,10 +25,12 @@ interface FileLocatorInterface * @param string|null $currentPath The current path * @param bool $first Whether to return the first occurrence or an array of filenames * - * @return string|array The full path to the file or an array of file paths + * @return string|string[] The full path to the file or an array of file paths * * @throws \InvalidArgumentException If $name is empty * @throws FileLocatorFileNotFoundException If a file is not found + * + * @psalm-return ($first is true ? string : string[]) */ - public function locate(string $name, string $currentPath = null, bool $first = true); + public function locate(string $name, ?string $currentPath = null, bool $first = true): string|array; } diff --git a/site/vendor/symfony/config/Loader/DelegatingLoader.php b/site/vendor/symfony/config/Loader/DelegatingLoader.php index fac3724e9..045a559e2 100644 --- a/site/vendor/symfony/config/Loader/DelegatingLoader.php +++ b/site/vendor/symfony/config/Loader/DelegatingLoader.php @@ -28,7 +28,7 @@ public function __construct(LoaderResolverInterface $resolver) $this->resolver = $resolver; } - public function load(mixed $resource, string $type = null): mixed + public function load(mixed $resource, ?string $type = null): mixed { if (false === $loader = $this->resolver->resolve($resource, $type)) { throw new LoaderLoadException($resource, null, 0, null, $type); @@ -37,7 +37,7 @@ public function load(mixed $resource, string $type = null): mixed return $loader->load($resource, $type); } - public function supports(mixed $resource, string $type = null): bool + public function supports(mixed $resource, ?string $type = null): bool { return false !== $this->resolver->resolve($resource, $type); } diff --git a/site/vendor/symfony/config/Loader/FileLoader.php b/site/vendor/symfony/config/Loader/FileLoader.php index 8cfaa23ba..c217cd85b 100644 --- a/site/vendor/symfony/config/Loader/FileLoader.php +++ b/site/vendor/symfony/config/Loader/FileLoader.php @@ -25,13 +25,13 @@ */ abstract class FileLoader extends Loader { - protected static $loading = []; + protected static array $loading = []; - protected $locator; + protected FileLocatorInterface $locator; private ?string $currentDir = null; - public function __construct(FileLocatorInterface $locator, string $env = null) + public function __construct(FileLocatorInterface $locator, ?string $env = null) { $this->locator = $locator; parent::__construct($env); @@ -39,10 +39,8 @@ public function __construct(FileLocatorInterface $locator, string $env = null) /** * Sets the current directory. - * - * @return void */ - public function setCurrentDir(string $dir) + public function setCurrentDir(string $dir): void { $this->currentDir = $dir; } @@ -64,13 +62,11 @@ public function getLocator(): FileLocatorInterface * @param string|null $sourceResource The original resource importing the new resource * @param string|string[]|null $exclude Glob patterns to exclude from the import * - * @return mixed - * * @throws LoaderLoadException * @throws FileLoaderImportCircularReferenceException * @throws FileLocatorFileNotFoundException */ - public function import(mixed $resource, string $type = null, bool $ignoreErrors = false, string $sourceResource = null, string|array $exclude = null) + public function import(mixed $resource, ?string $type = null, bool $ignoreErrors = false, ?string $sourceResource = null, string|array|null $exclude = null): mixed { if (\is_string($resource) && \strlen($resource) !== ($i = strcspn($resource, '*?{[')) && !str_contains($resource, "\n")) { $excluded = []; @@ -101,7 +97,7 @@ public function import(mixed $resource, string $type = null, bool $ignoreErrors /** * @internal */ - protected function glob(string $pattern, bool $recursive, array|GlobResource &$resource = null, bool $ignoreErrors = false, bool $forExclusion = false, array $excluded = []): iterable + protected function glob(string $pattern, bool $recursive, array|GlobResource|null &$resource = null, bool $ignoreErrors = false, bool $forExclusion = false, array $excluded = []): iterable { if (\strlen($pattern) === $i = strcspn($pattern, '*?{[')) { $prefix = $pattern; @@ -133,7 +129,7 @@ protected function glob(string $pattern, bool $recursive, array|GlobResource &$r yield from $resource; } - private function doImport(mixed $resource, string $type = null, bool $ignoreErrors = false, string $sourceResource = null): mixed + private function doImport(mixed $resource, ?string $type = null, bool $ignoreErrors = false, ?string $sourceResource = null): mixed { try { $loader = $this->resolve($resource, $type); diff --git a/site/vendor/symfony/config/Loader/GlobFileLoader.php b/site/vendor/symfony/config/Loader/GlobFileLoader.php index f921ec555..31eebf69d 100644 --- a/site/vendor/symfony/config/Loader/GlobFileLoader.php +++ b/site/vendor/symfony/config/Loader/GlobFileLoader.php @@ -18,12 +18,12 @@ */ class GlobFileLoader extends FileLoader { - public function load(mixed $resource, string $type = null): mixed + public function load(mixed $resource, ?string $type = null): mixed { return $this->import($resource); } - public function supports(mixed $resource, string $type = null): bool + public function supports(mixed $resource, ?string $type = null): bool { return 'glob' === $type; } diff --git a/site/vendor/symfony/config/Loader/Loader.php b/site/vendor/symfony/config/Loader/Loader.php index 36e85ad34..ad1c80932 100644 --- a/site/vendor/symfony/config/Loader/Loader.php +++ b/site/vendor/symfony/config/Loader/Loader.php @@ -20,10 +20,10 @@ */ abstract class Loader implements LoaderInterface { - protected $resolver; - protected $env; + protected LoaderResolverInterface $resolver; + protected ?string $env; - public function __construct(string $env = null) + public function __construct(?string $env = null) { $this->env = $env; } @@ -33,20 +33,15 @@ public function getResolver(): LoaderResolverInterface return $this->resolver; } - /** - * @return void - */ - public function setResolver(LoaderResolverInterface $resolver) + public function setResolver(LoaderResolverInterface $resolver): void { $this->resolver = $resolver; } /** * Imports a resource. - * - * @return mixed */ - public function import(mixed $resource, string $type = null) + public function import(mixed $resource, ?string $type = null): mixed { return $this->resolve($resource, $type)->load($resource, $type); } @@ -56,7 +51,7 @@ public function import(mixed $resource, string $type = null) * * @throws LoaderLoadException If no loader is found */ - public function resolve(mixed $resource, string $type = null): LoaderInterface + public function resolve(mixed $resource, ?string $type = null): LoaderInterface { if ($this->supports($resource, $type)) { return $this; diff --git a/site/vendor/symfony/config/Loader/LoaderInterface.php b/site/vendor/symfony/config/Loader/LoaderInterface.php index 4e0746d4d..6ed1893a5 100644 --- a/site/vendor/symfony/config/Loader/LoaderInterface.php +++ b/site/vendor/symfony/config/Loader/LoaderInterface.php @@ -21,32 +21,24 @@ interface LoaderInterface /** * Loads a resource. * - * @return mixed - * * @throws \Exception If something went wrong */ - public function load(mixed $resource, string $type = null); + public function load(mixed $resource, ?string $type = null): mixed; /** * Returns whether this class supports the given resource. * * @param mixed $resource A resource - * - * @return bool */ - public function supports(mixed $resource, string $type = null); + public function supports(mixed $resource, ?string $type = null): bool; /** * Gets the loader resolver. - * - * @return LoaderResolverInterface */ - public function getResolver(); + public function getResolver(): LoaderResolverInterface; /** * Sets the loader resolver. - * - * @return void */ - public function setResolver(LoaderResolverInterface $resolver); + public function setResolver(LoaderResolverInterface $resolver): void; } diff --git a/site/vendor/symfony/config/Loader/LoaderResolver.php b/site/vendor/symfony/config/Loader/LoaderResolver.php index 670e32012..8308d7e89 100644 --- a/site/vendor/symfony/config/Loader/LoaderResolver.php +++ b/site/vendor/symfony/config/Loader/LoaderResolver.php @@ -36,7 +36,7 @@ public function __construct(array $loaders = []) } } - public function resolve(mixed $resource, string $type = null): LoaderInterface|false + public function resolve(mixed $resource, ?string $type = null): LoaderInterface|false { foreach ($this->loaders as $loader) { if ($loader->supports($resource, $type)) { @@ -47,10 +47,7 @@ public function resolve(mixed $resource, string $type = null): LoaderInterface|f return false; } - /** - * @return void - */ - public function addLoader(LoaderInterface $loader) + public function addLoader(LoaderInterface $loader): void { $this->loaders[] = $loader; $loader->setResolver($this); diff --git a/site/vendor/symfony/config/Loader/LoaderResolverInterface.php b/site/vendor/symfony/config/Loader/LoaderResolverInterface.php index 076c5207c..a8bb3a437 100644 --- a/site/vendor/symfony/config/Loader/LoaderResolverInterface.php +++ b/site/vendor/symfony/config/Loader/LoaderResolverInterface.php @@ -23,5 +23,5 @@ interface LoaderResolverInterface * * @param string|null $type The resource type or null if unknown */ - public function resolve(mixed $resource, string $type = null): LoaderInterface|false; + public function resolve(mixed $resource, ?string $type = null): LoaderInterface|false; } diff --git a/site/vendor/symfony/config/Resource/ClassExistenceResource.php b/site/vendor/symfony/config/Resource/ClassExistenceResource.php index cae3877ad..eab04b8d0 100644 --- a/site/vendor/symfony/config/Resource/ClassExistenceResource.php +++ b/site/vendor/symfony/config/Resource/ClassExistenceResource.php @@ -34,7 +34,7 @@ class ClassExistenceResource implements SelfCheckingResourceInterface * @param string $resource The fully-qualified class name * @param bool|null $exists Boolean when the existence check has already been done */ - public function __construct(string $resource, bool $exists = null) + public function __construct(string $resource, ?bool $exists = null) { $this->resource = $resource; if (null !== $exists) { @@ -139,7 +139,7 @@ public function __wakeup(): void * * @internal */ - public static function throwOnRequiredClass(string $class, \Exception $previous = null): void + public static function throwOnRequiredClass(string $class, ?\Exception $previous = null): void { // If the passed class is the resource being checked, we shouldn't throw. if (null === $previous && self::$autoloadedClass === $class) { diff --git a/site/vendor/symfony/config/Resource/DirectoryResource.php b/site/vendor/symfony/config/Resource/DirectoryResource.php index 7560cd3b3..df486a085 100644 --- a/site/vendor/symfony/config/Resource/DirectoryResource.php +++ b/site/vendor/symfony/config/Resource/DirectoryResource.php @@ -29,7 +29,7 @@ class DirectoryResource implements SelfCheckingResourceInterface * * @throws \InvalidArgumentException */ - public function __construct(string $resource, string $pattern = null) + public function __construct(string $resource, ?string $pattern = null) { $resolvedResource = realpath($resource) ?: (file_exists($resource) ? $resource : false); $this->pattern = $pattern; diff --git a/site/vendor/symfony/config/Resource/ReflectionClassResource.php b/site/vendor/symfony/config/Resource/ReflectionClassResource.php index dbd47e66d..dbc927b59 100644 --- a/site/vendor/symfony/config/Resource/ReflectionClassResource.php +++ b/site/vendor/symfony/config/Resource/ReflectionClassResource.php @@ -12,7 +12,6 @@ namespace Symfony\Component\Config\Resource; use Symfony\Component\EventDispatcher\EventSubscriberInterface; -use Symfony\Component\Messenger\Handler\MessageSubscriberInterface; use Symfony\Contracts\Service\ServiceSubscriberInterface; /** @@ -191,13 +190,6 @@ private function generateSignature(\ReflectionClass $class): iterable yield print_r($class->name::getSubscribedEvents(), true); } - if (interface_exists(MessageSubscriberInterface::class, false) && $class->isSubclassOf(MessageSubscriberInterface::class)) { - yield MessageSubscriberInterface::class; - foreach ($class->name::getHandledMessages() as $key => $value) { - yield $key.print_r($value, true); - } - } - if (interface_exists(ServiceSubscriberInterface::class, false) && $class->isSubclassOf(ServiceSubscriberInterface::class)) { yield ServiceSubscriberInterface::class; yield print_r($class->name::getSubscribedServices(), true); diff --git a/site/vendor/symfony/config/ResourceCheckerConfigCache.php b/site/vendor/symfony/config/ResourceCheckerConfigCache.php index a8478a8cc..0070c4f74 100644 --- a/site/vendor/symfony/config/ResourceCheckerConfigCache.php +++ b/site/vendor/symfony/config/ResourceCheckerConfigCache.php @@ -105,11 +105,9 @@ public function isFresh(): bool * @param string $content The content to write in the cache * @param ResourceInterface[] $metadata An array of metadata * - * @return void - * * @throws \RuntimeException When cache file can't be written */ - public function write(string $content, array $metadata = null) + public function write(string $content, ?array $metadata = null): void { $mode = 0666; $umask = umask(); diff --git a/site/vendor/symfony/config/ResourceCheckerInterface.php b/site/vendor/symfony/config/ResourceCheckerInterface.php index 6b1c6c5fb..13ae03f45 100644 --- a/site/vendor/symfony/config/ResourceCheckerInterface.php +++ b/site/vendor/symfony/config/ResourceCheckerInterface.php @@ -29,17 +29,13 @@ interface ResourceCheckerInterface /** * Queries the ResourceChecker whether it can validate a given * resource or not. - * - * @return bool */ - public function supports(ResourceInterface $metadata); + public function supports(ResourceInterface $metadata): bool; /** * Validates the resource. * * @param int $timestamp The timestamp at which the cache associated with this resource was created - * - * @return bool */ - public function isFresh(ResourceInterface $resource, int $timestamp); + public function isFresh(ResourceInterface $resource, int $timestamp): bool; } diff --git a/site/vendor/symfony/config/Util/XmlUtils.php b/site/vendor/symfony/config/Util/XmlUtils.php index cc024da46..d86a5823a 100644 --- a/site/vendor/symfony/config/Util/XmlUtils.php +++ b/site/vendor/symfony/config/Util/XmlUtils.php @@ -42,7 +42,7 @@ private function __construct() * @throws InvalidXmlException When parsing of XML with schema or callable produces any errors unrelated to the XML parsing itself * @throws \RuntimeException When DOM extension is missing */ - public static function parse(string $content, string|callable $schemaOrCallable = null): \DOMDocument + public static function parse(string $content, string|callable|null $schemaOrCallable = null): \DOMDocument { if (!\extension_loaded('dom')) { throw new \LogicException('Extension DOM is required.'); @@ -112,7 +112,7 @@ public static function parse(string $content, string|callable $schemaOrCallable * @throws XmlParsingException When XML parsing returns any errors * @throws \RuntimeException When DOM extension is missing */ - public static function loadFile(string $file, string|callable $schemaOrCallable = null): \DOMDocument + 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)); @@ -238,10 +238,7 @@ public static function phpize(string|\Stringable $value): mixed } } - /** - * @return array - */ - protected static function getXmlErrors(bool $internalErrors) + protected static function getXmlErrors(bool $internalErrors): array { $errors = []; foreach (libxml_get_errors() as $error) { diff --git a/site/vendor/symfony/config/composer.json b/site/vendor/symfony/config/composer.json index dbd34f13b..47adca28d 100644 --- a/site/vendor/symfony/config/composer.json +++ b/site/vendor/symfony/config/composer.json @@ -16,20 +16,20 @@ } ], "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^5.4|^6.0|^7.0", + "symfony/filesystem": "^6.4|^7.0", "symfony/polyfill-ctype": "~1.8" }, "require-dev": { - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "conflict": { - "symfony/finder": "<5.4", + "symfony/finder": "<6.4", "symfony/service-contracts": "<2.5" }, "autoload": { diff --git a/site/vendor/symfony/filesystem/Exception/FileNotFoundException.php b/site/vendor/symfony/filesystem/Exception/FileNotFoundException.php index 48b640809..06b732b16 100644 --- a/site/vendor/symfony/filesystem/Exception/FileNotFoundException.php +++ b/site/vendor/symfony/filesystem/Exception/FileNotFoundException.php @@ -19,7 +19,7 @@ */ class FileNotFoundException extends IOException { - public function __construct(string $message = null, int $code = 0, \Throwable $previous = null, string $path = null) + public function __construct(?string $message = null, int $code = 0, ?\Throwable $previous = null, ?string $path = null) { if (null === $message) { if (null === $path) { diff --git a/site/vendor/symfony/filesystem/Exception/IOException.php b/site/vendor/symfony/filesystem/Exception/IOException.php index a3c544553..df3a0850a 100644 --- a/site/vendor/symfony/filesystem/Exception/IOException.php +++ b/site/vendor/symfony/filesystem/Exception/IOException.php @@ -22,7 +22,7 @@ class IOException extends \RuntimeException implements IOExceptionInterface { private ?string $path; - public function __construct(string $message, int $code = 0, \Throwable $previous = null, string $path = null) + public function __construct(string $message, int $code = 0, ?\Throwable $previous = null, ?string $path = null) { $this->path = $path; diff --git a/site/vendor/symfony/filesystem/Filesystem.php b/site/vendor/symfony/filesystem/Filesystem.php index e8ba4958d..b7fc70118 100644 --- a/site/vendor/symfony/filesystem/Filesystem.php +++ b/site/vendor/symfony/filesystem/Filesystem.php @@ -125,7 +125,7 @@ public function exists(string|iterable $files): bool * * @throws IOException When touch fails */ - public function touch(string|iterable $files, int $time = null, int $atime = null): void + public function touch(string|iterable $files, ?int $time = null, ?int $atime = null): void { foreach ($this->toIterable($files) as $file) { if (!($time ? self::box('touch', $file, $time, $atime) : self::box('touch', $file))) { @@ -508,7 +508,7 @@ public function makePathRelative(string $endPath, string $startPath): string * * @throws IOException When file type is unknown */ - public function mirror(string $originDir, string $targetDir, \Traversable $iterator = null, array $options = []): void + public function mirror(string $originDir, string $targetDir, ?\Traversable $iterator = null, array $options = []): void { $targetDir = rtrim($targetDir, '/\\'); $originDir = rtrim($originDir, '/\\'); diff --git a/site/vendor/symfony/filesystem/Path.php b/site/vendor/symfony/filesystem/Path.php index 664396235..01b561724 100644 --- a/site/vendor/symfony/filesystem/Path.php +++ b/site/vendor/symfony/filesystem/Path.php @@ -254,7 +254,7 @@ public static function getRoot(string $path): string * @param string|null $extension if specified, only that extension is cut * off (may contain leading dot) */ - public static function getFilenameWithoutExtension(string $path, string $extension = null): string + public static function getFilenameWithoutExtension(string $path, ?string $extension = null): string { if ('' === $path) { return ''; diff --git a/site/vendor/symfony/translation/CHANGELOG.md b/site/vendor/symfony/translation/CHANGELOG.md index 5f9098c07..c06a18366 100644 --- a/site/vendor/symfony/translation/CHANGELOG.md +++ b/site/vendor/symfony/translation/CHANGELOG.md @@ -1,6 +1,12 @@ CHANGELOG ========= +7.0 +--- + + * Remove `PhpStringTokenParser` + * Remove `PhpExtractor` in favor of `PhpAstExtractor` + 6.4 --- diff --git a/site/vendor/symfony/translation/Catalogue/AbstractOperation.php b/site/vendor/symfony/translation/Catalogue/AbstractOperation.php index 7dff58ff4..559d3a5d2 100644 --- a/site/vendor/symfony/translation/Catalogue/AbstractOperation.php +++ b/site/vendor/symfony/translation/Catalogue/AbstractOperation.php @@ -30,9 +30,9 @@ abstract class AbstractOperation implements OperationInterface public const NEW_BATCH = 'new'; public const ALL_BATCH = 'all'; - protected $source; - protected $target; - protected $result; + protected MessageCatalogueInterface $source; + protected MessageCatalogueInterface $target; + protected MessageCatalogue $result; /** * This array stores 'all', 'new' and 'obsolete' messages for all valid domains. @@ -55,7 +55,7 @@ abstract class AbstractOperation implements OperationInterface * * @var array The array that stores 'all', 'new' and 'obsolete' messages */ - protected $messages; + protected array $messages; private array $domains; @@ -180,8 +180,6 @@ public function moveMessagesToIntlDomainsIfPossible(string $batch = self::ALL_BA * stores the results. * * @param string $domain The domain which the operation will be performed for - * - * @return void */ - abstract protected function processDomain(string $domain); + abstract protected function processDomain(string $domain): void; } diff --git a/site/vendor/symfony/translation/Catalogue/MergeOperation.php b/site/vendor/symfony/translation/Catalogue/MergeOperation.php index 1b777a843..e242dbee1 100644 --- a/site/vendor/symfony/translation/Catalogue/MergeOperation.php +++ b/site/vendor/symfony/translation/Catalogue/MergeOperation.php @@ -24,10 +24,7 @@ */ class MergeOperation extends AbstractOperation { - /** - * @return void - */ - protected function processDomain(string $domain) + protected function processDomain(string $domain): void { $this->messages[$domain] = [ 'all' => [], diff --git a/site/vendor/symfony/translation/Catalogue/TargetOperation.php b/site/vendor/symfony/translation/Catalogue/TargetOperation.php index 2c0ec722e..e3e0878bf 100644 --- a/site/vendor/symfony/translation/Catalogue/TargetOperation.php +++ b/site/vendor/symfony/translation/Catalogue/TargetOperation.php @@ -25,10 +25,7 @@ */ class TargetOperation extends AbstractOperation { - /** - * @return void - */ - protected function processDomain(string $domain) + protected function processDomain(string $domain): void { $this->messages[$domain] = [ 'all' => [], diff --git a/site/vendor/symfony/translation/CatalogueMetadataAwareInterface.php b/site/vendor/symfony/translation/CatalogueMetadataAwareInterface.php index c845959f1..19965eae9 100644 --- a/site/vendor/symfony/translation/CatalogueMetadataAwareInterface.php +++ b/site/vendor/symfony/translation/CatalogueMetadataAwareInterface.php @@ -31,18 +31,14 @@ public function getCatalogueMetadata(string $key = '', string $domain = 'message /** * Adds catalogue metadata to a message domain. - * - * @return void */ - public function setCatalogueMetadata(string $key, mixed $value, string $domain = 'messages'); + public function setCatalogueMetadata(string $key, mixed $value, string $domain = 'messages'): void; /** * Deletes catalogue metadata for the given key and domain. * * Passing an empty domain will delete all catalogue metadata. Passing an empty key will * delete all metadata for the given domain. - * - * @return void */ - public function deleteCatalogueMetadata(string $key = '', string $domain = 'messages'); + public function deleteCatalogueMetadata(string $key = '', string $domain = 'messages'): void; } diff --git a/site/vendor/symfony/translation/Command/XliffLintCommand.php b/site/vendor/symfony/translation/Command/XliffLintCommand.php index ba68635db..439562556 100644 --- a/site/vendor/symfony/translation/Command/XliffLintCommand.php +++ b/site/vendor/symfony/translation/Command/XliffLintCommand.php @@ -41,7 +41,7 @@ class XliffLintCommand extends Command 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, bool $requireStrictFileNames = true) { parent::__construct($name); @@ -50,10 +50,7 @@ public function __construct(string $name = null, callable $directoryIteratorProv $this->requireStrictFileNames = $requireStrictFileNames; } - /** - * @return void - */ - protected function configure() + protected function configure(): void { $this ->addArgument('filename', InputArgument::IS_ARRAY, 'A file, a directory or "-" for reading from STDIN') @@ -109,7 +106,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int return $this->display($io, $filesInfo); } - private function validate(string $content, string $file = null): array + private function validate(string $content, ?string $file = null): array { $errors = []; diff --git a/site/vendor/symfony/translation/DataCollector/TranslationDataCollector.php b/site/vendor/symfony/translation/DataCollector/TranslationDataCollector.php index 439ebe11a..d4f49cc66 100644 --- a/site/vendor/symfony/translation/DataCollector/TranslationDataCollector.php +++ b/site/vendor/symfony/translation/DataCollector/TranslationDataCollector.php @@ -42,7 +42,7 @@ public function lateCollect(): void $this->data = $this->cloneVar($this->data); } - public function collect(Request $request, Response $response, \Throwable $exception = null): void + public function collect(Request $request, Response $response, ?\Throwable $exception = null): void { $this->data['locale'] = $this->translator->getLocale(); $this->data['fallback_locales'] = $this->translator->getFallbackLocales(); diff --git a/site/vendor/symfony/translation/DataCollectorTranslator.php b/site/vendor/symfony/translation/DataCollectorTranslator.php index 220b13430..37fa28c0a 100644 --- a/site/vendor/symfony/translation/DataCollectorTranslator.php +++ b/site/vendor/symfony/translation/DataCollectorTranslator.php @@ -40,7 +40,7 @@ public function __construct(TranslatorInterface $translator) $this->translator = $translator; } - public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null): string + public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string { $trans = $this->translator->trans($id = (string) $id, $parameters, $domain, $locale); $this->collectMessage($locale, $domain, $id, $trans, $parameters); @@ -48,10 +48,7 @@ public function trans(?string $id, array $parameters = [], string $domain = null return $trans; } - /** - * @return void - */ - public function setLocale(string $locale) + public function setLocale(string $locale): void { $this->translator->setLocale($locale); } @@ -61,7 +58,7 @@ public function getLocale(): string return $this->translator->getLocale(); } - public function getCatalogue(string $locale = null): MessageCatalogueInterface + public function getCatalogue(?string $locale = null): MessageCatalogueInterface { return $this->translator->getCatalogue($locale); } @@ -71,7 +68,7 @@ public function getCatalogues(): array return $this->translator->getCatalogues(); } - public function warmUp(string $cacheDir, string $buildDir = null): array + public function warmUp(string $cacheDir, ?string $buildDir = null): array { if ($this->translator instanceof WarmableInterface) { return (array) $this->translator->warmUp($cacheDir, $buildDir); @@ -92,10 +89,7 @@ public function getFallbackLocales(): array return []; } - /** - * @return mixed - */ - public function __call(string $method, array $args) + public function __call(string $method, array $args): mixed { return $this->translator->{$method}(...$args); } diff --git a/site/vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php b/site/vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php index 2ece6ac7b..0331ef580 100644 --- a/site/vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php +++ b/site/vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php @@ -20,10 +20,7 @@ */ class TranslationDumperPass implements CompilerPassInterface { - /** - * @return void - */ - public function process(ContainerBuilder $container) + public function process(ContainerBuilder $container): void { if (!$container->hasDefinition('translation.writer')) { return; diff --git a/site/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php b/site/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php index 1baf9341e..28873d009 100644 --- a/site/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php +++ b/site/vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php @@ -21,10 +21,7 @@ */ class TranslationExtractorPass implements CompilerPassInterface { - /** - * @return void - */ - public function process(ContainerBuilder $container) + public function process(ContainerBuilder $container): void { if (!$container->hasDefinition('translation.extractor')) { return; diff --git a/site/vendor/symfony/translation/DependencyInjection/TranslatorPass.php b/site/vendor/symfony/translation/DependencyInjection/TranslatorPass.php index dd6ea3c83..948f378d6 100644 --- a/site/vendor/symfony/translation/DependencyInjection/TranslatorPass.php +++ b/site/vendor/symfony/translation/DependencyInjection/TranslatorPass.php @@ -18,10 +18,7 @@ class TranslatorPass implements CompilerPassInterface { - /** - * @return void - */ - public function process(ContainerBuilder $container) + public function process(ContainerBuilder $container): void { if (!$container->hasDefinition('translator.default')) { return; diff --git a/site/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php b/site/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php index 1756e3c8c..4f5fc2de0 100644 --- a/site/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php +++ b/site/vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php @@ -42,10 +42,7 @@ class TranslatorPathsPass extends AbstractRecursivePass */ private array $controllers = []; - /** - * @return void - */ - public function process(ContainerBuilder $container) + public function process(ContainerBuilder $container): void { if (!$container->hasDefinition('translator')) { return; diff --git a/site/vendor/symfony/translation/Dumper/CsvFileDumper.php b/site/vendor/symfony/translation/Dumper/CsvFileDumper.php index 8f5475259..60b744113 100644 --- a/site/vendor/symfony/translation/Dumper/CsvFileDumper.php +++ b/site/vendor/symfony/translation/Dumper/CsvFileDumper.php @@ -40,10 +40,8 @@ public function formatCatalogue(MessageCatalogue $messages, string $domain, arra /** * Sets the delimiter and escape character for CSV. - * - * @return void */ - public function setCsvControl(string $delimiter = ';', string $enclosure = '"') + public function setCsvControl(string $delimiter = ';', string $enclosure = '"'): void { $this->delimiter = $delimiter; $this->enclosure = $enclosure; diff --git a/site/vendor/symfony/translation/Dumper/DumperInterface.php b/site/vendor/symfony/translation/Dumper/DumperInterface.php index 6bf42931e..c151de020 100644 --- a/site/vendor/symfony/translation/Dumper/DumperInterface.php +++ b/site/vendor/symfony/translation/Dumper/DumperInterface.php @@ -25,8 +25,6 @@ interface DumperInterface * Dumps the message catalogue. * * @param array $options Options that are used by the dumper - * - * @return void */ - public function dump(MessageCatalogue $messages, array $options = []); + public function dump(MessageCatalogue $messages, array $options = []): void; } diff --git a/site/vendor/symfony/translation/Dumper/FileDumper.php b/site/vendor/symfony/translation/Dumper/FileDumper.php index e30d4770e..3846e7380 100644 --- a/site/vendor/symfony/translation/Dumper/FileDumper.php +++ b/site/vendor/symfony/translation/Dumper/FileDumper.php @@ -27,25 +27,18 @@ abstract class FileDumper implements DumperInterface { /** * A template for the relative paths to files. - * - * @var string */ - protected $relativePathTemplate = '%domain%.%locale%.%extension%'; + protected string $relativePathTemplate = '%domain%.%locale%.%extension%'; /** * Sets the template for the relative paths to files. - * - * @return void */ - public function setRelativePathTemplate(string $relativePathTemplate) + public function setRelativePathTemplate(string $relativePathTemplate): void { $this->relativePathTemplate = $relativePathTemplate; } - /** - * @return void - */ - public function dump(MessageCatalogue $messages, array $options = []) + public function dump(MessageCatalogue $messages, array $options = []): void { if (!\array_key_exists('path', $options)) { throw new InvalidArgumentException('The file dumper needs a path option.'); diff --git a/site/vendor/symfony/translation/Dumper/IcuResFileDumper.php b/site/vendor/symfony/translation/Dumper/IcuResFileDumper.php index 72c1ec089..e603ee8c4 100644 --- a/site/vendor/symfony/translation/Dumper/IcuResFileDumper.php +++ b/site/vendor/symfony/translation/Dumper/IcuResFileDumper.php @@ -20,7 +20,7 @@ */ class IcuResFileDumper extends FileDumper { - protected $relativePathTemplate = '%domain%/%locale%.%extension%'; + protected string $relativePathTemplate = '%domain%/%locale%.%extension%'; public function formatCatalogue(MessageCatalogue $messages, string $domain, array $options = []): string { diff --git a/site/vendor/symfony/translation/Dumper/XliffFileDumper.php b/site/vendor/symfony/translation/Dumper/XliffFileDumper.php index 22f0227b9..d0f016b23 100644 --- a/site/vendor/symfony/translation/Dumper/XliffFileDumper.php +++ b/site/vendor/symfony/translation/Dumper/XliffFileDumper.php @@ -214,7 +214,7 @@ private function dumpXliff2(string $defaultLocale, MessageCatalogue $messages, ? return $dom->saveXML(); } - private function hasMetadataArrayInfo(string $key, array $metadata = null): bool + private function hasMetadataArrayInfo(string $key, ?array $metadata = null): bool { return is_iterable($metadata[$key] ?? null); } diff --git a/site/vendor/symfony/translation/Exception/IncompleteDsnException.php b/site/vendor/symfony/translation/Exception/IncompleteDsnException.php index cb0ce027e..b304bde01 100644 --- a/site/vendor/symfony/translation/Exception/IncompleteDsnException.php +++ b/site/vendor/symfony/translation/Exception/IncompleteDsnException.php @@ -13,7 +13,7 @@ class IncompleteDsnException extends InvalidArgumentException { - public function __construct(string $message, string $dsn = null, \Throwable $previous = null) + public function __construct(string $message, ?string $dsn = null, ?\Throwable $previous = null) { if ($dsn) { $message = sprintf('Invalid "%s" provider DSN: ', $dsn).$message; diff --git a/site/vendor/symfony/translation/Exception/MissingRequiredOptionException.php b/site/vendor/symfony/translation/Exception/MissingRequiredOptionException.php index 2b5f80806..46152e254 100644 --- a/site/vendor/symfony/translation/Exception/MissingRequiredOptionException.php +++ b/site/vendor/symfony/translation/Exception/MissingRequiredOptionException.php @@ -16,7 +16,7 @@ */ class MissingRequiredOptionException extends IncompleteDsnException { - public function __construct(string $option, string $dsn = null, \Throwable $previous = null) + public function __construct(string $option, ?string $dsn = null, ?\Throwable $previous = null) { $message = sprintf('The option "%s" is required but missing.', $option); diff --git a/site/vendor/symfony/translation/Exception/ProviderException.php b/site/vendor/symfony/translation/Exception/ProviderException.php index 65883f852..f2981f58b 100644 --- a/site/vendor/symfony/translation/Exception/ProviderException.php +++ b/site/vendor/symfony/translation/Exception/ProviderException.php @@ -21,7 +21,7 @@ class ProviderException extends RuntimeException implements ProviderExceptionInt private ResponseInterface $response; private string $debug; - public function __construct(string $message, ResponseInterface $response, int $code = 0, \Exception $previous = null) + public function __construct(string $message, ResponseInterface $response, int $code = 0, ?\Exception $previous = null) { $this->response = $response; $this->debug = $response->getInfo('debug') ?? ''; diff --git a/site/vendor/symfony/translation/Exception/UnsupportedSchemeException.php b/site/vendor/symfony/translation/Exception/UnsupportedSchemeException.php index a4d838581..8d3295184 100644 --- a/site/vendor/symfony/translation/Exception/UnsupportedSchemeException.php +++ b/site/vendor/symfony/translation/Exception/UnsupportedSchemeException.php @@ -35,7 +35,7 @@ class UnsupportedSchemeException extends LogicException ], ]; - public function __construct(Dsn $dsn, string $name = null, array $supported = []) + public function __construct(Dsn $dsn, ?string $name = null, array $supported = []) { $provider = $dsn->getScheme(); if (false !== $pos = strpos($provider, '+')) { diff --git a/site/vendor/symfony/translation/Extractor/AbstractFileExtractor.php b/site/vendor/symfony/translation/Extractor/AbstractFileExtractor.php index 4c088b94f..a6198feb0 100644 --- a/site/vendor/symfony/translation/Extractor/AbstractFileExtractor.php +++ b/site/vendor/symfony/translation/Extractor/AbstractFileExtractor.php @@ -55,13 +55,7 @@ protected function isFile(string $file): bool return true; } - /** - * @return bool - */ - abstract protected function canBeExtracted(string $file); + abstract protected function canBeExtracted(string $file): bool; - /** - * @return iterable - */ - abstract protected function extractFromDirectory(string|array $resource); + abstract protected function extractFromDirectory(string|array $resource): iterable; } diff --git a/site/vendor/symfony/translation/Extractor/ChainExtractor.php b/site/vendor/symfony/translation/Extractor/ChainExtractor.php index d36f7f385..ec9982da7 100644 --- a/site/vendor/symfony/translation/Extractor/ChainExtractor.php +++ b/site/vendor/symfony/translation/Extractor/ChainExtractor.php @@ -29,28 +29,20 @@ class ChainExtractor implements ExtractorInterface /** * Adds a loader to the translation extractor. - * - * @return void */ - public function addExtractor(string $format, ExtractorInterface $extractor) + public function addExtractor(string $format, ExtractorInterface $extractor): void { $this->extractors[$format] = $extractor; } - /** - * @return void - */ - public function setPrefix(string $prefix) + public function setPrefix(string $prefix): void { foreach ($this->extractors as $extractor) { $extractor->setPrefix($prefix); } } - /** - * @return void - */ - public function extract(string|iterable $directory, MessageCatalogue $catalogue) + public function extract(string|iterable $directory, MessageCatalogue $catalogue): void { foreach ($this->extractors as $extractor) { $extractor->extract($directory, $catalogue); diff --git a/site/vendor/symfony/translation/Extractor/PhpAstExtractor.php b/site/vendor/symfony/translation/Extractor/PhpAstExtractor.php index 4dd7f41b2..06fc77de3 100644 --- a/site/vendor/symfony/translation/Extractor/PhpAstExtractor.php +++ b/site/vendor/symfony/translation/Extractor/PhpAstExtractor.php @@ -39,13 +39,18 @@ public function __construct( 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())->create(ParserFactory::PREFER_PHP7); + $this->parser = (new ParserFactory())->createForHostVersion(); } public function extract(iterable|string $resource, MessageCatalogue $catalogue): void { foreach ($this->extractFiles($resource) as $file) { $traverser = new NodeTraverser(); + + // This is needed to resolve namespaces in class methods/constants. + $nameResolver = new NodeVisitor\NameResolver(); + $traverser->addVisitor($nameResolver); + /** @var AbstractVisitor&NodeVisitor $visitor */ foreach ($this->visitors as $visitor) { $visitor->initialize($catalogue, $file, $this->prefix); diff --git a/site/vendor/symfony/translation/Extractor/PhpExtractor.php b/site/vendor/symfony/translation/Extractor/PhpExtractor.php deleted file mode 100644 index 7ff27f7c8..000000000 --- a/site/vendor/symfony/translation/Extractor/PhpExtractor.php +++ /dev/null @@ -1,333 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Translation\Extractor; - -trigger_deprecation('symfony/translation', '6.2', '"%s" is deprecated, use "%s" instead.', PhpExtractor::class, PhpAstExtractor::class); - -use Symfony\Component\Finder\Finder; -use Symfony\Component\Translation\MessageCatalogue; - -/** - * PhpExtractor extracts translation messages from a PHP template. - * - * @author Michel Salib - * - * @deprecated since Symfony 6.2, use the PhpAstExtractor instead - */ -class PhpExtractor extends AbstractFileExtractor implements ExtractorInterface -{ - public const MESSAGE_TOKEN = 300; - public const METHOD_ARGUMENTS_TOKEN = 1000; - public const DOMAIN_TOKEN = 1001; - - /** - * Prefix for new found message. - */ - private string $prefix = ''; - - /** - * The sequence that captures translation messages. - */ - protected $sequences = [ - [ - '->', - 'trans', - '(', - self::MESSAGE_TOKEN, - ',', - self::METHOD_ARGUMENTS_TOKEN, - ',', - self::DOMAIN_TOKEN, - ], - [ - '->', - 'trans', - '(', - self::MESSAGE_TOKEN, - ], - [ - 'new', - 'TranslatableMessage', - '(', - self::MESSAGE_TOKEN, - ',', - self::METHOD_ARGUMENTS_TOKEN, - ',', - self::DOMAIN_TOKEN, - ], - [ - 'new', - 'TranslatableMessage', - '(', - self::MESSAGE_TOKEN, - ], - [ - 'new', - '\\', - 'Symfony', - '\\', - 'Component', - '\\', - 'Translation', - '\\', - 'TranslatableMessage', - '(', - self::MESSAGE_TOKEN, - ',', - self::METHOD_ARGUMENTS_TOKEN, - ',', - self::DOMAIN_TOKEN, - ], - [ - 'new', - '\Symfony\Component\Translation\TranslatableMessage', - '(', - self::MESSAGE_TOKEN, - ',', - self::METHOD_ARGUMENTS_TOKEN, - ',', - self::DOMAIN_TOKEN, - ], - [ - 'new', - '\\', - 'Symfony', - '\\', - 'Component', - '\\', - 'Translation', - '\\', - 'TranslatableMessage', - '(', - self::MESSAGE_TOKEN, - ], - [ - 'new', - '\Symfony\Component\Translation\TranslatableMessage', - '(', - self::MESSAGE_TOKEN, - ], - [ - 't', - '(', - self::MESSAGE_TOKEN, - ',', - self::METHOD_ARGUMENTS_TOKEN, - ',', - self::DOMAIN_TOKEN, - ], - [ - 't', - '(', - self::MESSAGE_TOKEN, - ], - ]; - - /** - * @return void - */ - public function extract(string|iterable $resource, MessageCatalogue $catalog) - { - $files = $this->extractFiles($resource); - foreach ($files as $file) { - $this->parseTokens(token_get_all(file_get_contents($file)), $catalog, $file); - - gc_mem_caches(); - } - } - - /** - * @return void - */ - public function setPrefix(string $prefix) - { - $this->prefix = $prefix; - } - - /** - * Normalizes a token. - */ - protected function normalizeToken(mixed $token): ?string - { - if (isset($token[1]) && 'b"' !== $token) { - return $token[1]; - } - - return $token; - } - - /** - * Seeks to a non-whitespace token. - */ - private function seekToNextRelevantToken(\Iterator $tokenIterator): void - { - for (; $tokenIterator->valid(); $tokenIterator->next()) { - $t = $tokenIterator->current(); - if (\T_WHITESPACE !== $t[0]) { - break; - } - } - } - - private function skipMethodArgument(\Iterator $tokenIterator): void - { - $openBraces = 0; - - for (; $tokenIterator->valid(); $tokenIterator->next()) { - $t = $tokenIterator->current(); - - if ('[' === $t[0] || '(' === $t[0]) { - ++$openBraces; - } - - if (']' === $t[0] || ')' === $t[0]) { - --$openBraces; - } - - if ((0 === $openBraces && ',' === $t[0]) || (-1 === $openBraces && ')' === $t[0])) { - break; - } - } - } - - /** - * Extracts the message from the iterator while the tokens - * match allowed message tokens. - */ - private function getValue(\Iterator $tokenIterator): string - { - $message = ''; - $docToken = ''; - $docPart = ''; - - for (; $tokenIterator->valid(); $tokenIterator->next()) { - $t = $tokenIterator->current(); - if ('.' === $t) { - // Concatenate with next token - continue; - } - if (!isset($t[1])) { - break; - } - - switch ($t[0]) { - case \T_START_HEREDOC: - $docToken = $t[1]; - break; - case \T_ENCAPSED_AND_WHITESPACE: - case \T_CONSTANT_ENCAPSED_STRING: - if ('' === $docToken) { - $message .= PhpStringTokenParser::parse($t[1]); - } else { - $docPart = $t[1]; - } - break; - case \T_END_HEREDOC: - if ($indentation = strspn($t[1], ' ')) { - $docPartWithLineBreaks = $docPart; - $docPart = ''; - - foreach (preg_split('~(\r\n|\n|\r)~', $docPartWithLineBreaks, -1, \PREG_SPLIT_DELIM_CAPTURE) as $str) { - if (\in_array($str, ["\r\n", "\n", "\r"], true)) { - $docPart .= $str; - } else { - $docPart .= substr($str, $indentation); - } - } - } - - $message .= PhpStringTokenParser::parseDocString($docToken, $docPart); - $docToken = ''; - $docPart = ''; - break; - case \T_WHITESPACE: - break; - default: - break 2; - } - } - - return $message; - } - - /** - * Extracts trans message from PHP tokens. - * - * @return void - */ - protected function parseTokens(array $tokens, MessageCatalogue $catalog, string $filename) - { - $tokenIterator = new \ArrayIterator($tokens); - - for ($key = 0; $key < $tokenIterator->count(); ++$key) { - foreach ($this->sequences as $sequence) { - $message = ''; - $domain = 'messages'; - $tokenIterator->seek($key); - - foreach ($sequence as $sequenceKey => $item) { - $this->seekToNextRelevantToken($tokenIterator); - - if ($this->normalizeToken($tokenIterator->current()) === $item) { - $tokenIterator->next(); - continue; - } elseif (self::MESSAGE_TOKEN === $item) { - $message = $this->getValue($tokenIterator); - - if (\count($sequence) === ($sequenceKey + 1)) { - break; - } - } elseif (self::METHOD_ARGUMENTS_TOKEN === $item) { - $this->skipMethodArgument($tokenIterator); - } elseif (self::DOMAIN_TOKEN === $item) { - $domainToken = $this->getValue($tokenIterator); - if ('' !== $domainToken) { - $domain = $domainToken; - } - - break; - } else { - break; - } - } - - if ($message) { - $catalog->set($message, $this->prefix.$message, $domain); - $metadata = $catalog->getMetadata($message, $domain) ?? []; - $normalizedFilename = preg_replace('{[\\\\/]+}', '/', $filename); - $metadata['sources'][] = $normalizedFilename.':'.$tokens[$key][2]; - $catalog->setMetadata($message, $metadata, $domain); - break; - } - } - } - } - - /** - * @throws \InvalidArgumentException - */ - protected function canBeExtracted(string $file): bool - { - return $this->isFile($file) && 'php' === pathinfo($file, \PATHINFO_EXTENSION); - } - - protected function extractFromDirectory(string|array $directory): iterable - { - 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)); - } - - $finder = new Finder(); - - return $finder->files()->name('*.php')->in($directory); - } -} diff --git a/site/vendor/symfony/translation/Extractor/PhpStringTokenParser.php b/site/vendor/symfony/translation/Extractor/PhpStringTokenParser.php deleted file mode 100644 index 3b854ce73..000000000 --- a/site/vendor/symfony/translation/Extractor/PhpStringTokenParser.php +++ /dev/null @@ -1,141 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Translation\Extractor; - -trigger_deprecation('symfony/translation', '6.2', '"%s" is deprecated.', PhpStringTokenParser::class); - -/* - * The following is derived from code at http://github.com/nikic/PHP-Parser - * - * Copyright (c) 2011 by Nikita Popov - * - * Some rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * * The names of the contributors may not be used to endorse or - * promote products derived from this software without specific - * prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @deprecated since Symfony 6.2 - */ -class PhpStringTokenParser -{ - protected static $replacements = [ - '\\' => '\\', - '$' => '$', - 'n' => "\n", - 'r' => "\r", - 't' => "\t", - 'f' => "\f", - 'v' => "\v", - 'e' => "\x1B", - ]; - - /** - * Parses a string token. - * - * @param string $str String token content - */ - public static function parse(string $str): string - { - $bLength = 0; - if ('b' === $str[0]) { - $bLength = 1; - } - - if ('\'' === $str[$bLength]) { - return str_replace( - ['\\\\', '\\\''], - ['\\', '\''], - substr($str, $bLength + 1, -1) - ); - } else { - return self::parseEscapeSequences(substr($str, $bLength + 1, -1), '"'); - } - } - - /** - * Parses escape sequences in strings (all string types apart from single quoted). - * - * @param string $str String without quotes - * @param string|null $quote Quote type - */ - public static function parseEscapeSequences(string $str, string $quote = null): string - { - if (null !== $quote) { - $str = str_replace('\\'.$quote, $quote, $str); - } - - return preg_replace_callback( - '~\\\\([\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3})~', - [__CLASS__, 'parseCallback'], - $str - ); - } - - private static function parseCallback(array $matches): string - { - $str = $matches[1]; - - if (isset(self::$replacements[$str])) { - return self::$replacements[$str]; - } elseif ('x' === $str[0] || 'X' === $str[0]) { - return \chr(hexdec($str)); - } else { - return \chr(octdec($str)); - } - } - - /** - * Parses a constant doc string. - * - * @param string $startToken Doc string start token content (<<getArgs() : $node->args; $argumentValues = []; @@ -119,6 +119,17 @@ private function getStringValue(Node $node): ?string return $node->expr->value; } + if ($node instanceof Node\Expr\ClassConstFetch) { + try { + $reflection = new \ReflectionClass($node->class->toString()); + $constant = $reflection->getReflectionConstant($node->name->toString()); + if (false !== $constant && \is_string($constant->getValue())) { + return $constant->getValue(); + } + } catch (\ReflectionException) { + } + } + return null; } } diff --git a/site/vendor/symfony/translation/Extractor/Visitor/ConstraintVisitor.php b/site/vendor/symfony/translation/Extractor/Visitor/ConstraintVisitor.php index 33dc8437a..00fb9eedc 100644 --- a/site/vendor/symfony/translation/Extractor/Visitor/ConstraintVisitor.php +++ b/site/vendor/symfony/translation/Extractor/Visitor/ConstraintVisitor.php @@ -32,6 +32,11 @@ public function beforeTraverse(array $nodes): ?Node } public function enterNode(Node $node): ?Node + { + return null; + } + + public function leaveNode(Node $node): ?Node { if (!$node instanceof Node\Expr\New_ && !$node instanceof Node\Attribute) { return null; @@ -42,7 +47,7 @@ public function enterNode(Node $node): ?Node return null; } - $parts = $className->parts; + $parts = $className->getParts(); $isConstraintClass = false; foreach ($parts as $part) { @@ -100,11 +105,6 @@ public function enterNode(Node $node): ?Node return null; } - public function leaveNode(Node $node): ?Node - { - return null; - } - public function afterTraverse(array $nodes): ?Node { return null; diff --git a/site/vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php b/site/vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php index 0b537baa2..53a6981a2 100644 --- a/site/vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php +++ b/site/vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php @@ -25,6 +25,11 @@ public function beforeTraverse(array $nodes): ?Node } public function enterNode(Node $node): ?Node + { + return null; + } + + public function leaveNode(Node $node): ?Node { if (!$node instanceof Node\Expr\MethodCall && !$node instanceof Node\Expr\FuncCall) { return null; @@ -53,11 +58,6 @@ public function enterNode(Node $node): ?Node return null; } - public function leaveNode(Node $node): ?Node - { - return null; - } - public function afterTraverse(array $nodes): ?Node { return null; diff --git a/site/vendor/symfony/translation/Extractor/Visitor/TranslatableMessageVisitor.php b/site/vendor/symfony/translation/Extractor/Visitor/TranslatableMessageVisitor.php index c1505a135..6bd8bb022 100644 --- a/site/vendor/symfony/translation/Extractor/Visitor/TranslatableMessageVisitor.php +++ b/site/vendor/symfony/translation/Extractor/Visitor/TranslatableMessageVisitor.php @@ -25,6 +25,11 @@ public function beforeTraverse(array $nodes): ?Node } public function enterNode(Node $node): ?Node + { + return null; + } + + public function leaveNode(Node $node): ?Node { if (!$node instanceof Node\Expr\New_) { return null; @@ -34,7 +39,7 @@ public function enterNode(Node $node): ?Node return null; } - if (!\in_array('TranslatableMessage', $className->parts, true)) { + if (!\in_array('TranslatableMessage', $className->getParts(), true)) { return null; } @@ -53,11 +58,6 @@ public function enterNode(Node $node): ?Node return null; } - public function leaveNode(Node $node): ?Node - { - return null; - } - public function afterTraverse(array $nodes): ?Node { return null; diff --git a/site/vendor/symfony/translation/Formatter/MessageFormatter.php b/site/vendor/symfony/translation/Formatter/MessageFormatter.php index 5e101aa43..d5255bdcb 100644 --- a/site/vendor/symfony/translation/Formatter/MessageFormatter.php +++ b/site/vendor/symfony/translation/Formatter/MessageFormatter.php @@ -28,7 +28,7 @@ class MessageFormatter implements MessageFormatterInterface, IntlFormatterInterf /** * @param TranslatorInterface|null $translator An identity translator to use as selector for pluralization */ - public function __construct(TranslatorInterface $translator = null, IntlFormatterInterface $intlFormatter = null) + public function __construct(?TranslatorInterface $translator = null, ?IntlFormatterInterface $intlFormatter = null) { $this->translator = $translator ?? new IdentityTranslator(); $this->intlFormatter = $intlFormatter ?? new IntlFormatter(); diff --git a/site/vendor/symfony/translation/Loader/CsvFileLoader.php b/site/vendor/symfony/translation/Loader/CsvFileLoader.php index 7f2f96be6..4eda9594d 100644 --- a/site/vendor/symfony/translation/Loader/CsvFileLoader.php +++ b/site/vendor/symfony/translation/Loader/CsvFileLoader.php @@ -52,10 +52,8 @@ protected function loadResource(string $resource): array /** * Sets the delimiter, enclosure, and escape character for CSV. - * - * @return void */ - public function setCsvControl(string $delimiter = ';', string $enclosure = '"', string $escape = '\\') + public function setCsvControl(string $delimiter = ';', string $enclosure = '"', string $escape = '\\'): void { $this->delimiter = $delimiter; $this->enclosure = $enclosure; diff --git a/site/vendor/symfony/translation/Loader/IcuResFileLoader.php b/site/vendor/symfony/translation/Loader/IcuResFileLoader.php index 94d55b861..949dd9792 100644 --- a/site/vendor/symfony/translation/Loader/IcuResFileLoader.php +++ b/site/vendor/symfony/translation/Loader/IcuResFileLoader.php @@ -70,7 +70,7 @@ public function load(mixed $resource, string $locale, string $domain = 'messages * @param array $messages Used internally for recursive calls * @param string|null $path Current path being parsed, used internally for recursive calls */ - protected function flatten(\ResourceBundle $rb, array &$messages = [], string $path = null): array + protected function flatten(\ResourceBundle $rb, array &$messages = [], ?string $path = null): array { foreach ($rb as $key => $value) { $nodePath = $path ? $path.'.'.$key : $key; diff --git a/site/vendor/symfony/translation/Loader/XliffFileLoader.php b/site/vendor/symfony/translation/Loader/XliffFileLoader.php index 34cad36c4..31b3251ba 100644 --- a/site/vendor/symfony/translation/Loader/XliffFileLoader.php +++ b/site/vendor/symfony/translation/Loader/XliffFileLoader.php @@ -112,6 +112,10 @@ private function extractXliff1(\DOMDocument $dom, MessageCatalogue $catalogue, s continue; } + if (isset($translation->target) && 'needs-translation' === (string) $translation->target->attributes()['state']) { + continue; + } + $source = isset($attributes['resname']) && $attributes['resname'] ? $attributes['resname'] : $translation->source; // If the xlf file has another encoding specified, try to convert it because // simple_xml will always return utf-8 encoded values @@ -191,7 +195,7 @@ private function extractXliff2(\DOMDocument $dom, MessageCatalogue $catalogue, s /** * Convert a UTF8 string to the specified encoding. */ - private function utf8ToCharset(string $content, string $encoding = null): string + private function utf8ToCharset(string $content, ?string $encoding = null): string { if ('UTF-8' !== $encoding && !empty($encoding)) { return mb_convert_encoding($content, $encoding, 'UTF-8'); @@ -200,7 +204,7 @@ private function utf8ToCharset(string $content, string $encoding = null): string return $content; } - private function parseNotesMetadata(\SimpleXMLElement $noteElement = null, string $encoding = null): array + private function parseNotesMetadata(?\SimpleXMLElement $noteElement = null, ?string $encoding = null): array { $notes = []; diff --git a/site/vendor/symfony/translation/LoggingTranslator.php b/site/vendor/symfony/translation/LoggingTranslator.php index a7ad410a5..8c9b26463 100644 --- a/site/vendor/symfony/translation/LoggingTranslator.php +++ b/site/vendor/symfony/translation/LoggingTranslator.php @@ -37,7 +37,7 @@ public function __construct(TranslatorInterface $translator, LoggerInterface $lo $this->logger = $logger; } - public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null): string + public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string { $trans = $this->translator->trans($id = (string) $id, $parameters, $domain, $locale); $this->log($id, $domain, $locale); @@ -45,10 +45,7 @@ public function trans(?string $id, array $parameters = [], string $domain = null return $trans; } - /** - * @return void - */ - public function setLocale(string $locale) + public function setLocale(string $locale): void { $prev = $this->translator->getLocale(); $this->translator->setLocale($locale); @@ -64,7 +61,7 @@ public function getLocale(): string return $this->translator->getLocale(); } - public function getCatalogue(string $locale = null): MessageCatalogueInterface + public function getCatalogue(?string $locale = null): MessageCatalogueInterface { return $this->translator->getCatalogue($locale); } @@ -86,10 +83,7 @@ public function getFallbackLocales(): array return []; } - /** - * @return mixed - */ - public function __call(string $method, array $args) + public function __call(string $method, array $args): mixed { return $this->translator->{$method}(...$args); } diff --git a/site/vendor/symfony/translation/MessageCatalogue.php b/site/vendor/symfony/translation/MessageCatalogue.php index 379d947ce..f0cc6b321 100644 --- a/site/vendor/symfony/translation/MessageCatalogue.php +++ b/site/vendor/symfony/translation/MessageCatalogue.php @@ -55,7 +55,7 @@ public function getDomains(): array return array_values($domains); } - public function all(string $domain = null): array + public function all(?string $domain = null): array { if (null !== $domain) { // skip messages merge if intl-icu requested explicitly @@ -80,10 +80,7 @@ public function all(string $domain = null): array return $allMessages; } - /** - * @return void - */ - public function set(string $id, string $translation, string $domain = 'messages') + public function set(string $id, string $translation, string $domain = 'messages'): void { $this->add([$id => $translation], $domain); } @@ -123,20 +120,14 @@ public function get(string $id, string $domain = 'messages'): string return $id; } - /** - * @return void - */ - public function replace(array $messages, string $domain = 'messages') + public function replace(array $messages, string $domain = 'messages'): void { unset($this->messages[$domain], $this->messages[$domain.self::INTL_DOMAIN_SUFFIX]); $this->add($messages, $domain); } - /** - * @return void - */ - public function add(array $messages, string $domain = 'messages') + public function add(array $messages, string $domain = 'messages'): void { $altDomain = str_ends_with($domain, self::INTL_DOMAIN_SUFFIX) ? substr($domain, 0, -\strlen(self::INTL_DOMAIN_SUFFIX)) : $domain.self::INTL_DOMAIN_SUFFIX; foreach ($messages as $id => $message) { @@ -149,10 +140,7 @@ public function add(array $messages, string $domain = 'messages') } } - /** - * @return void - */ - public function addCatalogue(MessageCatalogueInterface $catalogue) + 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)); @@ -181,10 +169,7 @@ public function addCatalogue(MessageCatalogueInterface $catalogue) } } - /** - * @return void - */ - public function addFallbackCatalogue(MessageCatalogueInterface $catalogue) + public function addFallbackCatalogue(MessageCatalogueInterface $catalogue): void { // detect circular references $c = $catalogue; @@ -223,10 +208,7 @@ public function getResources(): array return array_values($this->resources); } - /** - * @return void - */ - public function addResource(ResourceInterface $resource) + public function addResource(ResourceInterface $resource): void { $this->resources[$resource->__toString()] = $resource; } @@ -250,18 +232,12 @@ public function getMetadata(string $key = '', string $domain = 'messages'): mixe return null; } - /** - * @return void - */ - public function setMetadata(string $key, mixed $value, string $domain = 'messages') + public function setMetadata(string $key, mixed $value, string $domain = 'messages'): void { $this->metadata[$domain][$key] = $value; } - /** - * @return void - */ - public function deleteMetadata(string $key = '', string $domain = 'messages') + public function deleteMetadata(string $key = '', string $domain = 'messages'): void { if ('' == $domain) { $this->metadata = []; @@ -291,18 +267,12 @@ public function getCatalogueMetadata(string $key = '', string $domain = 'message return null; } - /** - * @return void - */ - public function setCatalogueMetadata(string $key, mixed $value, string $domain = 'messages') + public function setCatalogueMetadata(string $key, mixed $value, string $domain = 'messages'): void { $this->catalogueMetadata[$domain][$key] = $value; } - /** - * @return void - */ - public function deleteCatalogueMetadata(string $key = '', string $domain = 'messages') + public function deleteCatalogueMetadata(string $key = '', string $domain = 'messages'): void { if (!$domain) { $this->catalogueMetadata = []; diff --git a/site/vendor/symfony/translation/MessageCatalogueInterface.php b/site/vendor/symfony/translation/MessageCatalogueInterface.php index ed819f155..5d6356053 100644 --- a/site/vendor/symfony/translation/MessageCatalogueInterface.php +++ b/site/vendor/symfony/translation/MessageCatalogueInterface.php @@ -37,7 +37,7 @@ public function getDomains(): array; * * If $domain is null, it returns all messages. */ - public function all(string $domain = null): array; + public function all(?string $domain = null): array; /** * Sets a message translation. @@ -45,10 +45,8 @@ public function all(string $domain = null): array; * @param string $id The message id * @param string $translation The messages translation * @param string $domain The domain name - * - * @return void */ - public function set(string $id, string $translation, string $domain = 'messages'); + public function set(string $id, string $translation, string $domain = 'messages'): void; /** * Checks if a message has a translation. @@ -79,39 +77,31 @@ public function get(string $id, string $domain = 'messages'): string; * * @param array $messages An array of translations * @param string $domain The domain name - * - * @return void */ - public function replace(array $messages, string $domain = 'messages'); + public function replace(array $messages, string $domain = 'messages'): void; /** * Adds translations for a given domain. * * @param array $messages An array of translations * @param string $domain The domain name - * - * @return void */ - public function add(array $messages, string $domain = 'messages'); + public function add(array $messages, string $domain = 'messages'): void; /** * Merges translations from the given Catalogue into the current one. * * The two catalogues must have the same locale. - * - * @return void */ - public function addCatalogue(self $catalogue); + public function addCatalogue(self $catalogue): void; /** * Merges translations from the given Catalogue into the current one * only when the translation does not exist. * * This is used to provide default translations when they do not exist for the current locale. - * - * @return void */ - public function addFallbackCatalogue(self $catalogue); + public function addFallbackCatalogue(self $catalogue): void; /** * Gets the fallback catalogue. @@ -127,8 +117,6 @@ public function getResources(): array; /** * Adds a resource for this collection. - * - * @return void */ - public function addResource(ResourceInterface $resource); + public function addResource(ResourceInterface $resource): void; } diff --git a/site/vendor/symfony/translation/MetadataAwareInterface.php b/site/vendor/symfony/translation/MetadataAwareInterface.php index 39e5326c3..12e4f33ba 100644 --- a/site/vendor/symfony/translation/MetadataAwareInterface.php +++ b/site/vendor/symfony/translation/MetadataAwareInterface.php @@ -31,18 +31,14 @@ public function getMetadata(string $key = '', string $domain = 'messages'): mixe /** * Adds metadata to a message domain. - * - * @return void */ - public function setMetadata(string $key, mixed $value, string $domain = 'messages'); + public function setMetadata(string $key, mixed $value, string $domain = 'messages'): void; /** * Deletes metadata for the given key and domain. * * Passing an empty domain will delete all metadata. Passing an empty key will * delete all metadata for the given domain. - * - * @return void */ - public function deleteMetadata(string $key = '', string $domain = 'messages'); + public function deleteMetadata(string $key = '', string $domain = 'messages'): void; } diff --git a/site/vendor/symfony/translation/Provider/Dsn.php b/site/vendor/symfony/translation/Provider/Dsn.php index af75cb3ae..1d90e27f9 100644 --- a/site/vendor/symfony/translation/Provider/Dsn.php +++ b/site/vendor/symfony/translation/Provider/Dsn.php @@ -33,25 +33,25 @@ public function __construct(#[\SensitiveParameter] string $dsn) { $this->originalDsn = $dsn; - if (false === $parsedDsn = parse_url($dsn)) { + if (false === $params = parse_url($dsn)) { throw new InvalidArgumentException('The translation provider DSN is invalid.'); } - if (!isset($parsedDsn['scheme'])) { + if (!isset($params['scheme'])) { throw new InvalidArgumentException('The translation provider DSN must contain a scheme.'); } - $this->scheme = $parsedDsn['scheme']; + $this->scheme = $params['scheme']; - if (!isset($parsedDsn['host'])) { + if (!isset($params['host'])) { throw new InvalidArgumentException('The translation provider DSN must contain a host (use "default" by default).'); } - $this->host = $parsedDsn['host']; + $this->host = $params['host']; - $this->user = '' !== ($parsedDsn['user'] ?? '') ? urldecode($parsedDsn['user']) : null; - $this->password = '' !== ($parsedDsn['pass'] ?? '') ? urldecode($parsedDsn['pass']) : null; - $this->port = $parsedDsn['port'] ?? null; - $this->path = $parsedDsn['path'] ?? null; - parse_str($parsedDsn['query'] ?? '', $this->options); + $this->user = '' !== ($params['user'] ?? '') ? rawurldecode($params['user']) : null; + $this->password = '' !== ($params['pass'] ?? '') ? rawurldecode($params['pass']) : null; + $this->port = $params['port'] ?? null; + $this->path = $params['path'] ?? null; + parse_str($params['query'] ?? '', $this->options); } public function getScheme(): string @@ -74,7 +74,7 @@ public function getPassword(): ?string return $this->password; } - public function getPort(int $default = null): ?int + public function getPort(?int $default = null): ?int { return $this->port ?? $default; } diff --git a/site/vendor/symfony/translation/PseudoLocalizationTranslator.php b/site/vendor/symfony/translation/PseudoLocalizationTranslator.php index 0207e9997..f26909f5e 100644 --- a/site/vendor/symfony/translation/PseudoLocalizationTranslator.php +++ b/site/vendor/symfony/translation/PseudoLocalizationTranslator.php @@ -83,7 +83,7 @@ public function __construct(TranslatorInterface $translator, array $options = [] $this->localizableHTMLAttributes = $options['localizable_html_attributes'] ?? []; } - public function trans(string $id, array $parameters = [], string $domain = null, string $locale = null): string + public function trans(string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string { $trans = ''; $visibleText = ''; @@ -120,7 +120,7 @@ private function getParts(string $originalTrans): array return [[true, true, $originalTrans]]; } - $html = mb_encode_numericentity($originalTrans, [0x80, 0xFFFF, 0, 0xFFFF], mb_detect_encoding($originalTrans, null, true) ?: 'UTF-8'); + $html = mb_encode_numericentity($originalTrans, [0x80, 0x10FFFF, 0, 0x1FFFFF], mb_detect_encoding($originalTrans, null, true) ?: 'UTF-8'); $useInternalErrors = libxml_use_internal_errors(true); diff --git a/site/vendor/symfony/translation/Reader/TranslationReader.php b/site/vendor/symfony/translation/Reader/TranslationReader.php index 01408d4dc..928e2c562 100644 --- a/site/vendor/symfony/translation/Reader/TranslationReader.php +++ b/site/vendor/symfony/translation/Reader/TranslationReader.php @@ -33,18 +33,13 @@ class TranslationReader implements TranslationReaderInterface * Adds a loader to the translation extractor. * * @param string $format The format of the loader - * - * @return void */ - public function addLoader(string $format, LoaderInterface $loader) + public function addLoader(string $format, LoaderInterface $loader): void { $this->loaders[$format] = $loader; } - /** - * @return void - */ - public function read(string $directory, MessageCatalogue $catalogue) + public function read(string $directory, MessageCatalogue $catalogue): void { if (!is_dir($directory)) { return; diff --git a/site/vendor/symfony/translation/Reader/TranslationReaderInterface.php b/site/vendor/symfony/translation/Reader/TranslationReaderInterface.php index ea74dc23f..bab6e59be 100644 --- a/site/vendor/symfony/translation/Reader/TranslationReaderInterface.php +++ b/site/vendor/symfony/translation/Reader/TranslationReaderInterface.php @@ -22,8 +22,6 @@ interface TranslationReaderInterface { /** * Reads translation messages from a directory to the catalogue. - * - * @return void */ - public function read(string $directory, MessageCatalogue $catalogue); + public function read(string $directory, MessageCatalogue $catalogue): void; } diff --git a/site/vendor/symfony/translation/Resources/functions.php b/site/vendor/symfony/translation/Resources/functions.php index 901d2f87e..0d2a037a2 100644 --- a/site/vendor/symfony/translation/Resources/functions.php +++ b/site/vendor/symfony/translation/Resources/functions.php @@ -15,7 +15,7 @@ /** * @author Nate Wiebe */ - function t(string $message, array $parameters = [], string $domain = null): TranslatableMessage + function t(string $message, array $parameters = [], ?string $domain = null): TranslatableMessage { return new TranslatableMessage($message, $parameters, $domain); } diff --git a/site/vendor/symfony/translation/Test/ProviderFactoryTestCase.php b/site/vendor/symfony/translation/Test/ProviderFactoryTestCase.php index 110ea3d7a..95ffcb1e5 100644 --- a/site/vendor/symfony/translation/Test/ProviderFactoryTestCase.php +++ b/site/vendor/symfony/translation/Test/ProviderFactoryTestCase.php @@ -90,7 +90,7 @@ public function testCreate(string $expected, string $dsn) /** * @dataProvider unsupportedSchemeProvider */ - public function testUnsupportedSchemeException(string $dsn, string $message = null) + public function testUnsupportedSchemeException(string $dsn, ?string $message = null) { $factory = $this->createFactory(); @@ -107,7 +107,7 @@ public function testUnsupportedSchemeException(string $dsn, string $message = nu /** * @dataProvider incompleteDsnProvider */ - public function testIncompleteDsnException(string $dsn, string $message = null) + public function testIncompleteDsnException(string $dsn, ?string $message = null) { $factory = $this->createFactory(); diff --git a/site/vendor/symfony/translation/TranslatableMessage.php b/site/vendor/symfony/translation/TranslatableMessage.php index 91d4c1941..c591e68c2 100644 --- a/site/vendor/symfony/translation/TranslatableMessage.php +++ b/site/vendor/symfony/translation/TranslatableMessage.php @@ -23,7 +23,7 @@ class TranslatableMessage implements TranslatableInterface private array $parameters; private ?string $domain; - public function __construct(string $message, array $parameters = [], string $domain = null) + public function __construct(string $message, array $parameters = [], ?string $domain = null) { $this->message = $message; $this->parameters = $parameters; @@ -50,7 +50,7 @@ public function getDomain(): ?string return $this->domain; } - public function trans(TranslatorInterface $translator, string $locale = null): string + public function trans(TranslatorInterface $translator, ?string $locale = null): string { return $translator->trans($this->getMessage(), array_map( static fn ($parameter) => $parameter instanceof TranslatableInterface ? $parameter->trans($translator, $locale) : $parameter, diff --git a/site/vendor/symfony/translation/Translator.php b/site/vendor/symfony/translation/Translator.php index 132138e92..57bef2e04 100644 --- a/site/vendor/symfony/translation/Translator.php +++ b/site/vendor/symfony/translation/Translator.php @@ -36,7 +36,7 @@ class Translator implements TranslatorInterface, TranslatorBagInterface, LocaleA /** * @var MessageCatalogueInterface[] */ - protected $catalogues = []; + protected array $catalogues = []; private string $locale; @@ -69,7 +69,7 @@ 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, ?string $cacheDir = null, bool $debug = false, array $cacheVary = []) { $this->setLocale($locale); @@ -80,10 +80,7 @@ public function __construct(string $locale, MessageFormatterInterface $formatter $this->hasIntlFormatter = $formatter instanceof IntlFormatterInterface; } - /** - * @return void - */ - public function setConfigCacheFactory(ConfigCacheFactoryInterface $configCacheFactory) + public function setConfigCacheFactory(ConfigCacheFactoryInterface $configCacheFactory): void { $this->configCacheFactory = $configCacheFactory; } @@ -92,10 +89,8 @@ public function setConfigCacheFactory(ConfigCacheFactoryInterface $configCacheFa * Adds a Loader. * * @param string $format The name of the loader (@see addResource()) - * - * @return void */ - public function addLoader(string $format, LoaderInterface $loader) + public function addLoader(string $format, LoaderInterface $loader): void { $this->loaders[$format] = $loader; } @@ -106,11 +101,9 @@ public function addLoader(string $format, LoaderInterface $loader) * @param string $format The name of the loader (@see addLoader()) * @param mixed $resource The resource name * - * @return void - * * @throws InvalidArgumentException If the locale contains invalid characters */ - public function addResource(string $format, mixed $resource, string $locale, string $domain = null) + public function addResource(string $format, mixed $resource, string $locale, ?string $domain = null): void { $domain ??= 'messages'; @@ -126,10 +119,7 @@ public function addResource(string $format, mixed $resource, string $locale, str } } - /** - * @return void - */ - public function setLocale(string $locale) + public function setLocale(string $locale): void { $this->assertValidLocale($locale); $this->locale = $locale; @@ -145,11 +135,9 @@ public function getLocale(): string * * @param string[] $locales * - * @return void - * * @throws InvalidArgumentException If a locale contains invalid characters */ - public function setFallbackLocales(array $locales) + public function setFallbackLocales(array $locales): void { // needed as the fallback locales are linked to the already loaded catalogues $this->catalogues = []; @@ -171,7 +159,7 @@ public function getFallbackLocales(): array return $this->fallbackLocales; } - public function trans(?string $id, array $parameters = [], string $domain = null, string $locale = null): string + public function trans(?string $id, array $parameters = [], ?string $domain = null, ?string $locale = null): string { if (null === $id || '' === $id) { return ''; @@ -203,7 +191,7 @@ public function trans(?string $id, array $parameters = [], string $domain = null return $this->formatter->format($catalogue->get($id, $domain), $locale, $parameters); } - public function getCatalogue(string $locale = null): MessageCatalogueInterface + public function getCatalogue(?string $locale = null): MessageCatalogueInterface { if (!$locale) { $locale = $this->getLocale(); @@ -233,10 +221,7 @@ protected function getLoaders(): array return $this->loaders; } - /** - * @return void - */ - protected function loadCatalogue(string $locale) + protected function loadCatalogue(string $locale): void { if (null === $this->cacheDir) { $this->initializeCatalogue($locale); @@ -245,10 +230,7 @@ protected function loadCatalogue(string $locale) } } - /** - * @return void - */ - protected function initializeCatalogue(string $locale) + protected function initializeCatalogue(string $locale): void { $this->assertValidLocale($locale); @@ -384,10 +366,7 @@ private function loadFallbackCatalogues(string $locale): void } } - /** - * @return array - */ - protected function computeFallbackLocales(string $locale) + protected function computeFallbackLocales(string $locale): array { $this->parentLocales ??= json_decode(file_get_contents(__DIR__.'/Resources/data/parents.json'), true); @@ -431,11 +410,9 @@ protected function computeFallbackLocales(string $locale) /** * Asserts that the locale is valid, throws an Exception if not. * - * @return void - * * @throws InvalidArgumentException If the locale contains invalid characters */ - protected function assertValidLocale(string $locale) + protected function assertValidLocale(string $locale): void { if (!preg_match('/^[a-z0-9@_\\.\\-]*$/i', $locale)) { throw new InvalidArgumentException(sprintf('Invalid "%s" locale.', $locale)); diff --git a/site/vendor/symfony/translation/TranslatorBag.php b/site/vendor/symfony/translation/TranslatorBag.php index 84275ee14..3b47aecee 100644 --- a/site/vendor/symfony/translation/TranslatorBag.php +++ b/site/vendor/symfony/translation/TranslatorBag.php @@ -35,7 +35,7 @@ public function addBag(TranslatorBagInterface $bag): void } } - public function getCatalogue(string $locale = null): MessageCatalogueInterface + public function getCatalogue(?string $locale = null): MessageCatalogueInterface { if (null === $locale || !isset($this->catalogues[$locale])) { $this->catalogues[$locale] = new MessageCatalogue($locale); diff --git a/site/vendor/symfony/translation/TranslatorBagInterface.php b/site/vendor/symfony/translation/TranslatorBagInterface.php index a787acf12..365d1f13b 100644 --- a/site/vendor/symfony/translation/TranslatorBagInterface.php +++ b/site/vendor/symfony/translation/TranslatorBagInterface.php @@ -25,7 +25,7 @@ interface TranslatorBagInterface * * @throws InvalidArgumentException If the locale contains invalid characters */ - public function getCatalogue(string $locale = null): MessageCatalogueInterface; + public function getCatalogue(?string $locale = null): MessageCatalogueInterface; /** * Returns all catalogues of the instance. diff --git a/site/vendor/symfony/translation/Writer/TranslationWriter.php b/site/vendor/symfony/translation/Writer/TranslationWriter.php index 61e03cb0e..21604ef18 100644 --- a/site/vendor/symfony/translation/Writer/TranslationWriter.php +++ b/site/vendor/symfony/translation/Writer/TranslationWriter.php @@ -30,10 +30,8 @@ class TranslationWriter implements TranslationWriterInterface /** * Adds a dumper to the writer. - * - * @return void */ - public function addDumper(string $format, DumperInterface $dumper) + public function addDumper(string $format, DumperInterface $dumper): void { $this->dumpers[$format] = $dumper; } @@ -52,11 +50,9 @@ public function getFormats(): array * @param string $format The format to use to dump the messages * @param array $options Options that are passed to the dumper * - * @return void - * * @throws InvalidArgumentException */ - public function write(MessageCatalogue $catalogue, string $format, array $options = []) + 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)); diff --git a/site/vendor/symfony/translation/Writer/TranslationWriterInterface.php b/site/vendor/symfony/translation/Writer/TranslationWriterInterface.php index 5ebb9794a..b3062827b 100644 --- a/site/vendor/symfony/translation/Writer/TranslationWriterInterface.php +++ b/site/vendor/symfony/translation/Writer/TranslationWriterInterface.php @@ -27,9 +27,7 @@ interface TranslationWriterInterface * @param string $format The format to use to dump the messages * @param array $options Options that are passed to the dumper * - * @return void - * * @throws InvalidArgumentException */ - public function write(MessageCatalogue $catalogue, string $format, array $options = []); + public function write(MessageCatalogue $catalogue, string $format, array $options = []): void; } diff --git a/site/vendor/symfony/translation/composer.json b/site/vendor/symfony/translation/composer.json index 32ab49a70..b793e4c98 100644 --- a/site/vendor/symfony/translation/composer.json +++ b/site/vendor/symfony/translation/composer.json @@ -16,35 +16,34 @@ } ], "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, "require-dev": { - "nikic/php-parser": "^4.13", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "nikic/php-parser": "^4.18|^5.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/yaml": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "psr/log": "^1|^2|^3" }, "conflict": { - "symfony/config": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.4", "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4", - "symfony/console": "<5.4" + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4", + "symfony/console": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" diff --git a/site/vendor/symfony/var-exporter/Exception/ClassNotFoundException.php b/site/vendor/symfony/var-exporter/Exception/ClassNotFoundException.php index 4cebe44b0..379a76517 100644 --- a/site/vendor/symfony/var-exporter/Exception/ClassNotFoundException.php +++ b/site/vendor/symfony/var-exporter/Exception/ClassNotFoundException.php @@ -13,7 +13,7 @@ class ClassNotFoundException extends \Exception implements ExceptionInterface { - public function __construct(string $class, \Throwable $previous = null) + public function __construct(string $class, ?\Throwable $previous = null) { parent::__construct(sprintf('Class "%s" not found.', $class), 0, $previous); } diff --git a/site/vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php b/site/vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php index 771ee612d..b9ba225d8 100644 --- a/site/vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php +++ b/site/vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php @@ -13,7 +13,7 @@ class NotInstantiableTypeException extends \Exception implements ExceptionInterface { - public function __construct(string $type, \Throwable $previous = null) + public function __construct(string $type, ?\Throwable $previous = null) { parent::__construct(sprintf('Type "%s" is not instantiable.', $type), 0, $previous); } diff --git a/site/vendor/symfony/var-exporter/LazyGhostTrait.php b/site/vendor/symfony/var-exporter/LazyGhostTrait.php index 539cf3e59..b9b77e73d 100644 --- a/site/vendor/symfony/var-exporter/LazyGhostTrait.php +++ b/site/vendor/symfony/var-exporter/LazyGhostTrait.php @@ -31,7 +31,7 @@ trait LazyGhostTrait * that the initializer doesn't initialize, if any * @param static|null $instance */ - public static function createLazyGhost(\Closure $initializer, array $skippedProperties = null, object $instance = null): static + public static function createLazyGhost(\Closure $initializer, ?array $skippedProperties = null, ?object $instance = null): static { if (self::class !== $class = $instance ? $instance::class : static::class) { $skippedProperties["\0".self::class."\0lazyObjectState"] = true; diff --git a/site/vendor/symfony/var-exporter/LazyProxyTrait.php b/site/vendor/symfony/var-exporter/LazyProxyTrait.php index d683ec3f1..4dd435bcd 100644 --- a/site/vendor/symfony/var-exporter/LazyProxyTrait.php +++ b/site/vendor/symfony/var-exporter/LazyProxyTrait.php @@ -27,7 +27,7 @@ trait LazyProxyTrait * @param \Closure():object $initializer Returns the proxied object * @param static|null $instance */ - public static function createLazyProxy(\Closure $initializer, object $instance = null): static + public static function createLazyProxy(\Closure $initializer, ?object $instance = null): static { if (self::class !== $class = $instance ? $instance::class : static::class) { $skippedProperties = ["\0".self::class."\0lazyObjectState" => true]; diff --git a/site/vendor/symfony/var-exporter/ProxyHelper.php b/site/vendor/symfony/var-exporter/ProxyHelper.php index 9cfd7b92b..b6792ad1d 100644 --- a/site/vendor/symfony/var-exporter/ProxyHelper.php +++ b/site/vendor/symfony/var-exporter/ProxyHelper.php @@ -213,7 +213,7 @@ class_exists(\Symfony\Component\VarExporter\Internal\LazyObjectState::class); EOPHP; } - public static function exportSignature(\ReflectionFunctionAbstract $function, bool $withParameterTypes = true, string &$args = null): string + public static function exportSignature(\ReflectionFunctionAbstract $function, bool $withParameterTypes = true, ?string &$args = null): string { $byRefIndex = 0; $args = ''; @@ -270,7 +270,7 @@ public static function exportSignature(\ReflectionFunctionAbstract $function, bo return $signature; } - public static function exportType(\ReflectionFunctionAbstract|\ReflectionProperty|\ReflectionParameter $owner, bool $noBuiltin = false, \ReflectionType $type = null): ?string + public static function exportType(\ReflectionFunctionAbstract|\ReflectionProperty|\ReflectionParameter $owner, bool $noBuiltin = false, ?\ReflectionType $type = null): ?string { if (!$type ??= $owner instanceof \ReflectionFunctionAbstract ? $owner->getReturnType() : $owner->getType()) { return null; diff --git a/site/vendor/symfony/var-exporter/VarExporter.php b/site/vendor/symfony/var-exporter/VarExporter.php index b5ce3ae9e..22e9b5152 100644 --- a/site/vendor/symfony/var-exporter/VarExporter.php +++ b/site/vendor/symfony/var-exporter/VarExporter.php @@ -37,7 +37,7 @@ final class VarExporter * * @throws ExceptionInterface When the provided value cannot be serialized */ - public static function export(mixed $value, bool &$isStaticValue = null, array &$foundClasses = []): string + public static function export(mixed $value, ?bool &$isStaticValue = null, array &$foundClasses = []): string { $isStaticValue = true;