From a3ebb4424e8645f4bf70755d4ce6cd4de61b19ad Mon Sep 17 00:00:00 2001 From: Serhii Kornelyuk Date: Wed, 31 May 2023 00:43:16 +0300 Subject: [PATCH] [FIX] Version Updater. --- assets/plugins/updater/lang/uk.php | 31 + assets/plugins/updater/plugin.updater.php | 66 +- core/composer.json | 6 - core/composer.lock | 16653 ++++++++-------- core/factory/version.php | 7 +- core/src/Console/SiteUpdateCommand.php | 48 +- core/vendor/autoload.php | 2 +- core/vendor/bin/doctrine-dbal.bat | 5 - core/vendor/bin/jsonlint.bat | 5 - core/vendor/bin/patch-type-declarations.bat | 5 - core/vendor/bin/salo.bat | 5 - core/vendor/bin/var-dump-server.bat | 5 - core/vendor/composer/autoload_classmap.php | 106 +- core/vendor/composer/autoload_files.php | 1 + core/vendor/composer/autoload_psr4.php | 3 +- core/vendor/composer/autoload_real.php | 10 +- core/vendor/composer/autoload_static.php | 126 +- core/vendor/composer/composer/.gitattributes | 19 + core/vendor/composer/composer/.gitignore | 12 + core/vendor/composer/composer/CHANGELOG.md | 18 + core/vendor/composer/composer/composer.lock | 146 +- .../doc/articles/custom-installers.md | 5 +- .../Composer/Autoload/AutoloadGenerator.php | 31 +- .../src/Composer/Command/RequireCommand.php | 7 +- .../src/Composer/Command/ShowCommand.php | 38 +- .../src/Composer/Command/StatusCommand.php | 3 + .../src/Composer/Command/ValidateCommand.php | 3 + .../composer/src/Composer/Composer.php | 4 +- .../src/Composer/Console/Application.php | 3 +- .../Composer/Installer/BinaryInstaller.php | 5 +- .../Installer/InstallationManager.php | 4 +- .../Composer/Installer/InstallerInterface.php | 2 +- .../Composer/Installer/LibraryInstaller.php | 2 + .../Installer/MetapackageInstaller.php | 4 +- .../Composer/Installer/ProjectInstaller.php | 2 +- .../Composer/Package/Loader/ArrayLoader.php | 2 +- .../composer/src/Composer/Package/Locker.php | 24 +- .../src/Composer/Plugin/PluginManager.php | 13 +- .../composer/src/Composer/Util/AuthHelper.php | 8 + .../composer/src/Composer/Util/Platform.php | 2 +- core/vendor/composer/installed.json | 634 +- core/vendor/composer/installed.php | 251 +- .../composer/pcre/phpstan-baseline.neon | 17 - .../redis-session-handler/.gitignore | 2 + core/vendor/doctrine/deprecations/README.md | 7 +- .../lib/Doctrine/Deprecations/Deprecation.php | 40 +- .../cron-expression/CHANGELOG.md | 228 - .../dragonmantank/cron-expression/README.md | 87 - .../cron-expression/composer.json | 47 - .../cron-expression/phpstan.neon | 15 - .../src/Cron/AbstractField.php | 346 - .../src/Cron/CronExpression.php | 568 - .../src/Cron/DayOfMonthField.php | 164 - .../src/Cron/DayOfWeekField.php | 194 - .../cron-expression/src/Cron/FieldFactory.php | 52 - .../src/Cron/FieldFactoryInterface.php | 8 - .../src/Cron/FieldInterface.php | 46 - .../cron-expression/src/Cron/HoursField.php | 212 - .../cron-expression/src/Cron/MinutesField.php | 96 - .../cron-expression/src/Cron/MonthField.php | 61 - .../email-validator/src/EmailValidator.php | 10 +- .../src/Exception/AtextAfterCFWS.php | 9 - .../src/Exception/CRLFAtTheEnd.php | 9 - .../email-validator/src/Exception/CRLFX2.php | 9 - .../email-validator/src/Exception/CRNoLF.php | 9 - .../src/Exception/CharNotAllowed.php | 9 - .../src/Exception/CommaInDomain.php | 9 - .../src/Exception/ConsecutiveAt.php | 9 - .../src/Exception/ConsecutiveDot.php | 9 - .../src/Exception/DomainAcceptsNoMail.php | 9 - .../src/Exception/DomainHyphened.php | 9 - .../src/Exception/DotAtEnd.php | 9 - .../src/Exception/DotAtStart.php | 9 - .../src/Exception/ExpectingAT.php | 9 - .../src/Exception/ExpectingATEXT.php | 9 - .../src/Exception/ExpectingCTEXT.php | 9 - .../src/Exception/ExpectingDTEXT.php | 9 - .../Exception/ExpectingDomainLiteralClose.php | 9 - .../src/Exception/ExpectingQPair.php | 9 - .../src/Exception/InvalidEmail.php | 14 - .../src/Exception/LocalOrReservedDomain.php | 9 - .../src/Exception/NoDNSRecord.php | 9 - .../src/Exception/NoDomainPart.php | 9 - .../src/Exception/NoLocalPart.php | 9 - .../src/Exception/UnclosedComment.php | 9 - .../src/Exception/UnclosedQuotedString.php | 9 - .../src/Exception/UnopenedComment.php | 9 - .../email-validator/src/Parser/Parser.php | 249 - .../src/Result/MultipleErrors.php | 56 + .../src/Result/Reason/CRLFX2.php | 16 + .../src/Result/Reason/CRNoLF.php | 16 + .../src/Result/Reason/ConsecutiveAt.php | 17 + .../src/Result/Reason/ConsecutiveDot.php | 16 + .../src/Result/Reason/DomainHyphened.php | 16 + .../src/Result/Reason/DomainTooLong.php | 16 + .../src/Result/Reason/DotAtEnd.php | 16 + .../src/Result/Reason/DotAtStart.php | 16 + .../src/Result/Reason/EmptyReason.php | 16 + .../src/Result/Reason/ExpectingATEXT.php | 16 + .../src/Result/Reason/ExpectingCTEXT.php | 16 + .../src/Result/Reason/ExpectingDTEXT.php | 16 + .../src/Result/Reason/LabelTooLong.php | 16 + .../src/Result/Reason/NoDomainPart.php | 16 + .../src/Result/Reason/NoLocalPart.php | 16 + .../src/Result/Reason/RFCWarnings.php | 16 + .../src/Result/Reason/SpoofEmail.php | 17 + .../Result/Reason/UnableToGetDNSRecord.php | 19 + .../src/Result/Reason/UnclosedComment.php | 16 + .../Result/Reason/UnclosedQuotedString.php | 16 + .../src/Validation/EmailValidation.php | 8 +- .../src/Validation/Error/RFCWarnings.php | 11 - .../src/Validation/Error/SpoofEmail.php | 11 - .../{ => Extra}/SpoofCheckValidation.php | 17 +- .../src/Validation/MultipleErrors.php | 32 - .../Validation/NoRFCWarningsValidation.php | 10 +- .../src/Warning/DomainTooLong.php | 14 - .../src/Warning/LabelTooLong.php | 14 - .../email-validator/src/Warning/Warning.php | 2 +- .../document-manager/composer.json | 18 - .../src/Facades/DocumentManager.php | 16 - .../Interfaces/DocumentServiceInterface.php | 38 - .../DocumentManagerServiceProvider.php | 19 - .../src/Services/DocumentManager.php | 77 - .../Services/Documents/DocumentClearCart.php | 154 - .../src/Services/Documents/DocumentCreate.php | 357 - .../src/Services/Documents/DocumentDelete.php | 164 - .../Services/Documents/DocumentDuplicate.php | 206 - .../src/Services/Documents/DocumentEdit.php | 228 - .../Services/Documents/DocumentPublish.php | 139 - .../Services/Documents/DocumentSetGroups.php | 166 - .../Services/Documents/DocumentUndelete.php | 148 - .../Services/Documents/DocumentUnpublish.php | 137 - .../user-manager/composer.json | 18 - .../user-manager/src/Facades/UserManager.php | 16 - .../src/Interfaces/UserServiceInterface.php | 38 - .../Providers/UserManagerServiceProvider.php | 19 - .../user-manager/src/Services/UserManager.php | 160 - .../Users/ExcludeStandardFieldsTrait.php | 64 - .../Users/SafelyDestroyUserSessionTrait.php | 32 - .../src/Services/Users/UserChangePassword.php | 157 - .../src/Services/Users/UserClearSettings.php | 119 - .../src/Services/Users/UserDelete.php | 147 - .../src/Services/Users/UserEdit.php | 171 - .../Services/Users/UserGeneratePassword.php | 120 - .../src/Services/Users/UserGetValues.php | 120 - .../src/Services/Users/UserGetVerifiedKey.php | 117 - .../Services/Users/UserHashChangePassword.php | 140 - .../src/Services/Users/UserHashLogin.php | 93 - .../src/Services/Users/UserLogin.php | 438 - .../src/Services/Users/UserLoginById.php | 86 - .../src/Services/Users/UserLogout.php | 178 - .../Users/UserManagerChangePassword.php | 132 - .../src/Services/Users/UserRefreshToken.php | 142 - .../src/Services/Users/UserRegistration.php | 160 - .../src/Services/Users/UserRepairPassword.php | 120 - .../src/Services/Users/UserSaveSettings.php | 151 - .../src/Services/Users/UserSaveValues.php | 151 - .../src/Services/Users/UserSetGroups.php | 48 - .../src/Services/Users/UserSetRole.php | 112 - .../src/Services/Users/UserVerified.php | 121 - .../guzzlehttp/promises/src/functions.php | 363 - .../promises/src/functions_include.php | 6 - .../guzzlehttp/psr7/src/LazyOpenStream.php | 1 - .../guzzlehttp/psr7/src/MessageTrait.php | 28 - core/vendor/illuminate/cache/RedisLock.php | 4 +- core/vendor/illuminate/cache/RedisStore.php | 12 +- .../illuminate/collections/LazyCollection.php | 2 +- .../console/Scheduling/ManagesFrequencies.php | 4 +- .../vendor/illuminate/database/Connection.php | 67 +- .../Eloquent/Concerns/HasAttributes.php | 6 +- .../Eloquent/Concerns/HidesAttributes.php | 6 +- .../database/Eloquent/Factories/Factory.php | 2 +- core/vendor/illuminate/database/Grammar.php | 36 + .../illuminate/database/MySqlConnection.php | 21 +- .../database/PostgresConnection.php | 32 +- .../database/Query/Grammars/Grammar.php | 2 +- .../illuminate/database/SQLiteConnection.php | 21 +- .../database/SqlServerConnection.php | 21 +- .../illuminate/routing/ResourceRegistrar.php | 4 +- core/vendor/illuminate/support/Facades/DB.php | 1 + .../illuminate/support/Facades/Hash.php | 1 + core/vendor/illuminate/support/Manager.php | 10 +- core/vendor/illuminate/support/Sleep.php | 23 + .../validation/ClosureValidationRule.php | 2 +- .../Concerns/ValidatesAttributes.php | 9 +- .../Compilers/Concerns/CompilesClasses.php | 2 +- .../james-heinrich/phpthumb/.gitattributes | 22 + .../vendor/james-heinrich/phpthumb/.gitignore | 331 + core/vendor/nesbot/carbon/composer.json | 3 +- core/vendor/nesbot/carbon/readme.md | 33 +- core/vendor/nesbot/carbon/sponsors.php | 87 + .../nesbot/carbon/src/Carbon/Carbon.php | 934 +- .../carbon/src/Carbon/CarbonImmutable.php | 934 +- .../carbon/src/Carbon/CarbonInterface.php | 68 +- .../carbon/src/Carbon/CarbonInterval.php | 11 +- .../nesbot/carbon/src/Carbon/Factory.php | 2 +- .../carbon/src/Carbon/FactoryImmutable.php | 2 +- .../nesbot/carbon/src/Carbon/Lang/en_CH.php | 8 + .../carbon/src/Carbon/Traits/Creator.php | 13 +- .../carbon/src/Carbon/Traits/Options.php | 2 +- .../nesbot/carbon/src/Carbon/Traits/Test.php | 7 +- .../nesbot/carbon/src/Carbon/Traits/Units.php | 16 +- .../predis/src/Command/Redis/BITCOUNT.php | 34 + .../predis/src/Command/Redis/BITPOS.php | 34 + .../predis/predis/src/Command/Redis/BRPOP.php | 42 + .../predis/predis/src/Command/Redis/DEL.php | 39 + .../predis/src/Command/Redis/EXPIRE.php | 36 + .../predis/src/Command/Redis/EXPIREAT.php | 35 + .../src/Command/Redis/GEORADIUSBYMEMBER.php | 32 + .../predis/predis/src/Command/Redis/HDEL.php | 39 + .../predis/predis/src/Command/Redis/HMGET.php | 39 + .../predis/predis/src/Command/Redis/INFO.php | 127 + .../predis/predis/src/Command/Redis/LPUSH.php | 39 + .../predis/predis/src/Command/Redis/MGET.php | 39 + .../predis/predis/src/Command/Redis/PFADD.php | 39 + .../predis/src/Command/Redis/PFCOUNT.php | 39 + .../predis/src/Command/Redis/PFMERGE.php | 39 + .../predis/src/Command/Redis/PSUBSCRIBE.php | 39 + .../predis/src/Command/Redis/PUNSUBSCRIBE.php | 39 + .../predis/predis/src/Command/Redis/RPUSH.php | 39 + .../predis/predis/src/Command/Redis/SADD.php | 39 + .../predis/src/Command/Redis/SINTER.php | 39 + .../predis/predis/src/Command/Redis/SREM.php | 39 + .../predis/src/Command/Redis/SUBSCRIBE.php | 39 + .../predis/src/Command/Redis/SUNION.php | 39 + .../predis/src/Command/Redis/UNSUBSCRIBE.php | 39 + .../predis/predis/src/Command/Redis/ZREM.php | 39 + .../predis/src/Command/Redis/ZUNIONSTORE.php | 67 + core/vendor/psr/container/.gitignore | 3 + core/vendor/psr/container/composer.json | 5 + .../psr/container/src/ContainerInterface.php | 2 +- core/vendor/psr/event-dispatcher/.gitignore | 2 + .../vendor/psr/log/Psr/Log/AbstractLogger.php | 128 - .../vendor/psr/log/Psr/Log/Test/DummyTest.php | 18 - .../log/Psr/Log/Test/LoggerInterfaceTest.php | 138 - .../psr/log/Psr/Log/Test/TestLogger.php | 147 - core/vendor/psr/log/src/AbstractLogger.php | 15 + .../Log => src}/InvalidArgumentException.php | 0 .../psr/log/{Psr/Log => src}/LogLevel.php | 0 .../{Psr/Log => src}/LoggerAwareInterface.php | 0 .../log/{Psr/Log => src}/LoggerAwareTrait.php | 2 +- .../log/{Psr/Log => src}/LoggerInterface.php | 0 .../psr/log/{Psr/Log => src}/LoggerTrait.php | 0 .../psr/log/{Psr/Log => src}/NullLogger.php | 0 core/vendor/psr/simple-cache/composer.json | 6 +- .../psr/simple-cache/src/CacheException.php | 2 +- .../psr/simple-cache/src/CacheInterface.php | 24 +- core/vendor/seld/phar-utils/.gitignore | 1 + core/vendor/seld/signal-handler/.gitignore | 5 + core/vendor/symfony/console/Application.php | 107 +- core/vendor/symfony/console/CHANGELOG.md | 7 + .../symfony/console/Command/Command.php | 18 +- .../console/Command/CompleteCommand.php | 12 +- .../console/Command/DumpCompletionCommand.php | 8 +- .../symfony/console/Command/HelpCommand.php | 14 +- .../symfony/console/Command/ListCommand.php | 11 +- .../symfony/console/Command/LockableTrait.php | 4 +- .../Command/SignalableCommandInterface.php | 6 +- .../console/Completion/CompletionInput.php | 2 +- .../AddConsoleCommandPass.php | 3 + .../Descriptor/ApplicationDescription.php | 2 +- .../symfony/console/Descriptor/Descriptor.php | 22 +- .../Descriptor/DescriptorInterface.php | 3 + .../console/Descriptor/JsonDescriptor.php | 12 +- .../console/Descriptor/MarkdownDescriptor.php | 38 +- .../Descriptor/ReStructuredTextDescriptor.php | 272 + .../console/Descriptor/TextDescriptor.php | 20 +- .../console/Descriptor/XmlDescriptor.php | 14 +- .../console/Event/ConsoleSignalEvent.php | 23 +- .../console/EventListener/ErrorListener.php | 6 + .../console/Formatter/OutputFormatter.php | 9 + .../Formatter/OutputFormatterInterface.php | 4 + .../Formatter/OutputFormatterStyle.php | 15 + .../OutputFormatterStyleInterface.php | 10 + .../Formatter/OutputFormatterStyleStack.php | 4 + .../console/Helper/DescriptorHelper.php | 4 + core/vendor/symfony/console/Helper/Dumper.php | 14 +- core/vendor/symfony/console/Helper/Helper.php | 14 +- .../console/Helper/HelperInterface.php | 2 + .../symfony/console/Helper/HelperSet.php | 3 + .../console/Helper/InputAwareHelper.php | 3 + .../symfony/console/Helper/ProgressBar.php | 79 +- .../console/Helper/ProgressIndicator.php | 30 +- .../symfony/console/Helper/QuestionHelper.php | 33 +- .../console/Helper/SymfonyQuestionHelper.php | 6 + core/vendor/symfony/console/Helper/Table.php | 16 +- .../symfony/console/Helper/TableCellStyle.php | 4 +- .../symfony/console/Input/ArgvInput.php | 18 +- .../symfony/console/Input/ArrayInput.php | 9 +- core/vendor/symfony/console/Input/Input.php | 29 +- .../symfony/console/Input/InputArgument.php | 4 +- .../console/Input/InputAwareInterface.php | 2 + .../symfony/console/Input/InputDefinition.php | 14 + .../symfony/console/Input/InputInterface.php | 10 + .../symfony/console/Input/InputOption.php | 3 + .../Input/StreamableInputInterface.php | 2 + .../symfony/console/Output/AnsiColorMode.php | 22 +- .../symfony/console/Output/BufferedOutput.php | 3 + .../symfony/console/Output/ConsoleOutput.php | 12 + .../console/Output/ConsoleOutputInterface.php | 3 + .../console/Output/ConsoleSectionOutput.php | 9 +- .../symfony/console/Output/NullOutput.php | 15 + core/vendor/symfony/console/Output/Output.php | 17 + .../console/Output/OutputInterface.php | 11 + .../symfony/console/Output/StreamOutput.php | 3 + .../console/Output/TrimmedBufferOutput.php | 3 + .../symfony/console/Question/Question.php | 12 +- core/vendor/symfony/console/README.md | 16 + .../symfony/console/Resources/completion.bash | 10 + .../symfony/console/Style/OutputStyle.php | 21 + .../symfony/console/Style/StyleInterface.php | 28 + .../symfony/console/Style/SymfonyStyle.php | 64 +- core/vendor/symfony/console/Terminal.php | 12 +- .../symfony/console/Tester/TesterTrait.php | 2 +- core/vendor/symfony/console/composer.json | 10 +- .../deprecation-contracts/composer.json | 2 +- .../deprecation-contracts/function.php | 2 +- .../vendor/symfony/error-handler/CHANGELOG.md | 5 + .../error-handler/DebugClassLoader.php | 19 +- .../ClassNotFoundErrorEnhancer.php | 2 +- .../symfony/error-handler/ErrorHandler.php | 15 +- .../ErrorRenderer/HtmlErrorRenderer.php | 28 +- .../Exception/FlattenException.php | 52 +- .../Resources/assets/css/exception.css | 145 +- .../Resources/assets/js/exception.js | 515 +- .../Resources/views/exception.html.php | 1 - .../Resources/views/traces.html.php | 8 + .../symfony/error-handler/composer.json | 5 +- .../event-dispatcher-contracts/Event.php | 2 +- .../event-dispatcher-contracts/composer.json | 5 +- .../symfony/event-dispatcher/CHANGELOG.md | 5 + .../Debug/TraceableEventDispatcher.php | 23 +- .../Debug/WrappedListener.php | 2 +- .../AddEventAliasesPass.php | 14 +- .../RegisterListenersPass.php | 74 +- .../event-dispatcher/EventDispatcher.php | 16 +- .../EventDispatcherInterface.php | 19 +- .../symfony/event-dispatcher/GenericEvent.php | 50 +- .../ImmutableEventDispatcher.php | 12 + .../LegacyEventDispatcherProxy.php | 31 - .../symfony/event-dispatcher/composer.json | 11 +- core/vendor/symfony/filesystem/Filesystem.php | 46 +- core/vendor/symfony/finder/Finder.php | 120 +- core/vendor/symfony/finder/Gitignore.php | 4 +- core/vendor/symfony/finder/Glob.php | 4 +- .../finder/Iterator/CustomFilterIterator.php | 7 +- .../Iterator/DateRangeFilterIterator.php | 7 +- .../Iterator/DepthRangeFilterIterator.php | 7 +- .../Iterator/FileTypeFilterIterator.php | 7 +- .../Iterator/FilecontentFilterIterator.php | 9 +- .../Iterator/FilenameFilterIterator.php | 9 +- .../Iterator/MultiplePcreFilterIterator.php | 12 +- .../finder/Iterator/PathFilterIterator.php | 9 +- .../Iterator/RecursiveDirectoryIterator.php | 49 +- .../Iterator/SizeRangeFilterIterator.php | 7 +- .../finder/Iterator/SortableIterator.php | 38 +- .../Iterator/VcsIgnoredFilterIterator.php | 4 +- core/vendor/symfony/finder/SplFileInfo.php | 16 +- .../symfony/http-foundation/AcceptHeader.php | 9 +- .../http-foundation/BinaryFileResponse.php | 4 +- .../symfony/http-foundation/CHANGELOG.md | 15 + .../ExpressionRequestMatcher.php | 5 +- .../symfony/http-foundation/FileBag.php | 11 +- .../symfony/http-foundation/HeaderBag.php | 17 +- .../symfony/http-foundation/InputBag.php | 52 +- .../symfony/http-foundation/IpUtils.php | 79 +- .../symfony/http-foundation/ParameterBag.php | 84 +- .../symfony/http-foundation/Request.php | 52 +- .../http-foundation/RequestMatcher.php | 20 +- .../RequestMatcher/IpsRequestMatcher.php | 4 +- .../RequestMatcher/IsJsonRequestMatcher.php | 8 +- .../RequestMatcher/MethodRequestMatcher.php | 4 +- .../RequestMatcher/SchemeRequestMatcher.php | 4 +- .../symfony/http-foundation/RequestStack.php | 2 + .../symfony/http-foundation/Response.php | 54 +- .../http-foundation/ResponseHeaderBag.php | 21 + .../Session/Attribute/AttributeBag.php | 12 + .../Attribute/AttributeBagInterface.php | 5 + .../Session/Flash/AutoExpireFlashBag.php | 15 + .../Session/Flash/FlashBag.php | 15 + .../Session/Flash/FlashBagInterface.php | 6 + .../http-foundation/Session/Session.php | 21 + .../Session/SessionBagInterface.php | 2 + .../Session/SessionInterface.php | 14 + .../http-foundation/Session/SessionUtils.php | 2 +- .../Handler/AbstractSessionHandler.php | 14 +- .../Handler/MarshallingSessionHandler.php | 10 +- .../Handler/MemcachedSessionHandler.php | 8 +- .../Handler/MigratingSessionHandler.php | 21 +- .../Storage/Handler/MongoDbSessionHandler.php | 8 +- .../Storage/Handler/NullSessionHandler.php | 10 +- .../Storage/Handler/PdoSessionHandler.php | 81 +- .../Storage/Handler/RedisSessionHandler.php | 11 +- .../Storage/Handler/SessionHandlerFactory.php | 6 +- .../Storage/Handler/StrictSessionHandler.php | 10 +- .../Session/Storage/MetadataBag.php | 7 + .../Storage/MockArraySessionStorage.php | 24 + .../Storage/MockFileSessionStorage.php | 3 + .../Session/Storage/NativeSessionStorage.php | 24 + .../Storage/PhpBridgeSessionStorage.php | 3 + .../Session/Storage/Proxy/AbstractProxy.php | 4 + .../Storage/Proxy/SessionHandlerProxy.php | 10 +- .../Storage/SessionStorageInterface.php | 10 + .../http-foundation/StreamedJsonResponse.php | 143 + .../http-foundation/StreamedResponse.php | 11 +- .../Constraint/ResponseCookieValueSame.php | 4 +- .../Test/Constraint/ResponseHasCookie.php | 4 +- .../symfony/http-foundation/UrlHelper.php | 39 +- .../symfony/http-foundation/composer.json | 11 +- .../Attribute/AsTargetedValueResolver.php | 24 + .../http-kernel/Attribute/MapDateTime.php | 9 +- .../Attribute/MapQueryParameter.php | 38 + .../http-kernel/Attribute/MapQueryString.php | 35 + .../Attribute/MapRequestPayload.php | 36 + .../http-kernel/Attribute/ValueResolver.php | 27 + .../http-kernel/Attribute/WithHttpStatus.php | 28 + .../http-kernel/Attribute/WithLogLevel.php | 31 + .../symfony/http-kernel/Bundle/Bundle.php | 13 +- .../http-kernel/Bundle/BundleInterface.php | 6 + core/vendor/symfony/http-kernel/CHANGELOG.md | 15 + .../CacheClearer/CacheClearerInterface.php | 2 + .../CacheClearer/ChainCacheClearer.php | 2 +- .../CacheClearer/Psr6CacheClearer.php | 3 + .../http-kernel/CacheWarmer/CacheWarmer.php | 3 + .../CacheWarmer/CacheWarmerAggregate.php | 22 +- .../Controller/ArgumentResolver.php | 67 +- .../DateTimeValueResolver.php | 24 +- .../QueryParameterValueResolver.php | 100 + .../RequestPayloadValueResolver.php | 189 + .../TraceableValueResolver.php | 4 +- .../ContainerControllerResolver.php | 2 +- .../Controller/ControllerResolver.php | 4 +- .../DataCollector/AjaxDataCollector.php | 4 +- .../DataCollector/ConfigDataCollector.php | 8 +- .../DataCollector/DataCollector.php | 4 +- .../DataCollector/DataCollectorInterface.php | 2 + .../DataCollector/DumpDataCollector.php | 45 +- .../DataCollector/EventDataCollector.php | 78 +- .../DataCollector/ExceptionDataCollector.php | 6 +- .../LateDataCollectorInterface.php | 2 + .../DataCollector/LoggerDataCollector.php | 14 +- .../DataCollector/MemoryDataCollector.php | 8 +- .../DataCollector/RequestDataCollector.php | 48 +- .../DataCollector/RouterDataCollector.php | 10 +- .../DataCollector/TimeDataCollector.php | 8 +- .../Debug/ErrorHandlerConfigurator.php | 107 + .../http-kernel/Debug/FileLinkFormatter.php | 10 +- .../Debug/TraceableEventDispatcher.php | 6 + .../AddAnnotatedClassesToCachePass.php | 3 + .../ConfigurableExtension.php | 4 +- .../ControllerArgumentValueResolverPass.php | 34 +- .../DependencyInjection/Extension.php | 2 + .../FragmentRendererPass.php | 3 + .../DependencyInjection/LoggerPass.php | 3 + .../MergeExtensionConfigurationPass.php | 3 + ...RegisterControllerArgumentLocatorsPass.php | 5 +- .../RegisterLocaleAwareServicesPass.php | 3 + ...oveEmptyControllerArgumentLocatorsPass.php | 3 + .../ResettableServicePass.php | 3 + .../DependencyInjection/ServicesResetter.php | 12 +- .../Event/ControllerArgumentsEvent.php | 2 +- .../http-kernel/Event/ControllerEvent.php | 2 +- .../http-kernel/Event/RequestEvent.php | 2 + .../EventListener/AbstractSessionListener.php | 11 +- .../AddRequestFormatsListener.php | 2 +- .../EventListener/CacheAttributeListener.php | 4 + .../EventListener/DebugHandlersListener.php | 95 +- .../EventListener/DumpListener.php | 8 +- .../EventListener/ErrorListener.php | 78 +- .../EventListener/FragmentListener.php | 4 +- .../EventListener/LocaleListener.php | 10 +- .../EventListener/ProfilerListener.php | 6 +- .../EventListener/ResponseListener.php | 2 +- .../EventListener/RouterListener.php | 8 +- .../StreamedResponseListener.php | 2 +- .../EventListener/SurrogateListener.php | 2 +- .../EventListener/ValidateRequestListener.php | 2 +- .../http-kernel/Exception/HttpException.php | 3 + .../Exception/ResolverNotFoundException.php | 33 + .../http-kernel/Fragment/FragmentHandler.php | 2 + .../Fragment/InlineFragmentRenderer.php | 6 + .../Fragment/RoutableFragmentRenderer.php | 2 + .../HttpCache/AbstractSurrogate.php | 20 + .../symfony/http-kernel/HttpCache/Esi.php | 17 +- .../http-kernel/HttpCache/HttpCache.php | 53 +- .../HttpCache/ResponseCacheStrategy.php | 10 +- .../ResponseCacheStrategyInterface.php | 4 + .../symfony/http-kernel/HttpCache/Ssi.php | 16 +- .../symfony/http-kernel/HttpCache/Store.php | 21 +- .../http-kernel/HttpCache/StoreInterface.php | 4 + .../HttpCache/SurrogateInterface.php | 4 + .../vendor/symfony/http-kernel/HttpKernel.php | 7 +- .../symfony/http-kernel/HttpKernelBrowser.php | 5 + core/vendor/symfony/http-kernel/Kernel.php | 68 +- .../symfony/http-kernel/KernelInterface.php | 6 + .../http-kernel/Log/DebugLoggerInterface.php | 2 + .../Profiler/FileProfilerStorage.php | 41 +- .../symfony/http-kernel/Profiler/Profile.php | 28 + .../symfony/http-kernel/Profiler/Profiler.php | 15 +- .../Profiler/ProfilerStorageInterface.php | 2 + .../http-kernel/RebootableInterface.php | 2 + .../http-kernel/Resources/welcome.html.php | 4 +- .../http-kernel/TerminableInterface.php | 2 + core/vendor/symfony/http-kernel/composer.json | 28 +- core/vendor/symfony/mime/Address.php | 2 +- core/vendor/symfony/mime/CHANGELOG.md | 6 + .../AddMimeTypeGuesserPass.php | 3 + core/vendor/symfony/mime/Email.php | 14 +- .../symfony/mime/Header/AbstractHeader.php | 12 +- .../vendor/symfony/mime/Header/DateHeader.php | 4 +- .../symfony/mime/Header/HeaderInterface.php | 11 + core/vendor/symfony/mime/Header/Headers.php | 4 +- .../mime/Header/IdentificationHeader.php | 6 +- .../symfony/mime/Header/MailboxHeader.php | 4 +- .../symfony/mime/Header/MailboxListHeader.php | 8 +- .../mime/Header/ParameterizedHeader.php | 4 +- .../vendor/symfony/mime/Header/PathHeader.php | 4 +- .../mime/Header/UnstructuredHeader.php | 4 + core/vendor/symfony/mime/Message.php | 3 + core/vendor/symfony/mime/MessageConverter.php | 6 +- core/vendor/symfony/mime/MimeTypes.php | 4 +- core/vendor/symfony/mime/Part/TextPart.php | 8 + core/vendor/symfony/mime/RawMessage.php | 2 + .../polyfill-php83}/LICENSE | 10 +- core/vendor/symfony/polyfill-php83/Php83.php | 41 + core/vendor/symfony/polyfill-php83/README.md | 14 + .../symfony/polyfill-php83/bootstrap.php | 20 + .../symfony/polyfill-php83/composer.json | 36 + .../Exception/ProcessFailedException.php | 3 + .../Exception/ProcessTimedOutException.php | 11 +- .../symfony/process/ExecutableFinder.php | 4 + core/vendor/symfony/process/InputStream.php | 10 +- core/vendor/symfony/process/PhpProcess.php | 3 + .../symfony/process/Pipes/AbstractPipes.php | 6 +- .../symfony/process/Pipes/PipesInterface.php | 2 +- .../symfony/process/Pipes/WindowsPipes.php | 2 +- core/vendor/symfony/process/Process.php | 36 +- core/vendor/symfony/routing/Alias.php | 11 +- .../symfony/routing/Annotation/Route.php | 57 + core/vendor/symfony/routing/CompiledRoute.php | 52 +- .../RoutingResolverPass.php | 22 +- .../Exception/MethodNotAllowedException.php | 10 +- .../Generator/CompiledUrlGenerator.php | 6 +- .../ConfigurableRequirementsInterface.php | 6 +- .../Dumper/GeneratorDumperInterface.php | 8 +- .../routing/Generator/UrlGenerator.php | 10 +- .../Generator/UrlGeneratorInterface.php | 4 +- .../routing/Loader/AnnotationClassLoader.php | 23 +- .../Loader/AnnotationDirectoryLoader.php | 8 +- .../Loader/Configurator/AliasConfigurator.php | 2 +- .../Configurator/CollectionConfigurator.php | 5 - .../Configurator/ImportConfigurator.php | 11 +- .../Loader/Configurator/RouteConfigurator.php | 2 +- .../Loader/Configurator/Traits/AddTrait.php | 4 +- .../Loader/Configurator/Traits/HostTrait.php | 2 +- .../Traits/LocalizedRouteTrait.php | 2 +- .../Configurator/Traits/PrefixTrait.php | 2 +- .../Loader/Configurator/Traits/RouteTrait.php | 24 +- .../symfony/routing/Loader/ObjectLoader.php | 13 +- .../routing/Loader/Psr4DirectoryLoader.php | 8 +- .../symfony/routing/Loader/XmlFileLoader.php | 6 + .../symfony/routing/Loader/YamlFileLoader.php | 6 + .../Dumper/CompiledUrlMatcherDumper.php | 5 +- .../Dumper/CompiledUrlMatcherTrait.php | 8 +- .../Matcher/Dumper/MatcherDumperInterface.php | 8 +- .../Matcher/Dumper/StaticPrefixCollection.php | 14 +- .../Matcher/ExpressionLanguageProvider.php | 8 +- .../RedirectableUrlMatcherInterface.php | 4 +- .../Matcher/RequestMatcherInterface.php | 4 +- .../routing/Matcher/TraceableUrlMatcher.php | 10 +- .../symfony/routing/Matcher/UrlMatcher.php | 11 +- .../routing/Matcher/UrlMatcherInterface.php | 4 +- .../vendor/symfony/routing/RequestContext.php | 86 +- .../routing/RequestContextAwareInterface.php | 6 +- core/vendor/symfony/routing/Route.php | 4 +- .../symfony/routing/RouteCollection.php | 66 +- .../routing/RouteCollectionBuilder.php | 364 - core/vendor/symfony/routing/RouteCompiler.php | 7 +- .../routing/RouteCompilerInterface.php | 4 +- core/vendor/symfony/routing/Router.php | 15 + core/vendor/symfony/routing/composer.json | 6 - .../ServiceSubscriberInterface.php | 2 +- .../Test/ServiceLocatorTest.php | 80 +- .../Test/ServiceLocatorTestCase.php | 92 + .../symfony/service-contracts/composer.json | 5 +- core/vendor/symfony/string/AbstractString.php | 207 +- .../symfony/string/AbstractUnicodeString.php | 71 +- core/vendor/symfony/string/ByteString.php | 86 +- .../vendor/symfony/string/CodePointString.php | 40 +- core/vendor/symfony/string/LazyString.php | 4 +- .../symfony/string/Slugger/AsciiSlugger.php | 7 +- core/vendor/symfony/string/UnicodeString.php | 55 +- core/vendor/symfony/string/composer.json | 4 +- .../Test/TranslatorTest.php | 6 +- .../TranslatorInterface.php | 11 +- .../translation-contracts/composer.json | 5 +- .../Catalogue/AbstractOperation.php | 2 + .../translation/Catalogue/MergeOperation.php | 3 + .../Catalogue/OperationInterface.php | 20 +- .../translation/Catalogue/TargetOperation.php | 3 + .../CatalogueMetadataAwareInterface.php | 4 + .../Command/TranslationPullCommand.php | 2 +- .../Command/TranslationPushCommand.php | 2 +- .../translation/Command/XliffLintCommand.php | 46 +- .../TranslationDataCollector.php | 17 +- .../translation/DataCollectorTranslator.php | 5 +- .../TranslationDumperPass.php | 22 +- .../TranslationExtractorPass.php | 22 +- .../DependencyInjection/TranslatorPass.php | 40 +- .../TranslatorPathsPass.php | 3 + .../translation/Dumper/CsvFileDumper.php | 2 + .../translation/Dumper/DumperInterface.php | 2 + .../symfony/translation/Dumper/FileDumper.php | 13 +- .../translation/Dumper/IcuResFileDumper.php | 2 +- .../translation/Dumper/PoFileDumper.php | 2 +- .../translation/Dumper/XliffFileDumper.php | 4 +- .../Exception/UnsupportedSchemeException.php | 2 +- .../Extractor/AbstractFileExtractor.php | 15 +- .../translation/Extractor/ChainExtractor.php | 8 + .../Extractor/ExtractorInterface.php | 6 +- .../translation/Extractor/PhpAstExtractor.php | 4 +- .../translation/Extractor/PhpExtractor.php | 14 +- .../Extractor/PhpStringTokenParser.php | 12 +- .../Extractor/Visitor/ConstraintVisitor.php | 6 +- .../Formatter/MessageFormatterInterface.php | 4 +- .../translation/Loader/ArrayLoader.php | 6 +- .../translation/Loader/CsvFileLoader.php | 2 + .../translation/Loader/LoaderInterface.php | 8 +- .../translation/Loader/MoFileLoader.php | 2 +- .../translation/Loader/PoFileLoader.php | 4 +- .../translation/Loader/QtFileLoader.php | 1 - .../translation/Loader/XliffFileLoader.php | 6 +- .../symfony/translation/LoggingTranslator.php | 5 +- .../symfony/translation/MessageCatalogue.php | 34 +- .../translation/MessageCatalogueInterface.php | 12 + .../translation/MetadataAwareInterface.php | 8 +- .../Provider/AbstractProviderFactory.php | 12 +- .../symfony/translation/Provider/Dsn.php | 30 +- .../TranslationProviderCollectionFactory.php | 4 +- core/vendor/symfony/translation/README.md | 2 +- .../translation/Reader/TranslationReader.php | 7 +- .../Reader/TranslationReaderInterface.php | 2 + .../Resources/bin/translation-status.php | 16 +- .../translation/TranslatableMessage.php | 10 +- .../vendor/symfony/translation/Translator.php | 27 +- .../symfony/translation/TranslatorBag.php | 2 +- .../translation/TranslatorBagInterface.php | 15 +- .../translation/Util/ArrayConverter.php | 8 +- .../symfony/translation/Util/XliffUtils.php | 5 - .../translation/Writer/TranslationWriter.php | 10 +- .../Writer/TranslationWriterInterface.php | 2 + core/vendor/symfony/translation/composer.json | 14 +- core/vendor/symfony/var-dumper/CHANGELOG.md | 8 + .../symfony/var-dumper/Caster/AmqpCaster.php | 15 + .../symfony/var-dumper/Caster/Caster.php | 2 + .../symfony/var-dumper/Caster/ClassStub.php | 7 +- .../symfony/var-dumper/Caster/DOMCaster.php | 45 + .../symfony/var-dumper/Caster/DateCaster.php | 12 + .../var-dumper/Caster/DoctrineCaster.php | 9 + .../var-dumper/Caster/ExceptionCaster.php | 41 +- .../symfony/var-dumper/Caster/FiberCaster.php | 3 + .../symfony/var-dumper/Caster/IntlCaster.php | 15 + .../symfony/var-dumper/Caster/LinkStub.php | 2 +- .../var-dumper/Caster/MemcachedCaster.php | 3 + .../symfony/var-dumper/Caster/PdoCaster.php | 6 + .../symfony/var-dumper/Caster/PgSqlCaster.php | 9 + .../var-dumper/Caster/ProxyManagerCaster.php | 3 + .../var-dumper/Caster/RdKafkaCaster.php | 36 + .../symfony/var-dumper/Caster/RedisCaster.php | 32 +- .../var-dumper/Caster/ReflectionCaster.php | 51 +- .../var-dumper/Caster/ResourceCaster.php | 17 +- .../symfony/var-dumper/Caster/ScalarStub.php | 27 + .../symfony/var-dumper/Caster/SplCaster.php | 52 +- .../symfony/var-dumper/Caster/StubCaster.php | 23 + .../var-dumper/Caster/SymfonyCaster.php | 18 + .../var-dumper/Caster/XmlReaderCaster.php | 3 + .../var-dumper/Caster/XmlResourceCaster.php | 3 + .../var-dumper/Cloner/AbstractCloner.php | 12 + .../vendor/symfony/var-dumper/Cloner/Data.php | 29 +- .../var-dumper/Cloner/DumperInterface.php | 8 + .../vendor/symfony/var-dumper/Cloner/Stub.php | 1 + .../symfony/var-dumper/Cloner/VarCloner.php | 2 - .../var-dumper/Command/ServerDumpCommand.php | 2 +- .../var-dumper/Dumper/AbstractDumper.php | 4 + .../symfony/var-dumper/Dumper/CliDumper.php | 57 +- .../Dumper/ContextualizedDumper.php | 7 +- .../var-dumper/Dumper/DataDumperInterface.php | 3 + .../symfony/var-dumper/Dumper/HtmlDumper.php | 79 +- .../var-dumper/Dumper/ServerDumper.php | 7 +- .../var-dumper/Resources/functions/dump.php | 38 +- .../symfony/var-dumper/Server/Connection.php | 14 +- core/vendor/symfony/var-dumper/VarDumper.php | 20 +- core/vendor/symfony/var-dumper/composer.json | 6 - core/vendor/voku/portable-ascii/.whitesource | 12 - .../voku/helper/data/ascii_by_languages.php | 149 +- .../helper/data/ascii_extras_by_languages.php | 8 +- .../helper/data/ascii_language_max_key.php | 2 +- 697 files changed, 18498 insertions(+), 21798 deletions(-) create mode 100644 assets/plugins/updater/lang/uk.php delete mode 100644 core/vendor/bin/doctrine-dbal.bat delete mode 100644 core/vendor/bin/jsonlint.bat delete mode 100644 core/vendor/bin/patch-type-declarations.bat delete mode 100644 core/vendor/bin/salo.bat delete mode 100644 core/vendor/bin/var-dump-server.bat create mode 100644 core/vendor/composer/composer/.gitattributes create mode 100644 core/vendor/composer/composer/.gitignore delete mode 100644 core/vendor/composer/pcre/phpstan-baseline.neon create mode 100644 core/vendor/dmitry-suffi/redis-session-handler/.gitignore delete mode 100644 core/vendor/dragonmantank/cron-expression/CHANGELOG.md delete mode 100644 core/vendor/dragonmantank/cron-expression/README.md delete mode 100644 core/vendor/dragonmantank/cron-expression/composer.json delete mode 100644 core/vendor/dragonmantank/cron-expression/phpstan.neon delete mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/AbstractField.php delete mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/CronExpression.php delete mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php delete mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php delete mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactory.php delete mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactoryInterface.php delete mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/FieldInterface.php delete mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/HoursField.php delete mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/MinutesField.php delete mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/MonthField.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/AtextAfterCFWS.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/CRLFAtTheEnd.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/CRLFX2.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/CRNoLF.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/CharNotAllowed.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/CommaInDomain.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/ConsecutiveAt.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/ConsecutiveDot.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/DomainAcceptsNoMail.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/DomainHyphened.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/DotAtEnd.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/DotAtStart.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/ExpectingAT.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/ExpectingATEXT.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/ExpectingCTEXT.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/ExpectingDTEXT.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/ExpectingDomainLiteralClose.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/ExpectingQPair.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/InvalidEmail.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/LocalOrReservedDomain.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/NoDNSRecord.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/NoDomainPart.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/NoLocalPart.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/UnclosedComment.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/UnclosedQuotedString.php delete mode 100644 core/vendor/egulias/email-validator/src/Exception/UnopenedComment.php delete mode 100644 core/vendor/egulias/email-validator/src/Parser/Parser.php create mode 100644 core/vendor/egulias/email-validator/src/Result/MultipleErrors.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/CRLFX2.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/CRNoLF.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/ConsecutiveAt.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/ConsecutiveDot.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/DomainHyphened.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/DomainTooLong.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/DotAtEnd.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/DotAtStart.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/EmptyReason.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/ExpectingDTEXT.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/LabelTooLong.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/NoDomainPart.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/NoLocalPart.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/RFCWarnings.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/SpoofEmail.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/UnableToGetDNSRecord.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/UnclosedComment.php create mode 100644 core/vendor/egulias/email-validator/src/Result/Reason/UnclosedQuotedString.php delete mode 100644 core/vendor/egulias/email-validator/src/Validation/Error/RFCWarnings.php delete mode 100644 core/vendor/egulias/email-validator/src/Validation/Error/SpoofEmail.php rename core/vendor/egulias/email-validator/src/Validation/{ => Extra}/SpoofCheckValidation.php (66%) delete mode 100644 core/vendor/egulias/email-validator/src/Validation/MultipleErrors.php delete mode 100644 core/vendor/egulias/email-validator/src/Warning/DomainTooLong.php delete mode 100644 core/vendor/egulias/email-validator/src/Warning/LabelTooLong.php delete mode 100644 core/vendor/evocms-services/document-manager/composer.json delete mode 100644 core/vendor/evocms-services/document-manager/src/Facades/DocumentManager.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Interfaces/DocumentServiceInterface.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Providers/DocumentManagerServiceProvider.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Services/DocumentManager.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentClearCart.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentCreate.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentDelete.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentDuplicate.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentEdit.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentPublish.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentSetGroups.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentUndelete.php delete mode 100644 core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentUnpublish.php delete mode 100644 core/vendor/evocms-services/user-manager/composer.json delete mode 100644 core/vendor/evocms-services/user-manager/src/Facades/UserManager.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Interfaces/UserServiceInterface.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Providers/UserManagerServiceProvider.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/UserManager.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/ExcludeStandardFieldsTrait.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/SafelyDestroyUserSessionTrait.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserChangePassword.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserClearSettings.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserDelete.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserEdit.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserGeneratePassword.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserGetValues.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserGetVerifiedKey.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserHashChangePassword.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserHashLogin.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserLogin.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserLoginById.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserLogout.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserManagerChangePassword.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserRefreshToken.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserRegistration.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserRepairPassword.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserSaveSettings.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserSaveValues.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserSetGroups.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserSetRole.php delete mode 100644 core/vendor/evocms-services/user-manager/src/Services/Users/UserVerified.php delete mode 100644 core/vendor/guzzlehttp/promises/src/functions.php delete mode 100644 core/vendor/guzzlehttp/promises/src/functions_include.php create mode 100644 core/vendor/james-heinrich/phpthumb/.gitattributes create mode 100644 core/vendor/james-heinrich/phpthumb/.gitignore create mode 100644 core/vendor/nesbot/carbon/sponsors.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BITCOUNT.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BITPOS.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BRPOP.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/DEL.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/EXPIRE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/EXPIREAT.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/GEORADIUSBYMEMBER.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/HDEL.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/HMGET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/INFO.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/LPUSH.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/MGET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/PFADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/PFCOUNT.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/PFMERGE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/PSUBSCRIBE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/PUNSUBSCRIBE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/RPUSH.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/SADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/SINTER.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/SREM.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/SUBSCRIBE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/SUNION.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/UNSUBSCRIBE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/ZREM.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/ZUNIONSTORE.php create mode 100644 core/vendor/psr/container/.gitignore create mode 100644 core/vendor/psr/event-dispatcher/.gitignore delete mode 100644 core/vendor/psr/log/Psr/Log/AbstractLogger.php delete mode 100644 core/vendor/psr/log/Psr/Log/Test/DummyTest.php delete mode 100644 core/vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php delete mode 100644 core/vendor/psr/log/Psr/Log/Test/TestLogger.php create mode 100644 core/vendor/psr/log/src/AbstractLogger.php rename core/vendor/psr/log/{Psr/Log => src}/InvalidArgumentException.php (100%) rename core/vendor/psr/log/{Psr/Log => src}/LogLevel.php (100%) rename core/vendor/psr/log/{Psr/Log => src}/LoggerAwareInterface.php (100%) rename core/vendor/psr/log/{Psr/Log => src}/LoggerAwareTrait.php (89%) rename core/vendor/psr/log/{Psr/Log => src}/LoggerInterface.php (100%) rename core/vendor/psr/log/{Psr/Log => src}/LoggerTrait.php (100%) rename core/vendor/psr/log/{Psr/Log => src}/NullLogger.php (100%) create mode 100644 core/vendor/seld/phar-utils/.gitignore create mode 100644 core/vendor/seld/signal-handler/.gitignore create mode 100644 core/vendor/symfony/console/Descriptor/ReStructuredTextDescriptor.php delete mode 100644 core/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php create mode 100644 core/vendor/symfony/http-foundation/StreamedJsonResponse.php create mode 100644 core/vendor/symfony/http-kernel/Attribute/AsTargetedValueResolver.php create mode 100644 core/vendor/symfony/http-kernel/Attribute/MapQueryParameter.php create mode 100644 core/vendor/symfony/http-kernel/Attribute/MapQueryString.php create mode 100644 core/vendor/symfony/http-kernel/Attribute/MapRequestPayload.php create mode 100644 core/vendor/symfony/http-kernel/Attribute/ValueResolver.php create mode 100644 core/vendor/symfony/http-kernel/Attribute/WithHttpStatus.php create mode 100644 core/vendor/symfony/http-kernel/Attribute/WithLogLevel.php create mode 100644 core/vendor/symfony/http-kernel/Controller/ArgumentResolver/QueryParameterValueResolver.php create mode 100644 core/vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php create mode 100644 core/vendor/symfony/http-kernel/Debug/ErrorHandlerConfigurator.php create mode 100644 core/vendor/symfony/http-kernel/Exception/ResolverNotFoundException.php rename core/vendor/{dragonmantank/cron-expression => symfony/polyfill-php83}/LICENSE (78%) create mode 100644 core/vendor/symfony/polyfill-php83/Php83.php create mode 100644 core/vendor/symfony/polyfill-php83/README.md create mode 100644 core/vendor/symfony/polyfill-php83/bootstrap.php create mode 100644 core/vendor/symfony/polyfill-php83/composer.json delete mode 100644 core/vendor/symfony/routing/RouteCollectionBuilder.php create mode 100644 core/vendor/symfony/service-contracts/Test/ServiceLocatorTestCase.php create mode 100644 core/vendor/symfony/var-dumper/Caster/ScalarStub.php delete mode 100644 core/vendor/voku/portable-ascii/.whitesource diff --git a/assets/plugins/updater/lang/uk.php b/assets/plugins/updater/lang/uk.php new file mode 100644 index 0000000000..c02236e4c2 --- /dev/null +++ b/assets/plugins/updater/lang/uk.php @@ -0,0 +1,31 @@ +core теки: php artisan make:site update'; diff --git a/assets/plugins/updater/plugin.updater.php b/assets/plugins/updater/plugin.updater.php index 9e85e897d2..7ee1a04da5 100755 --- a/assets/plugins/updater/plugin.updater.php +++ b/assets/plugins/updater/plugin.updater.php @@ -4,11 +4,9 @@ — auto backup system files — rollback option for updater */ - if (!defined('MODX_BASE_PATH')) { die('What are you doing? Get out of here!'); } - if (empty($_SESSION['mgrInternalKey'])) { return; } @@ -201,22 +199,20 @@ } } } - if(isset($git['version'])) + if (isset($git['version'])) { $_SESSION['updateversion'] = $git['version']; - else + } else { $git['version'] = $currentVersion['version']; - + } if (version_compare($git['version'], $currentVersion['version'], '>') && $git['version'] != '') { // get manager role $role = $_SESSION['mgrRole']; if (file_exists(MODX_BASE_PATH.'core/custom/composer.json') OR ($role != 1) AND ($showButton == 'AdminOnly') OR ($showButton == 'hide') OR ($errors > 0)) { - if (file_exists(MODX_BASE_PATH.'core/custom/composer.json')) { $updateButton = ''; - }else{ + } else { $updateButton = ''; } - } else { $updateButton = '' . $_lang['updateButton_txt'] . ' ' . $git['version'] . '

'; } @@ -249,12 +245,9 @@ $currentVersion = $modx->getVersionData(); $commit = isset($_GET['sha']) ? $_GET['sha'] : ''; if ($_SESSION['updateversion'] != $currentVersion['version'] || (isset($commit) && $type == 'commits')) { - file_put_contents(MODX_BASE_PATH . 'update.php', ' $object) { - $startsAt = substr(dirname($name), strlen($path)); mmkDir($dest . $startsAt); if ($object->isDir()) { mmkDir($dest . substr($name, strlen($path))); } - if (is_writable($dest . $startsAt) and $object->isFile()) { copy((string)$name, $dest . $startsAt . DIRECTORY_SEPARATOR . basename($name)); } } } -function mmkDir( - $folder, - $perm = 0777 -) { +function mmkDir($folder, $perm = 0777) +{ if (!is_dir($folder)) { mkdir($folder, $perm); } @@ -371,7 +355,6 @@ function mmkDir( unlink(__DIR__ . "/temp/" . $dir . "/composer.json"); if (is_file(__DIR__ . "/assets/cache/siteManager.php")) { - unlink(__DIR__ . "/temp/" . $dir . "/assets/cache/siteManager.php"); include_once(__DIR__ . "/assets/cache/siteManager.php"); if (!defined("MGR_DIR")) { @@ -382,11 +365,36 @@ function mmkDir( copyFolder(__DIR__ . "/temp/" . $dir . "/manager", __DIR__ . "/temp/" . $dir . "/" . MGR_DIR); removeFolder(__DIR__ . "/temp/" . $dir . "/manager"); } - // echo __DIR__."/temp/".$dir."/".MGR_DIR; } copyFolder(__DIR__ . "/temp/" . $dir, __DIR__ . "/"); removeFolder(__DIR__ . "/temp"); unlink(__DIR__ . "/evo.zip"); +$ch = curl_init(); +$url = "https://api.github.com/repos/' . $version . '/releases"; +curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); +curl_setopt($ch, CURLOPT_HEADER, false); +curl_setopt($ch, CURLOPT_URL, $url); +curl_setopt($ch, CURLOPT_REFERER, $url); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); +curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: updateNotify widget")); +$releases = curl_exec($ch); +curl_close($ch); +if (substr($releases, 0, 1) == "[") { + $releases = json_decode($releases, true); + foreach ($releases as $release) { + if ($_GET["version"] == $release["tag_name"]) { + $factoryDate = date("M j, Y", strtotime($release["published_at"])); + $factoryVersion = \' "\'.$release["tag_name"].\'", // Current version number\'."\n"; + $factoryVersion .= "\t".\'"release_date" => "\'.$factoryDate.\'", // Date of release\'."\n"; + $factoryVersion .= "\t".\'"branch" => "Evolution CMS", // Codebase name\'."\n"; + $factoryVersion .= "\t".\'"full_appname" => "\'.$release["name"].\' (\'.$factoryDate.\')", // Date of release\'."\n"; + $factoryVersion .= \'];\'; + file_put_contents(__DIR__ . "/core/factory/version.php", $factoryVersion); + break; + } + } +} unlink(__DIR__ . "/update.php"); header("Location: ' . constant('MODX_SITE_URL') . 'install/index.php?action=mode");'); if ($result === false) { @@ -411,4 +419,4 @@ function mmkDir( break; } } -} \ No newline at end of file +} diff --git a/core/composer.json b/core/composer.json index 3bfb933161..525b9b69d3 100644 --- a/core/composer.json +++ b/core/composer.json @@ -12,12 +12,6 @@ "homepage": "https://evo.im/", "license": "GPL-2.0+", "authors": [ - { - "name": "Evgeniy Borisov", - "email": "modx@agel-nash.ru", - "homepage": "https://agel-nash.ru", - "role": "Developer" - }, { "name": "Dmytro Lukianenko", "email": "dmi3yy@gmail.com", diff --git a/core/composer.lock b/core/composer.lock index fe058d6a19..922b221a0b 100644 --- a/core/composer.lock +++ b/core/composer.lock @@ -1,8310 +1,8357 @@ { - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "63a65140203e0e8559e12ad3638099d6", - "packages": [ - { - "name": "brick/math", - "version": "0.11.0", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "brick", - "math" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - } - ], - "time": "2023-01-15T23:15:59+00:00" - }, - { - "name": "composer/ca-bundle", - "version": "1.3.5", - "source": { - "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/74780ccf8c19d6acb8d65c5f39cd72110e132bbd", - "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd", - "shasum": "" - }, - "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "psr/log": "^1.0", - "symfony/phpunit-bridge": "^4.2 || ^5", - "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\CaBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", - "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.3.5" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2023-01-11T08:27:00+00:00" - }, - { - "name": "composer/class-map-generator", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/class-map-generator.git", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", - "shasum": "" - }, - "require": { - "composer/pcre": "^2 || ^3", - "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6" - }, - "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\ClassMapGenerator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Utilities to scan PHP code and generate class maps.", - "keywords": [ - "classmap" - ], - "support": { - "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.0.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-06-19T11:31:27+00:00" - }, - { - "name": "composer/composer", - "version": "2.5.5", - "source": { - "type": "git", - "url": "https://github.com/composer/composer.git", - "reference": "c7cffaad16a60636a776017eac5bd8cd0095c32f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/c7cffaad16a60636a776017eac5bd8cd0095c32f", - "reference": "c7cffaad16a60636a776017eac5bd8cd0095c32f", - "shasum": "" - }, - "require": { - "composer/ca-bundle": "^1.0", - "composer/class-map-generator": "^1.0", - "composer/metadata-minifier": "^1.0", - "composer/pcre": "^2.1 || ^3.1", - "composer/semver": "^3.0", - "composer/spdx-licenses": "^1.5.7", - "composer/xdebug-handler": "^2.0.2 || ^3.0.3", - "justinrainbow/json-schema": "^5.2.11", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "react/promise": "^2.8", - "seld/jsonlint": "^1.4", - "seld/phar-utils": "^1.2", - "seld/signal-handler": "^2.0", - "symfony/console": "^5.4.11 || ^6.0.11", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/polyfill-php73": "^1.24", - "symfony/polyfill-php80": "^1.24", - "symfony/polyfill-php81": "^1.24", - "symfony/process": "^5.4 || ^6.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.9.3", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1.0", - "phpstan/phpstan-strict-rules": "^1", - "phpstan/phpstan-symfony": "^1.2.10", - "symfony/phpunit-bridge": "^6.0" - }, - "suggest": { - "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", - "ext-zip": "Enabling the zip extension allows you to unzip archives", - "ext-zlib": "Allow gzip compression of HTTP requests" - }, - "bin": [ - "bin/composer" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "phpstan": { - "includes": [ - "phpstan/rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Composer\\": "src/Composer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "https://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", - "homepage": "https://getcomposer.org/", - "keywords": [ - "autoload", - "dependency", - "package" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.5.5" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2023-03-21T10:50:05+00:00" - }, - { - "name": "composer/metadata-minifier", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/metadata-minifier.git", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", - "reference": "c549d23829536f0d0e984aaabbf02af91f443207", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "composer/composer": "^2", - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\MetadataMinifier\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Small utility library that handles metadata minification and expansion.", - "keywords": [ - "composer", - "compression" - ], - "support": { - "issues": "https://github.com/composer/metadata-minifier/issues", - "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2021-04-07T13:37:33+00:00" - }, - { - "name": "composer/pcre", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-11-17T09:50:14+00:00" - }, - { - "name": "composer/semver", - "version": "3.3.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-04-01T19:23:25+00:00" - }, - { - "name": "composer/spdx-licenses", - "version": "1.5.7", - "source": { - "type": "git", - "url": "https://github.com/composer/spdx-licenses.git", - "reference": "c848241796da2abf65837d51dce1fae55a960149" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/c848241796da2abf65837d51dce1fae55a960149", - "reference": "c848241796da2abf65837d51dce1fae55a960149", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.55", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Spdx\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "SPDX licenses list and validation library.", - "keywords": [ - "license", - "spdx", - "validator" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/spdx-licenses/issues", - "source": "https://github.com/composer/spdx-licenses/tree/1.5.7" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-05-23T07:37:50+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "dmitry-suffi/redis-session-handler", - "version": "1.0.4", - "source": { - "type": "git", - "url": "https://github.com/dmitry-suffi/redis-session-handler.git", - "reference": "7057430a726dd8df530e1e3071e32cc6b1b5b170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dmitry-suffi/redis-session-handler/zipball/7057430a726dd8df530e1e3071e32cc6b1b5b170", - "reference": "7057430a726dd8df530e1e3071e32cc6b1b5b170", - "shasum": "" - }, - "type": "project", - "autoload": { - "psr-4": { - "suffi\\RedisSessionHandler\\": "src\\" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Обработчик сессий через Redis с механизмом блокировки", - "homepage": "https://github.com/dmitry-suffi/redis-session-handler", - "keywords": [ - "redis", - "session" - ], - "support": { - "issues": "https://github.com/dmitry-suffi/redis-session-handler/issues", - "source": "https://github.com/dmitry-suffi/redis-session-handler/tree/1.0.4" - }, - "time": "2017-06-30T13:11:32+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, - { - "name": "doctrine/dbal", - "version": "3.6.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/b4bd1cfbd2b916951696d82e57d054394d84864c", - "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "doctrine/coding-standard": "11.1.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2022.3", - "phpstan/phpstan": "1.10.9", - "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.6", - "psalm/plugin-phpunit": "0.18.4", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4|^6.0", - "symfony/console": "^4.4|^5.4|^6.0", - "vimeo/psalm": "4.30.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.6.2" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2023-04-14T07:25:38+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" - }, - "time": "2022-05-02T15:47:09+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.28" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2022-10-12T20:59:15+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.0.6", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.6" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2022-10-20T09:10:12+00:00" - }, - { - "name": "doctrine/lexer", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-12-15T16:57:16+00:00" - }, - { - "name": "egulias/email-validator", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", - "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^2.0 || ^3.0", - "php": ">=8.1", - "symfony/polyfill-intl-idn": "^1.26" - }, - "require-dev": { - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^4.30" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "support": { - "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2023-01-14T14:17:03+00:00" - }, - { - "name": "evolutioncms-services/document-manager", - "version": "1.0.9", - "source": { - "type": "git", - "url": "https://github.com/evolution-cms/DocumentManager.git", - "reference": "403c065a0be6367baaadd3a5b01cf0f84522c8db" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/evolution-cms/DocumentManager/zipball/403c065a0be6367baaadd3a5b01cf0f84522c8db", - "reference": "403c065a0be6367baaadd3a5b01cf0f84522c8db", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "EvolutionCMS\\DocumentManager\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander Pashkevich", - "email": "sertious2008.wortk3@gmail.com" - } - ], - "support": { - "issues": "https://github.com/evolution-cms/DocumentManager/issues", - "source": "https://github.com/evolution-cms/DocumentManager/tree/1.0.9" - }, - "time": "2021-05-31T15:12:43+00:00" - }, - { - "name": "evolutioncms-services/user-manager", - "version": "1.0.14", - "source": { - "type": "git", - "url": "https://github.com/evolution-cms/UserManager.git", - "reference": "eb743546dc33874ae02cacf70e07624f9bda99ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/evolution-cms/UserManager/zipball/eb743546dc33874ae02cacf70e07624f9bda99ef", - "reference": "eb743546dc33874ae02cacf70e07624f9bda99ef", - "shasum": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "EvolutionCMS\\UserManager\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alexander Pashkevich", - "email": "sertious2008.wortk3@gmail.com" - } - ], - "support": { - "issues": "https://github.com/evolution-cms/UserManager/issues", - "source": "https://github.com/evolution-cms/UserManager/tree/1.0.14" - }, - "time": "2021-11-17T09:44:48+00:00" - }, - { - "name": "evolutioncms/salo2", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/evolution-cms/salo2.git", - "reference": "e48a77cb71cc4241ee7559a210b7f0bd67365ee1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/evolution-cms/salo2/zipball/e48a77cb71cc4241ee7559a210b7f0bd67365ee1", - "reference": "e48a77cb71cc4241ee7559a210b7f0bd67365ee1", - "shasum": "" - }, - "require": { - "illuminate/console": "^8.0|^9.0|^10.0", - "illuminate/contracts": "^8.0|^9.0|^10.0", - "illuminate/support": "^8.0|^9.0|^10.0", - "php": "^7.3|^8.0" - }, - "default-branch": true, - "bin": [ - "bin/salo" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - }, - "laravel": { - "providers": [ - "EvolutionCMS\\Salo\\SaloServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "EvolutionCMS\\Salo\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Evocms Docker files for running a basic evo application.", - "keywords": [ - "docker", - "evo" - ], - "support": { - "source": "https://github.com/evolution-cms/salo2/tree/master" - }, - "time": "2023-05-11T18:25:45+00:00" - }, - { - "name": "fruitcake/php-cors", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/php-cors.git", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", - "shasum": "" - }, - "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barryvdh", - "email": "barryvdh@gmail.com" - } - ], - "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", - "homepage": "https://github.com/fruitcake/php-cors", - "keywords": [ - "cors", - "laravel", - "symfony" - ], - "support": { - "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2022-02-20T15:07:15+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "v1.1.1", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2023-02-25T20:23:15+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.7.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.7.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2023-05-21T14:04:53+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6", - "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2023-05-21T13:50:22+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "2.5.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.5.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2023-04-17T16:11:26+00:00" - }, - { - "name": "guzzlehttp/uri-template", - "version": "v1.0.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/uri-template.git", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/b945d74a55a25a949158444f09ec0d3c120d69e2", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.17" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.19 || ^9.5.8", - "uri-template/tests": "1.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\UriTemplate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - } - ], - "description": "A polyfill class for uri_template of PHP", - "keywords": [ - "guzzlehttp", - "uri-template" - ], - "support": { - "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", - "type": "tidelift" - } - ], - "time": "2021-10-07T12:57:01+00:00" - }, - { - "name": "illuminate/bus", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/bus.git", - "reference": "ec2250684df1ff5cddc4ae639ec913996a4bd0be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/bus/zipball/ec2250684df1ff5cddc4ae639ec913996a4bd0be", - "reference": "ec2250684df1ff5cddc4ae639ec913996a4bd0be", - "shasum": "" - }, - "require": { - "illuminate/collections": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/pipeline": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1" - }, - "suggest": { - "illuminate/queue": "Required to use closures when chaining jobs (^7.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Bus\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Bus package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-22T13:32:28+00:00" - }, - { - "name": "illuminate/cache", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/cache.git", - "reference": "f53cc686722653a409e2f12ca37a45166999d40f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/cache/zipball/f53cc686722653a409e2f12ca37a45166999d40f", - "reference": "f53cc686722653a409e2f12ca37a45166999d40f", - "shasum": "" - }, - "require": { - "illuminate/collections": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1" - }, - "provide": { - "psr/simple-cache-implementation": "1.0|2.0|3.0" - }, - "suggest": { - "ext-apcu": "Required to use the APC cache driver.", - "ext-filter": "Required to use the DynamoDb cache driver.", - "ext-memcached": "Required to use the memcache cache driver.", - "illuminate/database": "Required to use the database cache driver (^10.0).", - "illuminate/filesystem": "Required to use the file cache driver (^10.0).", - "illuminate/redis": "Required to use the redis cache driver (^10.0).", - "symfony/cache": "Required to use PSR-6 cache bridge (^6.2)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Cache\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Cache package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-22T14:14:21+00:00" - }, - { - "name": "illuminate/collections", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/collections.git", - "reference": "4f3810082e70780547c48d803c2d315e566df6a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/4f3810082e70780547c48d803c2d315e566df6a5", - "reference": "4f3810082e70780547c48d803c2d315e566df6a5", - "shasum": "" - }, - "require": { - "illuminate/conditionable": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/macroable": "^10.0", - "php": "^8.1" - }, - "suggest": { - "symfony/var-dumper": "Required to use the dump method (^6.2)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "files": [ - "helpers.php" - ], - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Collections package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-09T18:53:34+00:00" - }, - { - "name": "illuminate/conditionable", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/conditionable.git", - "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/conditionable/zipball/d0958e4741fc9d6f516a552060fd1b829a85e009", - "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009", - "shasum": "" - }, - "require": { - "php": "^8.0.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Conditionable package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-02-03T08:06:17+00:00" - }, - { - "name": "illuminate/config", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/config.git", - "reference": "d5e83ceff5c4d5607b1b81763eb4c436911c35da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/config/zipball/d5e83ceff5c4d5607b1b81763eb4c436911c35da", - "reference": "d5e83ceff5c4d5607b1b81763eb4c436911c35da", - "shasum": "" - }, - "require": { - "illuminate/collections": "^10.0", - "illuminate/contracts": "^10.0", - "php": "^8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Config\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Config package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2022-08-21T15:47:27+00:00" - }, - { - "name": "illuminate/console", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/console.git", - "reference": "6459d31a841fbc71033b1c6af97871085a45c8b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/console/zipball/6459d31a841fbc71033b1c6af97871085a45c8b0", - "reference": "6459d31a841fbc71033b1c6af97871085a45c8b0", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "illuminate/collections": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/support": "^10.0", - "illuminate/view": "^10.0", - "nunomaduro/termwind": "^1.13", - "php": "^8.1", - "symfony/console": "^6.2", - "symfony/process": "^6.2" - }, - "suggest": { - "dragonmantank/cron-expression": "Required to use scheduler (^3.3.2).", - "ext-pcntl": "Required to use signal trapping.", - "guzzlehttp/guzzle": "Required to use the ping methods on schedules (^7.5).", - "illuminate/bus": "Required to use the scheduled job dispatcher (^10.0).", - "illuminate/container": "Required to use the scheduler (^10.0).", - "illuminate/filesystem": "Required to use the generator command (^10.0).", - "illuminate/queue": "Required to use closures for scheduled jobs (^10.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Console\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Console package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-09T13:08:05+00:00" - }, - { - "name": "illuminate/container", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/container.git", - "reference": "f85a85791c75a754190d6495e6ca611faaa64f61" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/container/zipball/f85a85791c75a754190d6495e6ca611faaa64f61", - "reference": "f85a85791c75a754190d6495e6ca611faaa64f61", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^10.0", - "php": "^8.1", - "psr/container": "^1.1.1|^2.0.1" - }, - "provide": { - "psr/container-implementation": "1.1|2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Container\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Container package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-04-03T19:51:31+00:00" - }, - { - "name": "illuminate/contracts", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/contracts.git", - "reference": "0f8b766d66df7e0784ea73cfe4caf7a48b623f53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/0f8b766d66df7e0784ea73cfe4caf7a48b623f53", - "reference": "0f8b766d66df7e0784ea73cfe4caf7a48b623f53", - "shasum": "" - }, - "require": { - "php": "^8.1", - "psr/container": "^1.1.1|^2.0.1", - "psr/simple-cache": "^1.0|^2.0|^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Contracts\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Contracts package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-01T15:41:14+00:00" - }, - { - "name": "illuminate/database", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/database.git", - "reference": "cd8e990181f3f2df752c6419f90588f65f010004" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/database/zipball/cd8e990181f3f2df752c6419f90588f65f010004", - "reference": "cd8e990181f3f2df752c6419f90588f65f010004", - "shasum": "" - }, - "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", - "ext-pdo": "*", - "illuminate/collections": "^10.0", - "illuminate/container": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1" - }, - "suggest": { - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", - "ext-filter": "Required to use the Postgres database driver.", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.21).", - "illuminate/console": "Required to use the database commands (^10.0).", - "illuminate/events": "Required to use the observers with Eloquent (^10.0).", - "illuminate/filesystem": "Required to use the migrations (^10.0).", - "illuminate/pagination": "Required to paginate the result set (^10.0).", - "symfony/finder": "Required to use Eloquent model factories (^6.2)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Database\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Database package.", - "homepage": "https://laravel.com", - "keywords": [ - "database", - "laravel", - "orm", - "sql" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-23T17:43:24+00:00" - }, - { - "name": "illuminate/events", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/events.git", - "reference": "c68138ea57360c19a145e5912fb474cfd1845366" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/events/zipball/c68138ea57360c19a145e5912fb474cfd1845366", - "reference": "c68138ea57360c19a145e5912fb474cfd1845366", - "shasum": "" - }, - "require": { - "illuminate/bus": "^10.0", - "illuminate/collections": "^10.0", - "illuminate/container": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "files": [ - "functions.php" - ], - "psr-4": { - "Illuminate\\Events\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Events package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-02-16T15:35:09+00:00" - }, - { - "name": "illuminate/filesystem", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/filesystem.git", - "reference": "53a46fed9b31617ce3a786690b2294f0a54559ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/filesystem/zipball/53a46fed9b31617ce3a786690b2294f0a54559ea", - "reference": "53a46fed9b31617ce3a786690b2294f0a54559ea", - "shasum": "" - }, - "require": { - "illuminate/collections": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1", - "symfony/finder": "^6.2" - }, - "suggest": { - "ext-fileinfo": "Required to use the Filesystem class.", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-hash": "Required to use the Filesystem class.", - "illuminate/http": "Required for handling uploaded files (^7.0).", - "league/flysystem": "Required to use the Flysystem local driver (^3.0.16).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", - "symfony/mime": "Required to enable support for guessing extensions (^6.2)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Filesystem\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Filesystem package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-03-22T21:14:41+00:00" - }, - { - "name": "illuminate/http", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/http.git", - "reference": "e08bf43e2ca73d06d0082a4e993878f8a4620ae4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/http/zipball/e08bf43e2ca73d06d0082a4e993878f8a4620ae4", - "reference": "e08bf43e2ca73d06d0082a4e993878f8a4620ae4", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "fruitcake/php-cors": "^1.2", - "guzzlehttp/uri-template": "^1.0", - "illuminate/collections": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/session": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1", - "symfony/http-foundation": "^6.2", - "symfony/http-kernel": "^6.2", - "symfony/mime": "^6.2" - }, - "suggest": { - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "guzzlehttp/guzzle": "Required to use the HTTP Client (^7.5)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Http\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Http package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-15T14:58:02+00:00" - }, - { - "name": "illuminate/log", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/log.git", - "reference": "65ed49152b121fc82116223f092b68fe8a3b4ba0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/log/zipball/65ed49152b121fc82116223f092b68fe8a3b4ba0", - "reference": "65ed49152b121fc82116223f092b68fe8a3b4ba0", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^10.0", - "illuminate/support": "^10.0", - "monolog/monolog": "^3.0", - "php": "^8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Log\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Log package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-03-13T03:05:16+00:00" - }, - { - "name": "illuminate/macroable", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/macroable.git", - "reference": "6b80109438161d45a5f2bdf7ecdd56cbd0096c3d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/macroable/zipball/6b80109438161d45a5f2bdf7ecdd56cbd0096c3d", - "reference": "6b80109438161d45a5f2bdf7ecdd56cbd0096c3d", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Macroable package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-03-17T13:33:11+00:00" - }, - { - "name": "illuminate/pagination", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/pagination.git", - "reference": "2af69e712297cc38377593a72f00d430867e8bdc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/pagination/zipball/2af69e712297cc38377593a72f00d430867e8bdc", - "reference": "2af69e712297cc38377593a72f00d430867e8bdc", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "illuminate/collections": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Pagination\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Pagination package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-04-17T16:01:53+00:00" - }, - { - "name": "illuminate/pipeline", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/pipeline.git", - "reference": "f2119ae9a26e420bf0ed9d5e7e7aa4548547e7b1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/pipeline/zipball/f2119ae9a26e420bf0ed9d5e7e7aa4548547e7b1", - "reference": "f2119ae9a26e420bf0ed9d5e7e7aa4548547e7b1", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Pipeline\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Pipeline package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-03-03T15:55:44+00:00" - }, - { - "name": "illuminate/redis", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/redis.git", - "reference": "a86771f93c92b827e19f007347d65d1197202793" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/redis/zipball/a86771f93c92b827e19f007347d65d1197202793", - "reference": "a86771f93c92b827e19f007347d65d1197202793", - "shasum": "" - }, - "require": { - "illuminate/collections": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1" - }, - "suggest": { - "ext-redis": "Required to use the phpredis connector (^4.0|^5.0).", - "predis/predis": "Required to use the predis connector (^2.0.2)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Redis\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Redis package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-08T14:32:30+00:00" - }, - { - "name": "illuminate/routing", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/routing.git", - "reference": "d563283c8f10d326804dcc701f9de70fd9ab4e3e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/routing/zipball/d563283c8f10d326804dcc701f9de70fd9ab4e3e", - "reference": "d563283c8f10d326804dcc701f9de70fd9ab4e3e", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "ext-hash": "*", - "illuminate/collections": "^10.0", - "illuminate/container": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/http": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/pipeline": "^10.0", - "illuminate/session": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1", - "symfony/http-foundation": "^6.2", - "symfony/http-kernel": "^6.2", - "symfony/routing": "^6.2" - }, - "suggest": { - "illuminate/console": "Required to use the make commands (^10.0).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Routing\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Routing package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-22T14:14:21+00:00" - }, - { - "name": "illuminate/session", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/session.git", - "reference": "f39be6b679781d5a7089c76965ed635491b4b5dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/session/zipball/f39be6b679781d5a7089c76965ed635491b4b5dd", - "reference": "f39be6b679781d5a7089c76965ed635491b4b5dd", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-session": "*", - "illuminate/collections": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/filesystem": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1", - "symfony/finder": "^6.2", - "symfony/http-foundation": "^6.2" - }, - "suggest": { - "illuminate/console": "Required to use the session:table command (^10.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Session\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Session package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-09T13:08:05+00:00" - }, - { - "name": "illuminate/support", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/support.git", - "reference": "2ec8978cc9eda6848389fa623018603ef920067b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/2ec8978cc9eda6848389fa623018603ef920067b", - "reference": "2ec8978cc9eda6848389fa623018603ef920067b", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^2.0", - "ext-ctype": "*", - "ext-filter": "*", - "ext-mbstring": "*", - "illuminate/collections": "^10.0", - "illuminate/conditionable": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/macroable": "^10.0", - "nesbot/carbon": "^2.62.1", - "php": "^8.1", - "voku/portable-ascii": "^2.0" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "suggest": { - "illuminate/filesystem": "Required to use the composer class (^10.0).", - "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", - "ramsey/uuid": "Required to use Str::uuid() (^4.7).", - "symfony/process": "Required to use the composer class (^6.2).", - "symfony/uid": "Required to use Str::ulid() (^6.2).", - "symfony/var-dumper": "Required to use the dd function (^6.2).", - "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "files": [ - "helpers.php" - ], - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Support package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-23T17:29:20+00:00" - }, - { - "name": "illuminate/translation", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/translation.git", - "reference": "6c61b26735d57797753b5970029505d3854be127" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/translation/zipball/6c61b26735d57797753b5970029505d3854be127", - "reference": "6c61b26735d57797753b5970029505d3854be127", - "shasum": "" - }, - "require": { - "illuminate/collections": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/filesystem": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Translation\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Translation package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-02-14T15:00:37+00:00" - }, - { - "name": "illuminate/validation", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/validation.git", - "reference": "9e62010e23c66f1239e9331d1a10b063b8e88527" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/validation/zipball/9e62010e23c66f1239e9331d1a10b063b8e88527", - "reference": "9e62010e23c66f1239e9331d1a10b063b8e88527", - "shasum": "" - }, - "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", - "egulias/email-validator": "^3.2.5|^4.0", - "ext-filter": "*", - "ext-mbstring": "*", - "illuminate/collections": "^10.0", - "illuminate/container": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/support": "^10.0", - "illuminate/translation": "^10.0", - "php": "^8.1", - "symfony/http-foundation": "^6.2", - "symfony/mime": "^6.2" - }, - "suggest": { - "illuminate/database": "Required to use the database presence verifier (^10.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Validation\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Validation package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-01T16:07:12+00:00" - }, - { - "name": "illuminate/view", - "version": "v10.12.0", - "source": { - "type": "git", - "url": "https://github.com/illuminate/view.git", - "reference": "aebc2fa44b2366e87652d550ceb9871183dd7422" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/view/zipball/aebc2fa44b2366e87652d550ceb9871183dd7422", - "reference": "aebc2fa44b2366e87652d550ceb9871183dd7422", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "illuminate/collections": "^10.0", - "illuminate/container": "^10.0", - "illuminate/contracts": "^10.0", - "illuminate/events": "^10.0", - "illuminate/filesystem": "^10.0", - "illuminate/macroable": "^10.0", - "illuminate/support": "^10.0", - "php": "^8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "10.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\View\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate View package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-05-12T19:36:39+00:00" - }, - { - "name": "james-heinrich/phpthumb", - "version": "v1.7.20", - "source": { - "type": "git", - "url": "https://github.com/JamesHeinrich/phpThumb.git", - "reference": "6c642aad3fa33ce88fe1307feaa6316edfc9ed76" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JamesHeinrich/phpThumb/zipball/6c642aad3fa33ce88fe1307feaa6316edfc9ed76", - "reference": "6c642aad3fa33ce88fe1307feaa6316edfc9ed76", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "suggest": { - "ext-gd": "PHP GD library", - "ext-imagick": "PHP ImageMagick" - }, - "type": "library", - "autoload": { - "files": [ - "phpthumb.class.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-1.0-or-later", - "LGPL-3.0-only", - "MPL-2.0" - ], - "authors": [ - { - "name": "James Heinrich", - "email": "info@silisoftware.com", - "homepage": "http://www.silisoftware.com/", - "role": "Developer" - } - ], - "description": "The PHP thumbnail generator", - "homepage": "http://phpthumb.sourceforge.net/", - "keywords": [ - "ImageMagick", - "gd", - "image", - "magic", - "thumb", - "thumbnail" - ], - "support": { - "issues": "https://github.com/JamesHeinrich/phpThumb/issues", - "source": "https://github.com/JamesHeinrich/phpThumb/tree/v1.7.20" - }, - "time": "2023-01-09T14:23:26+00:00" - }, - { - "name": "justinrainbow/json-schema", - "version": "5.2.12", - "source": { - "type": "git", - "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", - "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", - "json-schema/json-schema-test-suite": "1.2.0", - "phpunit/phpunit": "^4.8.35" - }, - "bin": [ - "bin/validate-json" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "JsonSchema\\": "src/JsonSchema/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bruno Prieto Reis", - "email": "bruno.p.reis@gmail.com" - }, - { - "name": "Justin Rainbow", - "email": "justin.rainbow@gmail.com" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Robert Schönthal", - "email": "seroscho@googlemail.com" - } - ], - "description": "A library to validate a json schema.", - "homepage": "https://github.com/justinrainbow/json-schema", - "keywords": [ - "json", - "schema" - ], - "support": { - "issues": "https://github.com/justinrainbow/json-schema/issues", - "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12" - }, - "time": "2022-04-13T08:02:27+00:00" - }, - { - "name": "league/flysystem", - "version": "1.1.10", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", - "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" - }, - "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Filesystem abstraction: Many filesystems, one API.", - "keywords": [ - "Cloud Files", - "WebDAV", - "abstraction", - "aws", - "cloud", - "copy.com", - "dropbox", - "file systems", - "files", - "filesystem", - "filesystems", - "ftp", - "rackspace", - "remote", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" - }, - "funding": [ - { - "url": "https://offset.earth/frankdejonge", - "type": "other" - } - ], - "time": "2022-10-04T09:16:37+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Mime-type detection for Flysystem", - "support": { - "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" - }, - "funding": [ - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2022-04-17T13:12:02+00:00" - }, - { - "name": "monolog/monolog", - "version": "3.3.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", - "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4.5", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^9.5.26", - "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.3.1" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2023-02-06T13:46:10+00:00" - }, - { - "name": "nesbot/carbon", - "version": "2.66.0", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "496712849902241f04902033b0441b269effe001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", - "reference": "496712849902241f04902033b0441b269effe001", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" - }, - "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4", - "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^3.0", - "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.99 || ^1.7.14", - "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", - "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", - "squizlabs/php_codesniffer": "^3.4" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "https://markido.com" - }, - { - "name": "kylekatarnls", - "homepage": "https://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, - "funding": [ - { - "url": "https://github.com/sponsors/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon#sponsor", - "type": "opencollective" - }, - { - "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", - "type": "tidelift" - } - ], - "time": "2023-01-29T18:53:47+00:00" - }, - { - "name": "nunomaduro/termwind", - "version": "v1.15.1", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/termwind.git", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" - }, - "require-dev": { - "ergebnis/phpstan-rules": "^1.0.", - "illuminate/console": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "laravel/pint": "^1.0.0", - "pestphp/pest": "^1.21.0", - "pestphp/pest-plugin-mock": "^1.0", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-strict-rules": "^1.1.0", - "symfony/var-dumper": "^5.2.7|^6.0.0", - "thecodingmachine/phpstan-strict-rules": "^1.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Termwind\\Laravel\\TermwindServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/Functions.php" - ], - "psr-4": { - "Termwind\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Its like Tailwind CSS, but for the console.", - "keywords": [ - "cli", - "console", - "css", - "package", - "php", - "style" - ], - "support": { - "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://github.com/xiCO2k", - "type": "github" - } - ], - "time": "2023-02-08T01:06:31+00:00" - }, - { - "name": "phpmailer/phpmailer", - "version": "v6.8.0", - "source": { - "type": "git", - "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "df16b615e371d81fb79e506277faea67a1be18f1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/df16b615e371d81fb79e506277faea67a1be18f1", - "reference": "df16b615e371d81fb79e506277faea67a1be18f1", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-filter": "*", - "ext-hash": "*", - "php": ">=5.5.0" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", - "doctrine/annotations": "^1.2.6 || ^1.13.3", - "php-parallel-lint/php-console-highlighter": "^1.0.0", - "php-parallel-lint/php-parallel-lint": "^1.3.2", - "phpcompatibility/php-compatibility": "^9.3.5", - "roave/security-advisories": "dev-latest", - "squizlabs/php_codesniffer": "^3.7.1", - "yoast/phpunit-polyfills": "^1.0.4" - }, - "suggest": { - "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", - "ext-openssl": "Needed for secure SMTP sending and DKIM signing", - "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", - "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", - "league/oauth2-google": "Needed for Google XOAUTH2 authentication", - "psr/log": "For optional PSR-3 debug logging", - "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", - "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPMailer\\PHPMailer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "LGPL-2.1-only" - ], - "authors": [ - { - "name": "Marcus Bointon", - "email": "phpmailer@synchromedia.co.uk" - }, - { - "name": "Jim Jagielski", - "email": "jimjag@gmail.com" - }, - { - "name": "Andy Prevost", - "email": "codeworxtech@users.sourceforge.net" - }, - { - "name": "Brent R. Matzelle" - } - ], - "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "support": { - "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.0" - }, - "funding": [ - { - "url": "https://github.com/Synchro", - "type": "github" - } - ], - "time": "2023-03-06T14:43:22+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": true - }, - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2023-02-25T19:38:58+00:00" - }, - { - "name": "predis/predis", - "version": "v2.1.2", - "source": { - "type": "git", - "url": "https://github.com/predis/predis.git", - "reference": "a77a43913a74f9331f637bb12867eb8e274814e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/a77a43913a74f9331f637bb12867eb8e274814e5", - "reference": "a77a43913a74f9331f637bb12867eb8e274814e5", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.3", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^8.0 || ~9.4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Predis\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Till Krüss", - "homepage": "https://till.im", - "role": "Maintainer" - } - ], - "description": "A flexible and feature-complete Redis client for PHP.", - "homepage": "http://github.com/predis/predis", - "keywords": [ - "nosql", - "predis", - "redis" - ], - "support": { - "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v2.1.2" - }, - "funding": [ - { - "url": "https://github.com/sponsors/tillkruss", - "type": "github" - } - ], - "time": "2023-03-02T18:32:04+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client/tree/1.0.2" - }, - "time": "2023-04-10T20:12:12+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" - }, - "time": "2023-04-10T20:10:41+00:00" - }, - { - "name": "psr/http-message", - "version": "2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "time": "2023-04-04T09:54:51+00:00" - }, - { - "name": "psr/log", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" - }, - "time": "2021-07-14T16:46:02+00:00" - }, - { - "name": "psr/simple-cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" - }, - "time": "2021-10-29T13:26:27+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "react/promise", - "version": "v2.10.0", - "source": { - "type": "git", - "url": "https://github.com/reactphp/promise.git", - "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", - "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", - "shasum": "" - }, - "require": { - "php": ">=5.4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "React\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jan Sorgalla", - "email": "jsorgalla@gmail.com", - "homepage": "https://sorgalla.com/" - }, - { - "name": "Christian Lück", - "email": "christian@clue.engineering", - "homepage": "https://clue.engineering/" - }, - { - "name": "Cees-Jan Kiewiet", - "email": "reactphp@ceesjankiewiet.nl", - "homepage": "https://wyrihaximus.net/" - }, - { - "name": "Chris Boden", - "email": "cboden@gmail.com", - "homepage": "https://cboden.dev/" - } - ], - "description": "A lightweight implementation of CommonJS Promises/A for PHP", - "keywords": [ - "promise", - "promises" - ], - "support": { - "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.10.0" - }, - "funding": [ - { - "url": "https://opencollective.com/reactphp", - "type": "open_collective" - } - ], - "time": "2023-05-02T15:15:43+00:00" - }, - { - "name": "rosell-dk/exec-with-fallback", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/rosell-dk/exec-with-fallback.git", - "reference": "f88a6b29abd0b580566056b7c1eb0434eb5db20d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rosell-dk/exec-with-fallback/zipball/f88a6b29abd0b580566056b7c1eb0434eb5db20d", - "reference": "f88a6b29abd0b580566056b7c1eb0434eb5db20d", - "shasum": "" - }, - "require": { - "php": "^5.6 | ^7.0 | ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.11", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "3.*" - }, - "suggest": { - "php-stan/php-stan": "Suggested for dev, in order to analyse code before committing" - }, - "type": "library", - "extra": { - "scripts-descriptions": { - "ci": "Run tests before CI", - "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", - "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", - "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", - "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", - "test": "Launches the preconfigured PHPUnit" - } - }, - "autoload": { - "psr-4": { - "ExecWithFallback\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bjørn Rosell", - "homepage": "https://www.bitwise-it.dk/contact", - "role": "Project Author" - } - ], - "description": "An exec() with fallback to emulations (proc_open, etc)", - "keywords": [ - "command", - "exec", - "fallback", - "open_proc", - "resiliant", - "sturdy" - ], - "support": { - "issues": "https://github.com/rosell-dk/exec-with-fallback/issues", - "source": "https://github.com/rosell-dk/exec-with-fallback/tree/1.2.0" - }, - "funding": [ - { - "url": "https://github.com/rosell-dk", - "type": "github" - }, - { - "url": "https://ko-fi.com/rosell", - "type": "ko_fi" - } - ], - "time": "2021-12-08T12:09:43+00:00" - }, - { - "name": "rosell-dk/file-util", - "version": "0.1.1", - "source": { - "type": "git", - "url": "https://github.com/rosell-dk/file-util.git", - "reference": "2ff895308c37f448b34b031cfbfd8e45f43936fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rosell-dk/file-util/zipball/2ff895308c37f448b34b031cfbfd8e45f43936fd", - "reference": "2ff895308c37f448b34b031cfbfd8e45f43936fd", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "rosell-dk/exec-with-fallback": "^1.0.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.11", - "mikey179/vfsstream": "^1.6", - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "3.*" - }, - "type": "library", - "extra": { - "scripts-descriptions": { - "ci": "Run tests before CI", - "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", - "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", - "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", - "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", - "test": "Launches the preconfigured PHPUnit" - } - }, - "autoload": { - "psr-4": { - "FileUtil\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bjørn Rosell", - "homepage": "https://www.bitwise-it.dk/contact", - "role": "Project Author" - } - ], - "description": "Functions for dealing with files and paths", - "keywords": [ - "files", - "path", - "util" - ], - "support": { - "issues": "https://github.com/rosell-dk/file-util/issues", - "source": "https://github.com/rosell-dk/file-util/tree/0.1.1" - }, - "funding": [ - { - "url": "https://github.com/rosell-dk", - "type": "github" - }, - { - "url": "https://ko-fi.com/rosell", - "type": "ko_fi" - } - ], - "time": "2022-04-19T10:12:31+00:00" - }, - { - "name": "rosell-dk/image-mime-type-guesser", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/rosell-dk/image-mime-type-guesser.git", - "reference": "72f7040e95a78937ae2edece452530224fcacea6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rosell-dk/image-mime-type-guesser/zipball/72f7040e95a78937ae2edece452530224fcacea6", - "reference": "72f7040e95a78937ae2edece452530224fcacea6", - "shasum": "" - }, - "require": { - "php": "^5.6 | ^7.0 | ^8.0", - "rosell-dk/image-mime-type-sniffer": "^1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.11", - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "3.*" - }, - "type": "library", - "extra": { - "scripts-descriptions": { - "ci": "Run tests before CI", - "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", - "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", - "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", - "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", - "test": "Launches the preconfigured PHPUnit" - } - }, - "autoload": { - "psr-4": { - "ImageMimeTypeGuesser\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bjørn Rosell", - "homepage": "https://www.bitwise-it.dk/contact", - "role": "Project Author" - } - ], - "description": "Guess mime type of images", - "keywords": [ - "image", - "images", - "mime", - "mime type" - ], - "support": { - "issues": "https://github.com/rosell-dk/image-mime-type-guesser/issues", - "source": "https://github.com/rosell-dk/image-mime-type-guesser/tree/1.1.1" - }, - "funding": [ - { - "url": "https://github.com/rosell-dk", - "type": "github" - }, - { - "url": "https://ko-fi.com/rosell", - "type": "ko_fi" - } - ], - "time": "2022-05-19T09:57:15+00:00" - }, - { - "name": "rosell-dk/image-mime-type-sniffer", - "version": "1.1.1", - "source": { - "type": "git", - "url": "https://github.com/rosell-dk/image-mime-type-sniffer.git", - "reference": "9ed14cc5d2c14c417660a4dd1946b5f056494691" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rosell-dk/image-mime-type-sniffer/zipball/9ed14cc5d2c14c417660a4dd1946b5f056494691", - "reference": "9ed14cc5d2c14c417660a4dd1946b5f056494691", - "shasum": "" - }, - "require": { - "php": ">=5.4" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.11", - "mikey179/vfsstream": "^1.6", - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "3.*" - }, - "type": "library", - "extra": { - "scripts-descriptions": { - "ci": "Run tests before CI", - "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", - "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", - "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", - "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", - "test": "Launches the preconfigured PHPUnit" - } - }, - "autoload": { - "psr-4": { - "ImageMimeTypeSniffer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bjørn Rosell", - "homepage": "https://www.bitwise-it.dk/contact", - "role": "Project Author" - } - ], - "description": "Sniff mime type (images only)", - "keywords": [ - "image", - "images", - "mime", - "mime type" - ], - "support": { - "issues": "https://github.com/rosell-dk/image-mime-type-sniffer/issues", - "source": "https://github.com/rosell-dk/image-mime-type-sniffer/tree/1.1.1" - }, - "funding": [ - { - "url": "https://github.com/rosell-dk", - "type": "github" - }, - { - "url": "https://ko-fi.com/rosell", - "type": "ko_fi" - } - ], - "time": "2022-04-20T14:31:25+00:00" - }, - { - "name": "rosell-dk/locate-binaries", - "version": "1.0", - "source": { - "type": "git", - "url": "https://github.com/rosell-dk/locate-binaries.git", - "reference": "bd2f493383ecd55aa519828dd2898e30f3b9cbb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rosell-dk/locate-binaries/zipball/bd2f493383ecd55aa519828dd2898e30f3b9cbb0", - "reference": "bd2f493383ecd55aa519828dd2898e30f3b9cbb0", - "shasum": "" - }, - "require": { - "php": ">=5.6", - "rosell-dk/exec-with-fallback": "^1.0.0", - "rosell-dk/file-util": "^0.1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.11", - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "3.*" - }, - "type": "library", - "extra": { - "scripts-descriptions": { - "ci": "Run tests before CI", - "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", - "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", - "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", - "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", - "test": "Launches the preconfigured PHPUnit" - } - }, - "autoload": { - "psr-4": { - "LocateBinaries\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bjørn Rosell", - "homepage": "https://www.bitwise-it.dk/contact", - "role": "Project Author" - } - ], - "description": "Locate a binaries by means of exec() or similar", - "keywords": [ - "binary", - "discover", - "locate", - "whereis", - "which" - ], - "support": { - "issues": "https://github.com/rosell-dk/locate-binaries/issues", - "source": "https://github.com/rosell-dk/locate-binaries/tree/1.0" - }, - "funding": [ - { - "url": "https://github.com/rosell-dk", - "type": "github" - }, - { - "url": "https://ko-fi.com/rosell", - "type": "ko_fi" - } - ], - "time": "2022-04-20T07:20:07+00:00" - }, - { - "name": "rosell-dk/webp-convert", - "version": "2.9.2", - "source": { - "type": "git", - "url": "https://github.com/rosell-dk/webp-convert.git", - "reference": "5ccba85ebe3b28ae229459fd0baed25314616ac9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/rosell-dk/webp-convert/zipball/5ccba85ebe3b28ae229459fd0baed25314616ac9", - "reference": "5ccba85ebe3b28ae229459fd0baed25314616ac9", - "shasum": "" - }, - "require": { - "php": "^5.6 | ^7.0 | ^8.0", - "rosell-dk/exec-with-fallback": "^1.0.0", - "rosell-dk/image-mime-type-guesser": "^1.1.1", - "rosell-dk/locate-binaries": "^1.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.11", - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^9.3", - "squizlabs/php_codesniffer": "3.*" - }, - "suggest": { - "ext-gd": "to use GD extension for converting. Note: Gd must be compiled with webp support", - "ext-imagick": "to use Imagick extension for converting. Note: Gd must be compiled with webp support", - "ext-vips": "to use Vips extension for converting.", - "php-stan/php-stan": "Suggested for dev, in order to analyse code before committing" - }, - "type": "library", - "extra": { - "scripts-descriptions": { - "ci": "Run tests before CI", - "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", - "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", - "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", - "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", - "test": "Launches the preconfigured PHPUnit" - } - }, - "autoload": { - "psr-4": { - "WebPConvert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bjørn Rosell", - "homepage": "https://www.bitwise-it.dk/contact", - "role": "Project Author" - }, - { - "name": "Martin Folkers", - "homepage": "https://twobrain.io", - "role": "Collaborator" - } - ], - "description": "Convert JPEG & PNG to WebP with PHP", - "keywords": [ - "Webp", - "cwebp", - "gd", - "image conversion", - "images", - "imagick", - "jpg", - "jpg2webp", - "png", - "png2webp" - ], - "support": { - "issues": "https://github.com/rosell-dk/webp-convert/issues", - "source": "https://github.com/rosell-dk/webp-convert/tree/2.9.2" - }, - "funding": [ - { - "url": "https://github.com/rosell-dk", - "type": "github" - }, - { - "url": "https://ko-fi.com/rosell", - "type": "ko_fi" - } - ], - "time": "2022-05-19T13:56:36+00:00" - }, - { - "name": "seld/jsonlint", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/594fd6462aad8ecee0b45ca5045acea4776667f1", - "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.5", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" - }, - "bin": [ - "bin/jsonlint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Seld\\JsonLint\\": "src/Seld/JsonLint/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "JSON Linter", - "keywords": [ - "json", - "linter", - "parser", - "validator" - ], - "support": { - "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.10.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", - "type": "tidelift" - } - ], - "time": "2023-05-11T13:16:46+00:00" - }, - { - "name": "seld/phar-utils", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/phar-utils.git", - "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", - "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\PharUtils\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be" - } - ], - "description": "PHAR file format utilities, for when PHP phars you up", - "keywords": [ - "phar" - ], - "support": { - "issues": "https://github.com/Seldaek/phar-utils/issues", - "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1" - }, - "time": "2022-08-31T10:31:18+00:00" - }, - { - "name": "seld/signal-handler", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/signal-handler.git", - "reference": "f69d119511dc0360440cdbdaa71829c149b7be75" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/f69d119511dc0360440cdbdaa71829c149b7be75", - "reference": "f69d119511dc0360440cdbdaa71829c149b7be75", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "require-dev": { - "phpstan/phpstan": "^1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^7.5.20 || ^8.5.23", - "psr/log": "^1 || ^2 || ^3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Seld\\Signal\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development", - "keywords": [ - "posix", - "sigint", - "signal", - "sigterm", - "unix" - ], - "support": { - "issues": "https://github.com/Seldaek/signal-handler/issues", - "source": "https://github.com/Seldaek/signal-handler/tree/2.0.1" - }, - "time": "2022-07-20T18:31:45+00:00" - }, - { - "name": "simplepie/simplepie", - "version": "1.8.0", - "source": { - "type": "git", - "url": "https://github.com/simplepie/simplepie.git", - "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/simplepie/simplepie/zipball/65b095d87bc00898d8fa7737bdbcda93a3fbcc55", - "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "ext-xml": "*", - "ext-xmlreader": "*", - "php": ">=7.2.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19 || ^3.8", - "psr/simple-cache": "^1 || ^2 || ^3", - "yoast/phpunit-polyfills": "^1.0.1" - }, - "suggest": { - "ext-curl": "", - "ext-iconv": "", - "ext-intl": "", - "ext-mbstring": "", - "mf2/mf2": "Microformat module that allows for parsing HTML for microformats" - }, - "type": "library", - "autoload": { - "psr-0": { - "SimplePie": "library" - }, - "psr-4": { - "SimplePie\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Ryan Parman", - "homepage": "http://ryanparman.com/", - "role": "Creator, alumnus developer" - }, - { - "name": "Sam Sneddon", - "homepage": "https://gsnedders.com/", - "role": "Alumnus developer" - }, - { - "name": "Ryan McCue", - "email": "me@ryanmccue.info", - "homepage": "http://ryanmccue.info/", - "role": "Developer" - } - ], - "description": "A simple Atom/RSS parsing library for PHP", - "homepage": "http://simplepie.org/", - "keywords": [ - "atom", - "feeds", - "rss" - ], - "support": { - "issues": "https://github.com/simplepie/simplepie/issues", - "source": "https://github.com/simplepie/simplepie/tree/1.8.0" - }, - "time": "2023-01-20T08:37:35+00:00" - }, - { - "name": "symfony/console", - "version": "v6.2.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "12288d9f4500f84a4d02254d4aa968b15488476f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/12288d9f4500f84a4d02254d4aa968b15488476f", - "reference": "12288d9f4500f84a4d02254d4aa968b15488476f", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.4|^6.0" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v6.2.10" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-04-28T13:37:43+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.3-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-03-01T10:25:55+00:00" - }, - { - "name": "symfony/error-handler", - "version": "v6.2.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "8b7e9f124640cb0611624a9383176c3e5f7d8cfb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/8b7e9f124640cb0611624a9383176c3e5f7d8cfb", - "reference": "8b7e9f124640cb0611624a9383176c3e5f7d8cfb", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" - }, - "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" - }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.2.10" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-04-18T13:46:08+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v6.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", - "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" - }, - "conflict": { - "symfony/dependency-injection": "<5.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.8" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-03-20T16:06:02+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.3-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-03-01T10:32:47+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v6.2.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "fd588debf7d1bc16a2c84b4b3b71145d9946b894" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/fd588debf7d1bc16a2c84b4b3b71145d9946b894", - "reference": "fd588debf7d1bc16a2c84b4b3b71145d9946b894", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.2.10" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-04-18T13:46:08+00:00" - }, - { - "name": "symfony/finder", - "version": "v6.2.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", - "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v6.2.7" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-02-16T09:57:23+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v6.2.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "49adbb92bcb4e3c2943719d2756271e8b9602acc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49adbb92bcb4e3c2943719d2756271e8b9602acc", - "reference": "49adbb92bcb4e3c2943719d2756271e8b9602acc", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1" - }, - "conflict": { - "symfony/cache": "<6.2" - }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" - }, - "suggest": { - "symfony/mime": "To use the file extension guesser" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.2.10" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-04-18T13:46:08+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v6.2.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "81064a65a5496f17d2b6984f6519406f98864215" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/81064a65a5496f17d2b6984f6519406f98864215", - "reference": "81064a65a5496f17d2b6984f6519406f98864215", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^6.1", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^5.4.21|^6.2.7", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.2", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", - "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", - "twig/twig": "<2.13" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^6.1", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.2", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^5.4|^6.0", - "symfony/routing": "^5.4|^6.0", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.2.10" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-04-28T13:50:28+00:00" - }, - { - "name": "symfony/mime", - "version": "v6.2.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "b6c137fc53a9f7c4c951cd3f362b3734c7a97723" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/b6c137fc53a9f7c4c951cd3f362b3734c7a97723", - "reference": "b6c137fc53a9f7c4c951cd3f362b3734c7a97723", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1|^4", - "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^6.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], - "support": { - "source": "https://github.com/symfony/mime/tree/v6.2.10" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-04-19T09:54:16+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/process", - "version": "v6.2.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e", - "reference": "b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v6.2.10" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-04-18T13:56:57+00:00" - }, - { - "name": "symfony/routing", - "version": "v6.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "69062e2823f03b82265d73a966999660f0e1e404" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/69062e2823f03b82265d73a966999660f0e1e404", - "reference": "69062e2823f03b82265d73a966999660f0e1e404", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" - }, - "require-dev": { - "doctrine/annotations": "^1.12|^2", - "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/v6.2.8" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-03-14T15:00:05+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^2.0" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.3-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-03-01T10:32:47+00:00" - }, - { - "name": "symfony/string", - "version": "v6.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", - "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.0" - }, - "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", - "symfony/translation-contracts": "^2.0|^3.0", - "symfony/var-exporter": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v6.2.8" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-03-20T16:06:02+00:00" - }, - { - "name": "symfony/translation", - "version": "v6.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/817535dbb1721df8b3a8f2489dc7e50bcd6209b5", - "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.0" - }, - "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "nikic/php-parser": "^4.13", - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "nikic/php-parser": "To use PhpAstExtractor", - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/v6.2.8" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-03-31T09:14:44+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dfec258b9dd17a6b24420d464c43bffe347441c8", - "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.3-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.2.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-03-01T10:32:47+00:00" + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "63a65140203e0e8559e12ad3638099d6", + "packages": [ + { + "name": "brick/math", + "version": "0.11.0", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "5.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.11.0" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2023-01-15T23:15:59+00:00" + }, + { + "name": "composer/ca-bundle", + "version": "1.3.5", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/74780ccf8c19d6acb8d65c5f39cd72110e132bbd", + "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.55", + "psr/log": "^1.0", + "symfony/phpunit-bridge": "^4.2 || ^5", + "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/ca-bundle/issues", + "source": "https://github.com/composer/ca-bundle/tree/1.3.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2023-01-11T08:27:00+00:00" + }, + { + "name": "composer/class-map-generator", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/class-map-generator.git", + "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", + "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", + "shasum": "" + }, + "require": { + "composer/pcre": "^2 || ^3", + "php": "^7.2 || ^8.0", + "symfony/finder": "^4.4 || ^5.3 || ^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.6", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/filesystem": "^5.4 || ^6", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\ClassMapGenerator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Utilities to scan PHP code and generate class maps.", + "keywords": [ + "classmap" + ], + "support": { + "issues": "https://github.com/composer/class-map-generator/issues", + "source": "https://github.com/composer/class-map-generator/tree/1.0.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-06-19T11:31:27+00:00" + }, + { + "name": "composer/composer", + "version": "2.5.7", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "d477018d3f2ebd76dede3d3988a0b1a7add4d81e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/d477018d3f2ebd76dede3d3988a0b1a7add4d81e", + "reference": "d477018d3f2ebd76dede3d3988a0b1a7add4d81e", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0", + "composer/class-map-generator": "^1.0", + "composer/metadata-minifier": "^1.0", + "composer/pcre": "^2.1 || ^3.1", + "composer/semver": "^3.0", + "composer/spdx-licenses": "^1.5.7", + "composer/xdebug-handler": "^2.0.2 || ^3.0.3", + "justinrainbow/json-schema": "^5.2.11", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "react/promise": "^2.8", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.2", + "seld/signal-handler": "^2.0", + "symfony/console": "^5.4.11 || ^6.0.11", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/polyfill-php73": "^1.24", + "symfony/polyfill-php80": "^1.24", + "symfony/polyfill-php81": "^1.24", + "symfony/process": "^5.4 || ^6.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.9.3", + "phpstan/phpstan-deprecation-rules": "^1", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1", + "phpstan/phpstan-symfony": "^1.2.10", + "symfony/phpunit-bridge": "^6.0" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "phpstan": { + "includes": [ + "phpstan/rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "https://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/composer/issues", + "source": "https://github.com/composer/composer/tree/2.5.7" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2023-05-24T13:00:40+00:00" + }, + { + "name": "composer/metadata-minifier", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/metadata-minifier.git", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207", + "reference": "c549d23829536f0d0e984aaabbf02af91f443207", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "composer/composer": "^2", + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\MetadataMinifier\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Small utility library that handles metadata minification and expansion.", + "keywords": [ + "composer", + "compression" + ], + "support": { + "issues": "https://github.com/composer/metadata-minifier/issues", + "source": "https://github.com/composer/metadata-minifier/tree/1.0.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2021-04-07T13:37:33+00:00" + }, + { + "name": "composer/pcre", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.1.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-11-17T09:50:14+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-04-01T19:23:25+00:00" + }, + { + "name": "composer/spdx-licenses", + "version": "1.5.7", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "c848241796da2abf65837d51dce1fae55a960149" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/c848241796da2abf65837d51dce1fae55a960149", + "reference": "c848241796da2abf65837d51dce1fae55a960149", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Spdx\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "SPDX licenses list and validation library.", + "keywords": [ + "license", + "spdx", + "validator" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/spdx-licenses/issues", + "source": "https://github.com/composer/spdx-licenses/tree/1.5.7" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-05-23T07:37:50+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ced299686f41dce890debac69273b47ffe98a40c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T21:32:43+00:00" + }, + { + "name": "dmitry-suffi/redis-session-handler", + "version": "1.0.4", + "source": { + "type": "git", + "url": "https://github.com/dmitry-suffi/redis-session-handler.git", + "reference": "7057430a726dd8df530e1e3071e32cc6b1b5b170" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmitry-suffi/redis-session-handler/zipball/7057430a726dd8df530e1e3071e32cc6b1b5b170", + "reference": "7057430a726dd8df530e1e3071e32cc6b1b5b170", + "shasum": "" + }, + "type": "project", + "autoload": { + "psr-4": { + "suffi\\RedisSessionHandler\\": "src\\" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Обработчик сессий через Redis с механизмом блокировки", + "homepage": "https://github.com/dmitry-suffi/redis-session-handler", + "keywords": [ + "redis", + "session" + ], + "support": { + "issues": "https://github.com/dmitry-suffi/redis-session-handler/issues", + "source": "https://github.com/dmitry-suffi/redis-session-handler/tree/1.0.4" + }, + "time": "2017-06-30T13:11:32+00:00" + }, + { + "name": "doctrine/cache", + "version": "2.2.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", + "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", + "shasum": "" + }, + "require": { + "php": "~7.1 || ^8.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psr/cache": "^1.0 || ^2.0 || ^3.0", + "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/var-exporter": "^4.4 || ^5.4 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", + "homepage": "https://www.doctrine-project.org/projects/cache.html", + "keywords": [ + "abstraction", + "apcu", + "cache", + "caching", + "couchdb", + "memcached", + "php", + "redis", + "xcache" + ], + "support": { + "issues": "https://github.com/doctrine/cache/issues", + "source": "https://github.com/doctrine/cache/tree/2.2.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", + "type": "tidelift" + } + ], + "time": "2022-05-20T20:07:39+00:00" + }, + { + "name": "doctrine/dbal", + "version": "3.6.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/b4bd1cfbd2b916951696d82e57d054394d84864c", + "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2", + "doctrine/cache": "^1.11|^2.0", + "doctrine/deprecations": "^0.5.3|^1", + "doctrine/event-manager": "^1|^2", + "php": "^7.4 || ^8.0", + "psr/cache": "^1|^2|^3", + "psr/log": "^1|^2|^3" + }, + "require-dev": { + "doctrine/coding-standard": "11.1.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2022.3", + "phpstan/phpstan": "1.10.9", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "9.6.6", + "psalm/plugin-phpunit": "0.18.4", + "squizlabs/php_codesniffer": "3.7.2", + "symfony/cache": "^5.4|^6.0", + "symfony/console": "^4.4|^5.4|^6.0", + "vimeo/psalm": "4.30.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\DBAL\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", + "homepage": "https://www.doctrine-project.org/projects/dbal.html", + "keywords": [ + "abstraction", + "database", + "db2", + "dbal", + "mariadb", + "mssql", + "mysql", + "oci8", + "oracle", + "pdo", + "pgsql", + "postgresql", + "queryobject", + "sasql", + "sql", + "sqlite", + "sqlserver", + "sqlsrv" + ], + "support": { + "issues": "https://github.com/doctrine/dbal/issues", + "source": "https://github.com/doctrine/dbal/tree/3.6.2" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", + "type": "tidelift" + } + ], + "time": "2023-04-14T07:25:38+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "8cffffb2218e01f3b370bf763e00e81697725259" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/8cffffb2218e01f3b370bf763e00e81697725259", + "reference": "8cffffb2218e01f3b370bf763e00e81697725259", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.1.0" + }, + "time": "2023-05-29T18:55:17+00:00" + }, + { + "name": "doctrine/event-manager", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/event-manager.git", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", + "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/common": "<2.9" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.8", + "phpunit/phpunit": "^9.5", + "vimeo/psalm": "^4.28" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + }, + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", + "homepage": "https://www.doctrine-project.org/projects/event-manager.html", + "keywords": [ + "event", + "event dispatcher", + "event manager", + "event system", + "events" + ], + "support": { + "issues": "https://github.com/doctrine/event-manager/issues", + "source": "https://github.com/doctrine/event-manager/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", + "type": "tidelift" + } + ], + "time": "2022-10-12T20:59:15+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.6" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2022-10-20T09:10:12+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "84a527db05647743d50373e0ec53a152f2cde568" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-12-15T16:57:16+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^4.30" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-01-14T14:17:03+00:00" + }, + { + "name": "evolutioncms-services/document-manager", + "version": "1.0.9", + "source": { + "type": "git", + "url": "https://github.com/evolution-cms/DocumentManager.git", + "reference": "403c065a0be6367baaadd3a5b01cf0f84522c8db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/evolution-cms/DocumentManager/zipball/403c065a0be6367baaadd3a5b01cf0f84522c8db", + "reference": "403c065a0be6367baaadd3a5b01cf0f84522c8db", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "EvolutionCMS\\DocumentManager\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Pashkevich", + "email": "sertious2008.wortk3@gmail.com" + } + ], + "support": { + "issues": "https://github.com/evolution-cms/DocumentManager/issues", + "source": "https://github.com/evolution-cms/DocumentManager/tree/1.0.9" + }, + "time": "2021-05-31T15:12:43+00:00" + }, + { + "name": "evolutioncms-services/user-manager", + "version": "1.0.14", + "source": { + "type": "git", + "url": "https://github.com/evolution-cms/UserManager.git", + "reference": "eb743546dc33874ae02cacf70e07624f9bda99ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/evolution-cms/UserManager/zipball/eb743546dc33874ae02cacf70e07624f9bda99ef", + "reference": "eb743546dc33874ae02cacf70e07624f9bda99ef", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "EvolutionCMS\\UserManager\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alexander Pashkevich", + "email": "sertious2008.wortk3@gmail.com" + } + ], + "support": { + "issues": "https://github.com/evolution-cms/UserManager/issues", + "source": "https://github.com/evolution-cms/UserManager/tree/1.0.14" + }, + "time": "2021-11-17T09:44:48+00:00" + }, + { + "name": "evolutioncms/salo2", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/evolution-cms/salo2.git", + "reference": "e48a77cb71cc4241ee7559a210b7f0bd67365ee1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/evolution-cms/salo2/zipball/e48a77cb71cc4241ee7559a210b7f0bd67365ee1", + "reference": "e48a77cb71cc4241ee7559a210b7f0bd67365ee1", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0", + "illuminate/contracts": "^8.0|^9.0|^10.0", + "illuminate/support": "^8.0|^9.0|^10.0", + "php": "^7.3|^8.0" + }, + "default-branch": true, + "bin": [ + "bin/salo" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "EvolutionCMS\\Salo\\SaloServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "EvolutionCMS\\Salo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Evocms Docker files for running a basic evo application.", + "keywords": [ + "docker", + "evo" + ], + "support": { + "source": "https://github.com/evolution-cms/salo2/tree/master" + }, + "time": "2023-05-11T18:25:45+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-02-20T15:07:15+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2023-02-25T20:23:15+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.7.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", + "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0", + "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "ext-curl": "*", + "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", + "php-http/message-factory": "^1.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.7.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" + } + ], + "time": "2023-05-21T14:04:53+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6", + "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2023-05-21T13:50:22+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.5.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", + "reference": "b635f279edd83fc275f822a1188157ffea568ff6", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2023-04-17T16:11:26+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/b945d74a55a25a949158444f09ec0d3c120d69e2", + "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.19 || ^9.5.8", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2021-10-07T12:57:01+00:00" + }, + { + "name": "illuminate/bus", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/bus.git", + "reference": "ec2250684df1ff5cddc4ae639ec913996a4bd0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/bus/zipball/ec2250684df1ff5cddc4ae639ec913996a4bd0be", + "reference": "ec2250684df1ff5cddc4ae639ec913996a4bd0be", + "shasum": "" + }, + "require": { + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/pipeline": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" + }, + "suggest": { + "illuminate/queue": "Required to use closures when chaining jobs (^7.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Bus\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Bus package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-22T13:32:28+00:00" + }, + { + "name": "illuminate/cache", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/cache.git", + "reference": "8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/cache/zipball/8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72", + "reference": "8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72", + "shasum": "" + }, + "require": { + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" + }, + "provide": { + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "suggest": { + "ext-apcu": "Required to use the APC cache driver.", + "ext-filter": "Required to use the DynamoDb cache driver.", + "ext-memcached": "Required to use the memcache cache driver.", + "illuminate/database": "Required to use the database cache driver (^10.0).", + "illuminate/filesystem": "Required to use the file cache driver (^10.0).", + "illuminate/redis": "Required to use the redis cache driver (^10.0).", + "symfony/cache": "Required to use PSR-6 cache bridge (^6.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Cache\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Cache package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-24T13:58:54+00:00" + }, + { + "name": "illuminate/collections", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/collections.git", + "reference": "73652e915e56531e08c06bd356d8fa8bc346812e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/collections/zipball/73652e915e56531e08c06bd356d8fa8bc346812e", + "reference": "73652e915e56531e08c06bd356d8fa8bc346812e", + "shasum": "" + }, + "require": { + "illuminate/conditionable": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "php": "^8.1" + }, + "suggest": { + "symfony/var-dumper": "Required to use the dump method (^6.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "files": [ + "helpers.php" + ], + "psr-4": { + "Illuminate\\Support\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Collections package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-24T17:26:41+00:00" + }, + { + "name": "illuminate/conditionable", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/conditionable.git", + "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/conditionable/zipball/d0958e4741fc9d6f516a552060fd1b829a85e009", + "reference": "d0958e4741fc9d6f516a552060fd1b829a85e009", + "shasum": "" + }, + "require": { + "php": "^8.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Support\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Conditionable package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-02-03T08:06:17+00:00" + }, + { + "name": "illuminate/config", + "version": "v10.12.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/config.git", + "reference": "d5e83ceff5c4d5607b1b81763eb4c436911c35da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/config/zipball/d5e83ceff5c4d5607b1b81763eb4c436911c35da", + "reference": "d5e83ceff5c4d5607b1b81763eb4c436911c35da", + "shasum": "" + }, + "require": { + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "php": "^8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Config\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Config package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2022-08-21T15:47:27+00:00" + }, + { + "name": "illuminate/console", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/console.git", + "reference": "ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/console/zipball/ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339", + "reference": "ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "illuminate/view": "^10.0", + "nunomaduro/termwind": "^1.13", + "php": "^8.1", + "symfony/console": "^6.2", + "symfony/process": "^6.2" + }, + "suggest": { + "dragonmantank/cron-expression": "Required to use scheduler (^3.3.2).", + "ext-pcntl": "Required to use signal trapping.", + "guzzlehttp/guzzle": "Required to use the ping methods on schedules (^7.5).", + "illuminate/bus": "Required to use the scheduled job dispatcher (^10.0).", + "illuminate/container": "Required to use the scheduler (^10.0).", + "illuminate/filesystem": "Required to use the generator command (^10.0).", + "illuminate/queue": "Required to use closures for scheduled jobs (^10.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Console\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Console package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-23T18:03:05+00:00" + }, + { + "name": "illuminate/container", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/container.git", + "reference": "f85a85791c75a754190d6495e6ca611faaa64f61" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/container/zipball/f85a85791c75a754190d6495e6ca611faaa64f61", + "reference": "f85a85791c75a754190d6495e6ca611faaa64f61", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0", + "php": "^8.1", + "psr/container": "^1.1.1|^2.0.1" + }, + "provide": { + "psr/container-implementation": "1.1|2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Container\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Container package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-04-03T19:51:31+00:00" + }, + { + "name": "illuminate/contracts", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/contracts.git", + "reference": "0f8b766d66df7e0784ea73cfe4caf7a48b623f53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/0f8b766d66df7e0784ea73cfe4caf7a48b623f53", + "reference": "0f8b766d66df7e0784ea73cfe4caf7a48b623f53", + "shasum": "" + }, + "require": { + "php": "^8.1", + "psr/container": "^1.1.1|^2.0.1", + "psr/simple-cache": "^1.0|^2.0|^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Contracts\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Contracts package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-01T15:41:14+00:00" + }, + { + "name": "illuminate/database", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/database.git", + "reference": "5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/database/zipball/5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4", + "reference": "5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11", + "ext-pdo": "*", + "illuminate/collections": "^10.0", + "illuminate/container": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" + }, + "suggest": { + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "ext-filter": "Required to use the Postgres database driver.", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.21).", + "illuminate/console": "Required to use the database commands (^10.0).", + "illuminate/events": "Required to use the observers with Eloquent (^10.0).", + "illuminate/filesystem": "Required to use the migrations (^10.0).", + "illuminate/pagination": "Required to paginate the result set (^10.0).", + "symfony/finder": "Required to use Eloquent model factories (^6.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Database\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Database package.", + "homepage": "https://laravel.com", + "keywords": [ + "database", + "laravel", + "orm", + "sql" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-29T15:22:45+00:00" + }, + { + "name": "illuminate/events", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/events.git", + "reference": "c68138ea57360c19a145e5912fb474cfd1845366" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/events/zipball/c68138ea57360c19a145e5912fb474cfd1845366", + "reference": "c68138ea57360c19a145e5912fb474cfd1845366", + "shasum": "" + }, + "require": { + "illuminate/bus": "^10.0", + "illuminate/collections": "^10.0", + "illuminate/container": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Illuminate\\Events\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Events package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-02-16T15:35:09+00:00" + }, + { + "name": "illuminate/filesystem", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/filesystem.git", + "reference": "53a46fed9b31617ce3a786690b2294f0a54559ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/filesystem/zipball/53a46fed9b31617ce3a786690b2294f0a54559ea", + "reference": "53a46fed9b31617ce3a786690b2294f0a54559ea", + "shasum": "" + }, + "require": { + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1", + "symfony/finder": "^6.2" + }, + "suggest": { + "ext-fileinfo": "Required to use the Filesystem class.", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-hash": "Required to use the Filesystem class.", + "illuminate/http": "Required for handling uploaded files (^7.0).", + "league/flysystem": "Required to use the Flysystem local driver (^3.0.16).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", + "symfony/mime": "Required to enable support for guessing extensions (^6.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Filesystem\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Filesystem package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-03-22T21:14:41+00:00" + }, + { + "name": "illuminate/http", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/http.git", + "reference": "e08bf43e2ca73d06d0082a4e993878f8a4620ae4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/http/zipball/e08bf43e2ca73d06d0082a4e993878f8a4620ae4", + "reference": "e08bf43e2ca73d06d0082a4e993878f8a4620ae4", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "fruitcake/php-cors": "^1.2", + "guzzlehttp/uri-template": "^1.0", + "illuminate/collections": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/session": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1", + "symfony/http-foundation": "^6.2", + "symfony/http-kernel": "^6.2", + "symfony/mime": "^6.2" + }, + "suggest": { + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "guzzlehttp/guzzle": "Required to use the HTTP Client (^7.5)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Http\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Http package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-15T14:58:02+00:00" + }, + { + "name": "illuminate/log", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/log.git", + "reference": "65ed49152b121fc82116223f092b68fe8a3b4ba0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/log/zipball/65ed49152b121fc82116223f092b68fe8a3b4ba0", + "reference": "65ed49152b121fc82116223f092b68fe8a3b4ba0", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0", + "illuminate/support": "^10.0", + "monolog/monolog": "^3.0", + "php": "^8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Log\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Log package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-03-13T03:05:16+00:00" + }, + { + "name": "illuminate/macroable", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/macroable.git", + "reference": "6b80109438161d45a5f2bdf7ecdd56cbd0096c3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/macroable/zipball/6b80109438161d45a5f2bdf7ecdd56cbd0096c3d", + "reference": "6b80109438161d45a5f2bdf7ecdd56cbd0096c3d", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Support\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Macroable package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-03-17T13:33:11+00:00" + }, + { + "name": "illuminate/pagination", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/pagination.git", + "reference": "2af69e712297cc38377593a72f00d430867e8bdc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/pagination/zipball/2af69e712297cc38377593a72f00d430867e8bdc", + "reference": "2af69e712297cc38377593a72f00d430867e8bdc", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Pagination\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Pagination package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-04-17T16:01:53+00:00" + }, + { + "name": "illuminate/pipeline", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/pipeline.git", + "reference": "f2119ae9a26e420bf0ed9d5e7e7aa4548547e7b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/pipeline/zipball/f2119ae9a26e420bf0ed9d5e7e7aa4548547e7b1", + "reference": "f2119ae9a26e420bf0ed9d5e7e7aa4548547e7b1", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Pipeline\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Pipeline package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-03-03T15:55:44+00:00" + }, + { + "name": "illuminate/redis", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/redis.git", + "reference": "a86771f93c92b827e19f007347d65d1197202793" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/redis/zipball/a86771f93c92b827e19f007347d65d1197202793", + "reference": "a86771f93c92b827e19f007347d65d1197202793", + "shasum": "" + }, + "require": { + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" + }, + "suggest": { + "ext-redis": "Required to use the phpredis connector (^4.0|^5.0).", + "predis/predis": "Required to use the predis connector (^2.0.2)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Redis\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Redis package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-08T14:32:30+00:00" + }, + { + "name": "illuminate/routing", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/routing.git", + "reference": "62e17faf9f9f4bb80f00c32599b630f5fcd257d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/routing/zipball/62e17faf9f9f4bb80f00c32599b630f5fcd257d7", + "reference": "62e17faf9f9f4bb80f00c32599b630f5fcd257d7", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "ext-hash": "*", + "illuminate/collections": "^10.0", + "illuminate/container": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/http": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/pipeline": "^10.0", + "illuminate/session": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1", + "symfony/http-foundation": "^6.2", + "symfony/http-kernel": "^6.2", + "symfony/routing": "^6.2" + }, + "suggest": { + "illuminate/console": "Required to use the make commands (^10.0).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Routing\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Routing package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-23T18:17:17+00:00" + }, + { + "name": "illuminate/session", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/session.git", + "reference": "f39be6b679781d5a7089c76965ed635491b4b5dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/session/zipball/f39be6b679781d5a7089c76965ed635491b4b5dd", + "reference": "f39be6b679781d5a7089c76965ed635491b4b5dd", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-session": "*", + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/filesystem": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1", + "symfony/finder": "^6.2", + "symfony/http-foundation": "^6.2" + }, + "suggest": { + "illuminate/console": "Required to use the session:table command (^10.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Session\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Session package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-09T13:08:05+00:00" + }, + { + "name": "illuminate/support", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/support.git", + "reference": "679edd76b4ba656c3d4ee2dbf53e99e31a73448b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/support/zipball/679edd76b4ba656c3d4ee2dbf53e99e31a73448b", + "reference": "679edd76b4ba656c3d4ee2dbf53e99e31a73448b", + "shasum": "" + }, + "require": { + "doctrine/inflector": "^2.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-mbstring": "*", + "illuminate/collections": "^10.0", + "illuminate/conditionable": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "nesbot/carbon": "^2.62.1", + "php": "^8.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "suggest": { + "illuminate/filesystem": "Required to use the composer class (^10.0).", + "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", + "ramsey/uuid": "Required to use Str::uuid() (^4.7).", + "symfony/process": "Required to use the composer class (^6.2).", + "symfony/uid": "Required to use Str::ulid() (^6.2).", + "symfony/var-dumper": "Required to use the dd function (^6.2).", + "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "files": [ + "helpers.php" + ], + "psr-4": { + "Illuminate\\Support\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Support package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-26T14:41:26+00:00" + }, + { + "name": "illuminate/translation", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/translation.git", + "reference": "6c61b26735d57797753b5970029505d3854be127" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/translation/zipball/6c61b26735d57797753b5970029505d3854be127", + "reference": "6c61b26735d57797753b5970029505d3854be127", + "shasum": "" + }, + "require": { + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/filesystem": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Translation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Translation package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-02-14T15:00:37+00:00" + }, + { + "name": "illuminate/validation", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/validation.git", + "reference": "86e252487c170fb88cdb72f74aee1a8d187d377a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/validation/zipball/86e252487c170fb88cdb72f74aee1a8d187d377a", + "reference": "86e252487c170fb88cdb72f74aee1a8d187d377a", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11", + "egulias/email-validator": "^3.2.5|^4.0", + "ext-filter": "*", + "ext-mbstring": "*", + "illuminate/collections": "^10.0", + "illuminate/container": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "illuminate/translation": "^10.0", + "php": "^8.1", + "symfony/http-foundation": "^6.2", + "symfony/mime": "^6.2" + }, + "suggest": { + "illuminate/database": "Required to use the database presence verifier (^10.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\Validation\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate Validation package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-29T06:27:01+00:00" + }, + { + "name": "illuminate/view", + "version": "v10.13.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/view.git", + "reference": "acf034c30db23debb797a94641a43780aeecd6c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/view/zipball/acf034c30db23debb797a94641a43780aeecd6c1", + "reference": "acf034c30db23debb797a94641a43780aeecd6c1", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "illuminate/collections": "^10.0", + "illuminate/container": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/events": "^10.0", + "illuminate/filesystem": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "php": "^8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "10.x-dev" + } + }, + "autoload": { + "psr-4": { + "Illuminate\\View\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Illuminate View package.", + "homepage": "https://laravel.com", + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-05-30T14:18:22+00:00" + }, + { + "name": "james-heinrich/phpthumb", + "version": "v1.7.20", + "source": { + "type": "git", + "url": "https://github.com/JamesHeinrich/phpThumb.git", + "reference": "6c642aad3fa33ce88fe1307feaa6316edfc9ed76" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JamesHeinrich/phpThumb/zipball/6c642aad3fa33ce88fe1307feaa6316edfc9ed76", + "reference": "6c642aad3fa33ce88fe1307feaa6316edfc9ed76", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "suggest": { + "ext-gd": "PHP GD library", + "ext-imagick": "PHP ImageMagick" + }, + "type": "library", + "autoload": { + "files": [ + "phpthumb.class.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-1.0-or-later", + "LGPL-3.0-only", + "MPL-2.0" + ], + "authors": [ + { + "name": "James Heinrich", + "email": "info@silisoftware.com", + "homepage": "http://www.silisoftware.com/", + "role": "Developer" + } + ], + "description": "The PHP thumbnail generator", + "homepage": "http://phpthumb.sourceforge.net/", + "keywords": [ + "ImageMagick", + "gd", + "image", + "magic", + "thumb", + "thumbnail" + ], + "support": { + "issues": "https://github.com/JamesHeinrich/phpThumb/issues", + "source": "https://github.com/JamesHeinrich/phpThumb/tree/v1.7.20" + }, + "time": "2023-01-09T14:23:26+00:00" + }, + { + "name": "justinrainbow/json-schema", + "version": "5.2.12", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", + "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1", + "json-schema/json-schema-test-suite": "1.2.0", + "phpunit/phpunit": "^4.8.35" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "support": { + "issues": "https://github.com/justinrainbow/json-schema/issues", + "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12" + }, + "time": "2022-04-13T08:02:27+00:00" + }, + { + "name": "league/flysystem", + "version": "1.1.10", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", + "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frenky.net" + } + ], + "description": "Filesystem abstraction: Many filesystems, one API.", + "keywords": [ + "Cloud Files", + "WebDAV", + "abstraction", + "aws", + "cloud", + "copy.com", + "dropbox", + "file systems", + "files", + "filesystem", + "filesystems", + "ftp", + "rackspace", + "remote", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.1.10" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2022-10-04T09:16:37+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-04-17T13:12:02+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.3.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^9.5.26", + "predis/predis": "^1.1 || ^2", + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/3.3.1" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-02-06T13:46:10+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.67.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/c1001b3bc75039b07f38a79db5237c4c529e04c8", + "reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2023-05-25T22:09:47+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.15.1", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2023-02-08T01:06:31+00:00" + }, + { + "name": "phpmailer/phpmailer", + "version": "v6.8.0", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "df16b615e371d81fb79e506277faea67a1be18f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/df16b615e371d81fb79e506277faea67a1be18f1", + "reference": "df16b615e371d81fb79e506277faea67a1be18f1", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", + "doctrine/annotations": "^1.2.6 || ^1.13.3", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcompatibility/php-compatibility": "^9.3.5", + "roave/security-advisories": "dev-latest", + "squizlabs/php_codesniffer": "^3.7.1", + "yoast/phpunit-polyfills": "^1.0.4" + }, + "suggest": { + "ext-mbstring": "Needed to send email in multibyte encoding charset or decode encoded addresses", + "ext-openssl": "Needed for secure SMTP sending and DKIM signing", + "greew/oauth2-azure-provider": "Needed for Microsoft Azure XOAUTH2 authentication", + "hayageek/oauth2-yahoo": "Needed for Yahoo XOAUTH2 authentication", + "league/oauth2-google": "Needed for Google XOAUTH2 authentication", + "psr/log": "For optional PSR-3 debug logging", + "symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)", + "thenetworg/oauth2-azure": "Needed for Microsoft XOAUTH2 authentication" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPMailer\\PHPMailer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-only" + ], + "authors": [ + { + "name": "Marcus Bointon", + "email": "phpmailer@synchromedia.co.uk" + }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, + { + "name": "Andy Prevost", + "email": "codeworxtech@users.sourceforge.net" + }, + { + "name": "Brent R. Matzelle" + } + ], + "description": "PHPMailer is a full-featured email creation and transfer class for PHP", + "support": { + "issues": "https://github.com/PHPMailer/PHPMailer/issues", + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.0" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "time": "2023-03-06T14:43:22+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.1", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2023-02-25T19:38:58+00:00" + }, + { + "name": "predis/predis", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "a77a43913a74f9331f637bb12867eb8e274814e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/a77a43913a74f9331f637bb12867eb8e274814e5", + "reference": "a77a43913a74f9331f637bb12867eb8e274814e5", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.3", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^8.0 || ~9.4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Predis\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Till Krüss", + "homepage": "https://till.im", + "role": "Maintainer" + } + ], + "description": "A flexible and feature-complete Redis client for PHP.", + "homepage": "http://github.com/predis/predis", + "keywords": [ + "nosql", + "predis", + "redis" + ], + "support": { + "issues": "https://github.com/predis/predis/issues", + "source": "https://github.com/predis/predis/tree/v2.1.2" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2023-03-02T18:32:04+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/1.0.2" + }, + "time": "2023-04-10T20:12:12+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "e616d01114759c4c489f93b099585439f795fe35" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", + "reference": "e616d01114759c4c489f93b099585439f795fe35", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + }, + "time": "2023-04-10T20:10:41+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "react/promise", + "version": "v2.10.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", + "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v2.10.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2023-05-02T15:15:43+00:00" + }, + { + "name": "rosell-dk/exec-with-fallback", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/rosell-dk/exec-with-fallback.git", + "reference": "f88a6b29abd0b580566056b7c1eb0434eb5db20d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rosell-dk/exec-with-fallback/zipball/f88a6b29abd0b580566056b7c1eb0434eb5db20d", + "reference": "f88a6b29abd0b580566056b7c1eb0434eb5db20d", + "shasum": "" + }, + "require": { + "php": "^5.6 | ^7.0 | ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.11", + "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "3.*" + }, + "suggest": { + "php-stan/php-stan": "Suggested for dev, in order to analyse code before committing" + }, + "type": "library", + "extra": { + "scripts-descriptions": { + "ci": "Run tests before CI", + "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", + "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", + "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", + "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", + "test": "Launches the preconfigured PHPUnit" + } + }, + "autoload": { + "psr-4": { + "ExecWithFallback\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bjørn Rosell", + "homepage": "https://www.bitwise-it.dk/contact", + "role": "Project Author" + } + ], + "description": "An exec() with fallback to emulations (proc_open, etc)", + "keywords": [ + "command", + "exec", + "fallback", + "open_proc", + "resiliant", + "sturdy" + ], + "support": { + "issues": "https://github.com/rosell-dk/exec-with-fallback/issues", + "source": "https://github.com/rosell-dk/exec-with-fallback/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/rosell-dk", + "type": "github" + }, + { + "url": "https://ko-fi.com/rosell", + "type": "ko_fi" + } + ], + "time": "2021-12-08T12:09:43+00:00" + }, + { + "name": "rosell-dk/file-util", + "version": "0.1.1", + "source": { + "type": "git", + "url": "https://github.com/rosell-dk/file-util.git", + "reference": "2ff895308c37f448b34b031cfbfd8e45f43936fd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rosell-dk/file-util/zipball/2ff895308c37f448b34b031cfbfd8e45f43936fd", + "reference": "2ff895308c37f448b34b031cfbfd8e45f43936fd", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "rosell-dk/exec-with-fallback": "^1.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.11", + "mikey179/vfsstream": "^1.6", + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "3.*" + }, + "type": "library", + "extra": { + "scripts-descriptions": { + "ci": "Run tests before CI", + "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", + "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", + "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", + "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", + "test": "Launches the preconfigured PHPUnit" + } + }, + "autoload": { + "psr-4": { + "FileUtil\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bjørn Rosell", + "homepage": "https://www.bitwise-it.dk/contact", + "role": "Project Author" + } + ], + "description": "Functions for dealing with files and paths", + "keywords": [ + "files", + "path", + "util" + ], + "support": { + "issues": "https://github.com/rosell-dk/file-util/issues", + "source": "https://github.com/rosell-dk/file-util/tree/0.1.1" + }, + "funding": [ + { + "url": "https://github.com/rosell-dk", + "type": "github" + }, + { + "url": "https://ko-fi.com/rosell", + "type": "ko_fi" + } + ], + "time": "2022-04-19T10:12:31+00:00" + }, + { + "name": "rosell-dk/image-mime-type-guesser", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/rosell-dk/image-mime-type-guesser.git", + "reference": "72f7040e95a78937ae2edece452530224fcacea6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rosell-dk/image-mime-type-guesser/zipball/72f7040e95a78937ae2edece452530224fcacea6", + "reference": "72f7040e95a78937ae2edece452530224fcacea6", + "shasum": "" + }, + "require": { + "php": "^5.6 | ^7.0 | ^8.0", + "rosell-dk/image-mime-type-sniffer": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.11", + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "3.*" + }, + "type": "library", + "extra": { + "scripts-descriptions": { + "ci": "Run tests before CI", + "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", + "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", + "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", + "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", + "test": "Launches the preconfigured PHPUnit" + } + }, + "autoload": { + "psr-4": { + "ImageMimeTypeGuesser\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bjørn Rosell", + "homepage": "https://www.bitwise-it.dk/contact", + "role": "Project Author" + } + ], + "description": "Guess mime type of images", + "keywords": [ + "image", + "images", + "mime", + "mime type" + ], + "support": { + "issues": "https://github.com/rosell-dk/image-mime-type-guesser/issues", + "source": "https://github.com/rosell-dk/image-mime-type-guesser/tree/1.1.1" + }, + "funding": [ + { + "url": "https://github.com/rosell-dk", + "type": "github" + }, + { + "url": "https://ko-fi.com/rosell", + "type": "ko_fi" + } + ], + "time": "2022-05-19T09:57:15+00:00" + }, + { + "name": "rosell-dk/image-mime-type-sniffer", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/rosell-dk/image-mime-type-sniffer.git", + "reference": "9ed14cc5d2c14c417660a4dd1946b5f056494691" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rosell-dk/image-mime-type-sniffer/zipball/9ed14cc5d2c14c417660a4dd1946b5f056494691", + "reference": "9ed14cc5d2c14c417660a4dd1946b5f056494691", + "shasum": "" + }, + "require": { + "php": ">=5.4" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.11", + "mikey179/vfsstream": "^1.6", + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "3.*" + }, + "type": "library", + "extra": { + "scripts-descriptions": { + "ci": "Run tests before CI", + "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", + "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", + "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", + "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", + "test": "Launches the preconfigured PHPUnit" + } + }, + "autoload": { + "psr-4": { + "ImageMimeTypeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bjørn Rosell", + "homepage": "https://www.bitwise-it.dk/contact", + "role": "Project Author" + } + ], + "description": "Sniff mime type (images only)", + "keywords": [ + "image", + "images", + "mime", + "mime type" + ], + "support": { + "issues": "https://github.com/rosell-dk/image-mime-type-sniffer/issues", + "source": "https://github.com/rosell-dk/image-mime-type-sniffer/tree/1.1.1" + }, + "funding": [ + { + "url": "https://github.com/rosell-dk", + "type": "github" + }, + { + "url": "https://ko-fi.com/rosell", + "type": "ko_fi" + } + ], + "time": "2022-04-20T14:31:25+00:00" + }, + { + "name": "rosell-dk/locate-binaries", + "version": "1.0", + "source": { + "type": "git", + "url": "https://github.com/rosell-dk/locate-binaries.git", + "reference": "bd2f493383ecd55aa519828dd2898e30f3b9cbb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rosell-dk/locate-binaries/zipball/bd2f493383ecd55aa519828dd2898e30f3b9cbb0", + "reference": "bd2f493383ecd55aa519828dd2898e30f3b9cbb0", + "shasum": "" + }, + "require": { + "php": ">=5.6", + "rosell-dk/exec-with-fallback": "^1.0.0", + "rosell-dk/file-util": "^0.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.11", + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "3.*" + }, + "type": "library", + "extra": { + "scripts-descriptions": { + "ci": "Run tests before CI", + "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", + "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", + "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", + "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", + "test": "Launches the preconfigured PHPUnit" + } + }, + "autoload": { + "psr-4": { + "LocateBinaries\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bjørn Rosell", + "homepage": "https://www.bitwise-it.dk/contact", + "role": "Project Author" + } + ], + "description": "Locate a binaries by means of exec() or similar", + "keywords": [ + "binary", + "discover", + "locate", + "whereis", + "which" + ], + "support": { + "issues": "https://github.com/rosell-dk/locate-binaries/issues", + "source": "https://github.com/rosell-dk/locate-binaries/tree/1.0" + }, + "funding": [ + { + "url": "https://github.com/rosell-dk", + "type": "github" + }, + { + "url": "https://ko-fi.com/rosell", + "type": "ko_fi" + } + ], + "time": "2022-04-20T07:20:07+00:00" + }, + { + "name": "rosell-dk/webp-convert", + "version": "2.9.2", + "source": { + "type": "git", + "url": "https://github.com/rosell-dk/webp-convert.git", + "reference": "5ccba85ebe3b28ae229459fd0baed25314616ac9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/rosell-dk/webp-convert/zipball/5ccba85ebe3b28ae229459fd0baed25314616ac9", + "reference": "5ccba85ebe3b28ae229459fd0baed25314616ac9", + "shasum": "" + }, + "require": { + "php": "^5.6 | ^7.0 | ^8.0", + "rosell-dk/exec-with-fallback": "^1.0.0", + "rosell-dk/image-mime-type-guesser": "^1.1.1", + "rosell-dk/locate-binaries": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.11", + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^9.3", + "squizlabs/php_codesniffer": "3.*" + }, + "suggest": { + "ext-gd": "to use GD extension for converting. Note: Gd must be compiled with webp support", + "ext-imagick": "to use Imagick extension for converting. Note: Gd must be compiled with webp support", + "ext-vips": "to use Vips extension for converting.", + "php-stan/php-stan": "Suggested for dev, in order to analyse code before committing" + }, + "type": "library", + "extra": { + "scripts-descriptions": { + "ci": "Run tests before CI", + "phpcs": "Checks coding styles (PSR2) of file/dir, which you must supply. To check all, supply 'src'", + "phpcbf": "Fix coding styles (PSR2) of file/dir, which you must supply. To fix all, supply 'src'", + "cs-fix-all": "Fix the coding style of all the source files, to comply with the PSR-2 coding standard", + "cs-fix": "Fix the coding style of a PHP file or directory, which you must specify.", + "test": "Launches the preconfigured PHPUnit" + } + }, + "autoload": { + "psr-4": { + "WebPConvert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bjørn Rosell", + "homepage": "https://www.bitwise-it.dk/contact", + "role": "Project Author" + }, + { + "name": "Martin Folkers", + "homepage": "https://twobrain.io", + "role": "Collaborator" + } + ], + "description": "Convert JPEG & PNG to WebP with PHP", + "keywords": [ + "Webp", + "cwebp", + "gd", + "image conversion", + "images", + "imagick", + "jpg", + "jpg2webp", + "png", + "png2webp" + ], + "support": { + "issues": "https://github.com/rosell-dk/webp-convert/issues", + "source": "https://github.com/rosell-dk/webp-convert/tree/2.9.2" + }, + "funding": [ + { + "url": "https://github.com/rosell-dk", + "type": "github" + }, + { + "url": "https://ko-fi.com/rosell", + "type": "ko_fi" + } + ], + "time": "2022-05-19T13:56:36+00:00" + }, + { + "name": "seld/jsonlint", + "version": "1.10.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/594fd6462aad8ecee0b45ca5045acea4776667f1", + "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.5", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "support": { + "issues": "https://github.com/Seldaek/jsonlint/issues", + "source": "https://github.com/Seldaek/jsonlint/tree/1.10.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint", + "type": "tidelift" + } + ], + "time": "2023-05-11T13:16:46+00:00" + }, + { + "name": "seld/phar-utils", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", + "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phar" + ], + "support": { + "issues": "https://github.com/Seldaek/phar-utils/issues", + "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1" + }, + "time": "2022-08-31T10:31:18+00:00" + }, + { + "name": "seld/signal-handler", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/signal-handler.git", + "reference": "f69d119511dc0360440cdbdaa71829c149b7be75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/f69d119511dc0360440cdbdaa71829c149b7be75", + "reference": "f69d119511dc0360440cdbdaa71829c149b7be75", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "require-dev": { + "phpstan/phpstan": "^1", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^7.5.20 || ^8.5.23", + "psr/log": "^1 || ^2 || ^3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\Signal\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development", + "keywords": [ + "posix", + "sigint", + "signal", + "sigterm", + "unix" + ], + "support": { + "issues": "https://github.com/Seldaek/signal-handler/issues", + "source": "https://github.com/Seldaek/signal-handler/tree/2.0.1" + }, + "time": "2022-07-20T18:31:45+00:00" + }, + { + "name": "simplepie/simplepie", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/simplepie/simplepie.git", + "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/simplepie/simplepie/zipball/65b095d87bc00898d8fa7737bdbcda93a3fbcc55", + "reference": "65b095d87bc00898d8fa7737bdbcda93a3fbcc55", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "php": ">=7.2.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.19 || ^3.8", + "psr/simple-cache": "^1 || ^2 || ^3", + "yoast/phpunit-polyfills": "^1.0.1" + }, + "suggest": { + "ext-curl": "", + "ext-iconv": "", + "ext-intl": "", + "ext-mbstring": "", + "mf2/mf2": "Microformat module that allows for parsing HTML for microformats" + }, + "type": "library", + "autoload": { + "psr-0": { + "SimplePie": "library" + }, + "psr-4": { + "SimplePie\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Ryan Parman", + "homepage": "http://ryanparman.com/", + "role": "Creator, alumnus developer" + }, + { + "name": "Sam Sneddon", + "homepage": "https://gsnedders.com/", + "role": "Alumnus developer" + }, + { + "name": "Ryan McCue", + "email": "me@ryanmccue.info", + "homepage": "http://ryanmccue.info/", + "role": "Developer" + } + ], + "description": "A simple Atom/RSS parsing library for PHP", + "homepage": "http://simplepie.org/", + "keywords": [ + "atom", + "feeds", + "rss" + ], + "support": { + "issues": "https://github.com/simplepie/simplepie/issues", + "source": "https://github.com/simplepie/simplepie/tree/1.8.0" + }, + "time": "2023-01-20T08:37:35+00:00" + }, + { + "name": "symfony/console", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7", + "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-29T12:49:39+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "99d2d814a6351461af350ead4d963bd67451236f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/99d2d814a6351461af350ead4d963bd67451236f", + "reference": "99d2d814a6351461af350ead4d963bd67451236f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-10T12:03:13+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa", + "reference": "3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-21T14:41:17+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "97b698e1d77d356304def77a8d0cd73090b359ea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/97b698e1d77d356304def77a8d0cd73090b359ea", + "reference": "97b698e1d77d356304def77a8d0cd73090b359ea", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-30T17:12:32+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/d9b01ba073c44cef617c7907ce2419f8d00d75e2", + "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-02T01:25:41+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "718a97ed430d34e5c568ea2c44eab708c6efbefb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/718a97ed430d34e5c568ea2c44eab708c6efbefb", + "reference": "718a97ed430d34e5c568ea2c44eab708c6efbefb", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" + }, + "conflict": { + "symfony/cache": "<6.2" + }, + "require-dev": { + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-19T12:46:45+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "241973f3dd900620b1ca052fe409144f11aea748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/241973f3dd900620b1ca052fe409144f11aea748", + "reference": "241973f3dd900620b1ca052fe409144f11aea748", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^6.2.7", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.3", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "symfony/var-dumper": "<6.3", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/clock": "^6.2", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.3", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^5.4|^6.0", + "symfony/property-access": "^5.4.5|^6.0.5", + "symfony/routing": "^5.4|^6.0", + "symfony/serializer": "^6.3", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^6.3", + "symfony/var-exporter": "^6.2", + "twig/twig": "^2.13|^3.0.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-30T19:03:32+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/7b5d2121858cd6efbed778abce9cfdd7ab1f62ad", + "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-28T15:57:00+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57", + "reference": "508c652ba3ccf69f8c97f251534f229791b52a57", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/process", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "8741e3ed7fe2e91ec099e02446fb86667a0f1628" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/8741e3ed7fe2e91ec099e02446fb86667a0f1628", + "reference": "8741e3ed7fe2e91ec099e02446fb86667a0f1628", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-19T08:06:44+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b", + "reference": "827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-04-28T15:57:00+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-23T14:45:45+00:00" + }, + { + "name": "symfony/string", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/f2e190ee75ff0f5eced645ec0be5c66fac81f51f", + "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-03-21T21:06:29+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/f72b2cba8f79dd9d536f534f76874b58ad37876f", + "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "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/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.13", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-19T12:46:45+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.4-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-30T17:17:10+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.3.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "6acdcd5c122074ee9f7b051e4fb177025c277a0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6acdcd5c122074ee9f7b051e4fb177025c277a0e", + "reference": "6acdcd5c122074ee9f7b051e4fb177025c277a0e", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.3.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-05-25T13:09:35+00:00" + }, + { + "name": "tracy/tracy", + "version": "v2.10.2", + "source": { + "type": "git", + "url": "https://github.com/nette/tracy.git", + "reference": "882fee7cf4258a602ad4a37461e837ed2ca1406b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/tracy/zipball/882fee7cf4258a602ad4a37461e837ed2ca1406b", + "reference": "882fee7cf4258a602ad4a37461e837ed2ca1406b", + "shasum": "" + }, + "require": { + "ext-json": "*", + "ext-session": "*", + "php": ">=8.0 <8.3" + }, + "conflict": { + "nette/di": "<3.0" + }, + "require-dev": { + "latte/latte": "^2.5", + "nette/di": "^3.0", + "nette/mail": "^3.0", + "nette/tester": "^2.2", + "nette/utils": "^3.0", + "phpstan/phpstan": "^1.0", + "psr/log": "^1.0 || ^2.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.10-dev" + } + }, + "autoload": { + "files": [ + "src/Tracy/functions.php" + ], + "classmap": [ + "src" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "😎 Tracy: the addictive tool to ease debugging PHP code for cool developers. Friendly design, logging, profiler, advanced features like debugging AJAX calls or CLI support. You will love it.", + "homepage": "https://tracy.nette.org", + "keywords": [ + "Xdebug", + "debug", + "debugger", + "nette", + "profiler" + ], + "support": { + "issues": "https://github.com/nette/tracy/issues", + "source": "https://github.com/nette/tracy/tree/v2.10.2" + }, + "time": "2023-03-29T12:34:53+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.5.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.5-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2022-10-16T01:01:54+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "wikimedia/composer-merge-plugin", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/wikimedia/composer-merge-plugin.git", + "reference": "a03d426c8e9fb2c9c569d9deeb31a083292788bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/a03d426c8e9fb2c9c569d9deeb31a083292788bc", + "reference": "a03d426c8e9fb2c9c569d9deeb31a083292788bc", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1||^2.0", + "php": ">=7.2.0" + }, + "require-dev": { + "composer/composer": "^1.1||^2.0", + "ext-json": "*", + "mediawiki/mediawiki-phan-config": "0.11.1", + "php-parallel-lint/php-parallel-lint": "~1.3.1", + "phpspec/prophecy": "~1.15.0", + "phpunit/phpunit": "^8.5||^9.0", + "squizlabs/php_codesniffer": "~3.7.1" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + }, + "class": "Wikimedia\\Composer\\Merge\\V2\\MergePlugin" + }, + "autoload": { + "psr-4": { + "Wikimedia\\Composer\\Merge\\V2\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bryan Davis", + "email": "bd808@wikimedia.org" + } + ], + "description": "Composer plugin to merge multiple composer.json files", + "support": { + "issues": "https://github.com/wikimedia/composer-merge-plugin/issues", + "source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.1.0" + }, + "time": "2023-04-15T19:07:00+00:00" + } + ], + "packages-dev": [ + { + "name": "roave/security-advisories", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/Roave/SecurityAdvisories.git", + "reference": "d40baa1c4204055d04a5a9b5ad39c95b189ef889" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/d40baa1c4204055d04a5a9b5ad39c95b189ef889", + "reference": "d40baa1c4204055d04a5a9b5ad39c95b189ef889", + "shasum": "" + }, + "conflict": { + "3f/pygmentize": "<1.2", + "admidio/admidio": "<4.1.9", + "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "aheinze/cockpit": "<=2.2.1", + "akaunting/akaunting": "<2.1.13", + "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", + "alextselegidis/easyappointments": "<1.5", + "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", + "amazing/media2click": ">=1,<1.3.3", + "amphp/artax": "<1.0.6|>=2,<2.0.6", + "amphp/http": "<1.0.1", + "amphp/http-client": ">=4,<4.4", + "anchorcms/anchor-cms": "<=0.12.7", + "andreapollastri/cipi": "<=3.1.15", + "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<=1.0.1|>=2,<=2.2.4", + "apereo/phpcas": "<1.6", + "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", + "appwrite/server-ce": "<=1.2.1", + "arc/web": "<3", + "area17/twill": "<1.2.5|>=2,<2.5.3", + "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", + "automad/automad": "<1.8", + "awesome-support/awesome-support": "<=6.0.7", + "aws/aws-sdk-php": ">=3,<3.2.1", + "azuracast/azuracast": "<0.18.3", + "backdrop/backdrop": "<1.24.2", + "badaso/core": "<2.7", + "bagisto/bagisto": "<0.1.5", + "barrelstrength/sprout-base-email": "<1.2.7", + "barrelstrength/sprout-forms": "<3.9", + "barryvdh/laravel-translation-manager": "<0.6.2", + "barzahlen/barzahlen-php": "<2.0.1", + "baserproject/basercms": "<4.7.5", + "bassjobsen/bootstrap-3-typeahead": ">4.0.2", + "bigfork/silverstripe-form-capture": ">=3,<=3.1", + "billz/raspap-webgui": "<=2.6.6", + "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", + "bmarshall511/wordpress_zero_spam": "<5.2.13", + "bolt/bolt": "<3.7.2", + "bolt/core": "<=4.2", + "bottelet/flarepoint": "<2.2.1", + "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,<2.0.2", + "bytefury/crater": "<6.0.2", + "cachethq/cachet": "<2.5.1", + "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10|= 1.3.7|>=4.1,<4.1.4", + "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cardgate/magento2": "<2.0.33", + "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", + "cartalyst/sentry": "<=2.1.6", + "catfan/medoo": "<1.7.5", + "centreon/centreon": "<22.10-beta.1", + "cesnet/simplesamlphp-module-proxystatistics": "<3.1", + "cockpit-hq/cockpit": "<2.4.1", + "codeception/codeception": "<3.1.3|>=4,<4.1.22", + "codeigniter/framework": "<=3.0.6", + "codeigniter4/framework": "<4.3.5", + "codeigniter4/shield": "<1-beta.4|= 1.0.0-beta", + "codiad/codiad": "<=2.8.4", + "composer/composer": "<1.10.26|>=2-alpha.1,<2.2.12|>=2.3,<2.3.5", + "concrete5/concrete5": "<9.2|>= 9.0.0RC1, < 9.1.3", + "concrete5/core": "<8.5.8|>=9,<9.1", + "contao-components/mediaelement": ">=2.14.2,<2.21.1", + "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", + "contao/core": ">=2,<3.5.39", + "contao/core-bundle": "<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4|= 4.10.0", + "contao/listing-bundle": ">=4,<4.4.8", + "contao/managed-edition": "<=1.5", + "craftcms/cms": ">= 4.0.0-RC1, <= 4.4.5|>= 4.0.0-RC1, <= 4.4.6|<=3.8.5|>=4,<4.4.6|>= 4.0.0-RC1, < 4.4.6|>= 4.0.0-RC1, < 4.3.7|>= 4.0.0-RC1, < 4.2.1", + "croogo/croogo": "<3.0.7", + "cuyz/valinor": "<0.12", + "czproject/git-php": "<4.0.3", + "darylldoyle/safe-svg": "<1.9.10", + "datadog/dd-trace": ">=0.30,<0.30.2", + "david-garcia/phpwhois": "<=4.3.1", + "dbrisinajumi/d2files": "<1", + "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", + "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", + "directmailteam/direct-mail": "<5.2.4", + "doctrine/annotations": ">=1,<1.2.7", + "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", + "doctrine/common": ">=2,<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", + "doctrine/doctrine-module": "<=0.7.1", + "doctrine/mongodb-odm": ">=1,<1.0.2", + "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", + "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", + "dolibarr/dolibarr": "<17.0.1|= 12.0.5|>= 3.3.beta1, < 13.0.2", + "dompdf/dompdf": "<2.0.2|= 2.0.2", + "drupal/core": ">=7,<7.96|>=8,<9.4.14|>=9.5,<9.5.8|>=10,<10.0.8", + "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", + "dweeves/magmi": "<=0.7.24", + "ecodev/newsletter": "<=4", + "ectouch/ectouch": "<=2.7.2", + "elefant/cms": "<1.3.13", + "elgg/elgg": "<3.3.24|>=4,<4.0.5", + "encore/laravel-admin": "<=1.8.19", + "endroid/qr-code-bundle": "<3.4.2", + "enshrined/svg-sanitize": "<0.15", + "erusev/parsedown": "<1.7.2", + "ether/logs": "<3.0.4", + "exceedone/exment": "<4.4.3|>=5,<5.0.3", + "exceedone/laravel-admin": "= 3.0.0|<2.2.3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1", + "ezsystems/ez-support-tools": ">=2.2,<2.2.3", + "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1", + "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", + "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", + "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26", + "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", + "ezsystems/ezplatform-graphql": ">=1-rc.1,<1.0.13|>=2-beta.1,<2.3.12", + "ezsystems/ezplatform-kernel": "<1.2.5.1|>=1.3,<1.3.26", + "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", + "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1", + "ezsystems/ezplatform-user": ">=1,<1.0.1", + "ezsystems/ezpublish-kernel": "<6.13.8.2|>=7,<7.5.30", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.3.5.1", + "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1|>=2.5,<2.5.15", + "ezyang/htmlpurifier": "<4.1.1", + "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", + "facturascripts/facturascripts": "<=2022.8", + "feehi/cms": "<=2.1.1", + "feehi/feehicms": "<=2.1.1", + "fenom/fenom": "<=2.12.1", + "filegator/filegator": "<7.8", + "firebase/php-jwt": "<6", + "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", + "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", + "flarum/core": "<1.7", + "flarum/mentions": "<1.6.3", + "flarum/sticky": ">=0.1-beta.14,<=0.1-beta.15", + "flarum/tags": "<=0.1-beta.13", + "fluidtypo3/vhs": "<5.1.1", + "fof/byobu": ">=0.3-beta.2,<1.1.7", + "fof/upload": "<1.2.3", + "fooman/tcpdf": "<6.2.22", + "forkcms/forkcms": "<5.11.1", + "fossar/tcpdf-parser": "<6.2.22", + "francoisjacquet/rosariosis": "<11", + "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", + "friendsofsymfony/oauth2-php": "<1.3", + "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", + "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", + "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", + "froala/wysiwyg-editor": "<3.2.7", + "froxlor/froxlor": "<2.0.16", + "fuel/core": "<1.8.1", + "funadmin/funadmin": "<=3.2", + "gaoming13/wechat-php-sdk": "<=1.10.2", + "genix/cms": "<=1.1.11", + "getgrav/grav": "<1.7.34", + "getkirby/cms": "= 3.8.0|<3.5.8.2|>=3.6,<3.6.6.2|>=3.7,<3.7.5.1", + "getkirby/panel": "<2.5.14", + "getkirby/starterkit": "<=3.7.0.2", + "gilacms/gila": "<=1.11.4", + "globalpayments/php-sdk": "<2", + "google/protobuf": "<3.15", + "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", + "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", + "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", + "harvesthq/chosen": "<1.8.7", + "helloxz/imgurl": "= 2.31|<=2.31", + "hillelcoren/invoice-ninja": "<5.3.35", + "himiklab/yii2-jqgrid-widget": "<1.0.8", + "hjue/justwriting": "<=1", + "hov/jobfair": "<1.0.13|>=2,<2.0.2", + "httpsoft/http-message": "<1.0.12", + "hyn/multi-tenant": ">=5.6,<5.7.2", + "ibexa/admin-ui": ">=4.2,<4.2.3", + "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3", + "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", + "ibexa/post-install": "<=1.0.4", + "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/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", + "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", + "impresscms/impresscms": "<=1.4.3", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.1", + "in2code/lux": "<17.6.1|>=18,<24.0.2", + "innologi/typo3-appointments": "<2.0.6", + "intelliants/subrion": "<=4.2.1", + "islandora/islandora": ">=2,<2.4.1", + "ivankristianto/phpwhois": "<=4.3", + "jackalope/jackalope-doctrine-dbal": "<1.7.4", + "james-heinrich/getid3": "<1.9.21", + "jasig/phpcas": "<1.3.3", + "joomla/archive": "<1.1.12|>=2,<2.0.1", + "joomla/filesystem": "<1.6.2|>=2,<2.0.1", + "joomla/filter": "<1.4.4|>=2,<2.0.1", + "joomla/input": ">=2,<2.0.2", + "joomla/session": "<1.3.1", + "joyqi/hyper-down": "<=2.4.27", + "jsdecena/laracom": "<2.0.9", + "jsmitty12/phpwhois": "<5.1", + "kazist/phpwhois": "<=4.2.6", + "kelvinmo/simplexrd": "<3.1.1", + "kevinpapst/kimai2": "<1.16.7", + "kimai/kimai": "<1.1", + "kitodo/presentation": "<3.1.2", + "klaviyo/magento2-extension": ">=1,<3", + "knplabs/knp-snappy": "<1.4.2", + "krayin/laravel-crm": "<1.2.2", + "kreait/firebase-php": ">=3.2,<3.8.1", + "la-haute-societe/tcpdf": "<6.2.22", + "laminas/laminas-diactoros": "<2.18.1|>=2.24,<2.24.2|>=2.25,<2.25.2|= 2.23.0|= 2.22.0|= 2.21.0|= 2.20.0|= 2.19.0", + "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", + "laminas/laminas-http": "<2.14.2", + "laravel/fortify": "<1.11.1", + "laravel/framework": "<6.20.42|>=7,<7.30.6|>=8,<8.75", + "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", + "latte/latte": "<2.10.8", + "lavalite/cms": "<=9", + "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", + "league/commonmark": "<0.18.3", + "league/flysystem": "<1.1.4|>=2,<2.1.1", + "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", + "librenms/librenms": "<22.10", + "liftkit/database": "<2.13.2", + "limesurvey/limesurvey": "<3.27.19", + "livehelperchat/livehelperchat": "<=3.91", + "livewire/livewire": ">2.2.4,<2.2.6", + "lms/routes": "<2.1.1", + "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", + "luyadev/yii-helpers": "<1.2.1", + "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", + "magento/magento1ce": "<1.9.4.3", + "magento/magento1ee": ">=1,<1.14.4.3", + "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", + "maikuolan/phpmussel": ">=1,<1.6", + "mantisbt/mantisbt": "<=2.25.5", + "marcwillmann/turn": "<0.3.3", + "matyhtf/framework": "<3.0.6", + "mautic/core": "<4.3|= 2.13.1", + "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/matomo": "<2.4.3", + "melisplatform/melis-asset-manager": "<5.0.1", + "melisplatform/melis-cms": "<5.0.1", + "melisplatform/melis-front": "<5.0.1", + "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", + "mgallegos/laravel-jqgrid": "<=1.3", + "microweber/microweber": "<1.3.4", + "miniorange/miniorange-saml": "<1.4.3", + "mittwald/typo3_forum": "<1.2.1", + "mobiledetect/mobiledetectlib": "<2.8.32", + "modx/revolution": "<= 2.8.3-pl|<2.8", + "mojo42/jirafeau": "<4.4", + "monolog/monolog": ">=1.8,<1.12", + "moodle/moodle": "<4.2-rc.2|= 3.11", + "mustache/mustache": ">=2,<2.14.1", + "namshi/jose": "<2.2", + "neoan3-apps/template": "<1.1.1", + "neorazorx/facturascripts": "<2022.4", + "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", + "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", + "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", + "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", + "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", + "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", + "nilsteampassnet/teampass": "<3.0.7", + "notrinos/notrinos-erp": "<=0.7", + "noumo/easyii": "<=0.9", + "nukeviet/nukeviet": "<4.5.2", + "nyholm/psr7": "<1.6.1", + "nystudio107/craft-seomatic": "<3.4.12", + "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", + "october/backend": "<1.1.2", + "october/cms": "= 1.1.1|= 1.0.471|= 1.0.469|>=1.0.319,<1.0.469", + "october/october": ">=1.0.319,<1.0.466|>=2.1,<2.1.12", + "october/rain": "<1.0.472|>=1.1,<1.1.2", + "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.0.66", + "onelogin/php-saml": "<2.10.4", + "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", + "open-web-analytics/open-web-analytics": "<1.7.4", + "opencart/opencart": "<=3.0.3.7", + "openid/php-openid": "<2.3", + "openmage/magento-lts": "<19.4.22|>=20,<20.0.19", + "orchid/platform": ">=9,<9.4.4", + "oro/commerce": ">=4.1,<5.0.6", + "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", + "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<4.2.8", + "packbackbooks/lti-1-3-php-library": "<5", + "padraic/humbug_get_contents": "<1.1.2", + "pagarme/pagarme-php": ">=0,<3", + "pagekit/pagekit": "<=1.0.18", + "paragonie/random_compat": "<2", + "passbolt/passbolt_api": "<2.11", + "paypal/merchant-sdk-php": "<3.12", + "pear/archive_tar": "<1.4.14", + "pear/crypt_gpg": "<1.6.7", + "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", + "personnummer/personnummer": "<3.0.2", + "phanan/koel": "<5.1.4", + "php-mod/curl": "<2.3.2", + "phpbb/phpbb": ">=3.2,<3.2.10|>=3.3,<3.3.1", + "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", + "phpmailer/phpmailer": "<6.5", + "phpmussel/phpmussel": ">=1,<1.6", + "phpmyadmin/phpmyadmin": "<5.2.1", + "phpmyfaq/phpmyfaq": "<=3.1.7", + "phpoffice/phpexcel": "<1.8", + "phpoffice/phpspreadsheet": "<1.16", + "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.19", + "phpservermon/phpservermon": "<=3.5.2", + "phpsysinfo/phpsysinfo": "<3.2.5", + "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5,<5.6.3", + "phpwhois/phpwhois": "<=4.2.5", + "phpxmlrpc/extras": "<0.6.1", + "phpxmlrpc/phpxmlrpc": "<4.9.2", + "pimcore/customer-management-framework-bundle": "<3.3.10", + "pimcore/data-hub": "<1.2.4", + "pimcore/perspective-editor": "<1.5.1", + "pimcore/pimcore": "<10.5.21", + "pixelfed/pixelfed": "<=0.11.4", + "pocketmine/bedrock-protocol": "<8.0.2", + "pocketmine/pocketmine-mp": "<4.12.5|>= 4.0.0-BETA5, < 4.4.2", + "pressbooks/pressbooks": "<5.18", + "prestashop/autoupgrade": ">=4,<4.10.1", + "prestashop/blockwishlist": ">=2,<2.1.1", + "prestashop/contactform": ">=1.0.1,<4.3", + "prestashop/gamification": "<2.3.2", + "prestashop/prestashop": "<8.0.4", + "prestashop/productcomments": "<5.0.2", + "prestashop/ps_emailsubscription": "<2.6.1", + "prestashop/ps_facetedsearch": "<3.4.1", + "prestashop/ps_linklist": "<3.1", + "privatebin/privatebin": "<1.4", + "processwire/processwire": "<=3.0.200", + "propel/propel": ">=2-alpha.1,<=2-alpha.7", + "propel/propel1": ">=1,<=1.7.1", + "pterodactyl/panel": "<1.7", + "ptrofimov/beanstalk_console": "<1.7.14", + "pusher/pusher-php-server": "<2.2.1", + "pwweb/laravel-core": "<=0.3.6-beta", + "pyrocms/pyrocms": "<=3.9.1", + "rainlab/debugbar-plugin": "<3.1", + "rankmath/seo-by-rank-math": "<=1.0.95", + "react/http": ">=0.7,<1.9", + "really-simple-plugins/complianz-gdpr": "<6.4.2", + "remdex/livehelperchat": "<3.99", + "rmccue/requests": ">=1.6,<1.8", + "robrichards/xmlseclibs": "<3.0.4", + "roots/soil": "<4.1", + "rudloff/alltube": "<3.0.3", + "s-cart/core": "<6.9", + "s-cart/s-cart": "<6.9", + "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", + "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", + "sensiolabs/connect": "<4.2.3", + "serluck/phpwhois": "<=4.2.6", + "shopware/core": "<=6.4.20", + "shopware/platform": "<=6.4.20", + "shopware/production": "<=6.3.5.2", + "shopware/shopware": "<=5.7.14", + "shopware/storefront": "<=6.4.8.1", + "shopxo/shopxo": "<2.2.6", + "showdoc/showdoc": "<2.10.4", + "silverstripe/admin": "<1.12.7", + "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.12.5", + "silverstripe/graphql": "<3.5.2|>=4-alpha.1,<4-alpha.2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3|= 4.0.0-alpha1", + "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", + "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", + "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", + "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", + "silverstripe/subsites": ">=2,<2.6.1", + "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", + "silverstripe/userforms": "<3", + "silverstripe/versioned-admin": ">=1,<1.11.1", + "simple-updates/phpwhois": "<=1", + "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", + "simplesamlphp/simplesamlphp": "<1.18.6", + "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", + "simplesamlphp/simplesamlphp-module-openid": "<1", + "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", + "simplito/elliptic-php": "<1.0.6", + "sitegeist/fluid-components": "<3.5", + "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", + "slim/slim": "<2.6", + "smarty/smarty": "<3.1.48|>=4,<4.3.1", + "snipe/snipe-it": "<=6.0.14|>= 6.0.0-RC-1, <= 6.0.0-RC-5", + "socalnick/scn-social-auth": "<1.15.2", + "socialiteproviders/steam": "<1.1", + "spatie/browsershot": "<3.57.4", + "spipu/html2pdf": "<5.2.4", + "spoonity/tcpdf": "<6.2.22", + "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", + "ssddanbrown/bookstack": "<22.2.3", + "statamic/cms": "<3.2.39|>=3.3,<3.3.2", + "stormpath/sdk": ">=0,<9.9.99", + "studio-42/elfinder": "<2.1.59", + "subrion/cms": "<=4.2.1", + "sukohi/surpass": "<1", + "sulu/sulu": "= 2.4.0-RC1|<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8", + "sumocoders/framework-user-bundle": "<1.4", + "swag/paypal": "<5.4.4", + "swiftmailer/swiftmailer": ">=4,<5.4.5", + "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", + "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", + "sylius/grid-bundle": "<1.10.1", + "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", + "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", + "sylius/sylius": "<1.9.10|>=1.10,<1.10.11|>=1.11,<1.11.2", + "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", + "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", + "symbiote/silverstripe-seed": "<6.0.3", + "symbiote/silverstripe-versionedfiles": "<=2.0.3", + "symfont/process": ">=0", + "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", + "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", + "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", + "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3|= 6.0.3|= 5.4.3|= 5.3.14", + "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", + "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", + "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", + "symfony/mime": ">=4.3,<4.3.8", + "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/polyfill": ">=1,<1.10", + "symfony/polyfill-php55": ">=1,<1.10", + "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", + "symfony/routing": ">=2,<2.0.19", + "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", + "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", + "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", + "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", + "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2", + "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", + "symfony/symfony": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", + "symfony/translation": ">=2,<2.0.17", + "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", + "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", + "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", + "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", + "t3/dce": ">=2.2,<2.6.2", + "t3g/svg-sanitizer": "<1.0.3", + "tastyigniter/tastyigniter": "<3.3", + "tcg/voyager": "<=1.4", + "tecnickcom/tcpdf": "<6.2.22", + "terminal42/contao-tablelookupwizard": "<3.3.5", + "thelia/backoffice-default-template": ">=2.1,<2.1.2", + "thelia/thelia": ">=2.1-beta.1,<2.1.3", + "theonedemon/phpwhois": "<=4.2.5", + "thinkcmf/thinkcmf": "<=5.1.7", + "thorsten/phpmyfaq": "<3.2-beta", + "tinymce/tinymce": "<5.10.7|>=6,<6.3.1", + "tinymighty/wiki-seo": "<1.2.2", + "titon/framework": ">=0,<9.9.99", + "tobiasbg/tablepress": "<= 2.0-RC1", + "topthink/framework": "<6.0.14", + "topthink/think": "<=6.1.1", + "topthink/thinkphp": "<=3.2.3", + "tribalsystems/zenario": "<=9.3.57595", + "truckersmp/phpwhois": "<=4.3.1", + "ttskch/pagination-service-provider": "<1", + "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", + "typo3/cms": "<2.0.5|>=3,<3.0.3|>=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", + "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-core": "<8.7.51|>=9,<9.5.40|>=10,<10.4.36|>=11,<11.5.23|>=12,<12.2", + "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", + "typo3/html-sanitizer": ">=1,<1.5|>=2,<2.1.1", + "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", + "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", + "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", + "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", + "ua-parser/uap-php": "<3.8", + "unisharp/laravel-filemanager": "<=2.5.1", + "userfrosting/userfrosting": ">=0.3.1,<4.6.3", + "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", + "uvdesk/community-skeleton": "<=1.1.1", + "vanilla/safecurl": "<0.9.2", + "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", + "vova07/yii2-fileapi-widget": "<0.1.9", + "vrana/adminer": "<4.8.1", + "wallabag/tcpdf": "<6.2.22", + "wallabag/wallabag": "<2.5.4", + "wanglelecc/laracms": "<=1.0.3", + "web-auth/webauthn-framework": ">=3.3,<3.3.4", + "webbuilders-group/silverstripe-kapost-bridge": "<0.4", + "webcoast/deferred-image-processing": "<1.0.2", + "webpa/webpa": "<3.1.2", + "wikimedia/parsoid": "<0.12.2", + "willdurand/js-translation-bundle": "<2.1.1", + "wintercms/winter": "<1.0.475|>=1.1,<1.1.10|>=1.2,<1.2.1", + "woocommerce/woocommerce": "<6.6", + "wp-cli/wp-cli": "<2.5", + "wp-graphql/wp-graphql": "<0.3.5", + "wpanel/wpanel4-cms": "<=4.3.1", + "wpcloud/wp-stateless": "<3.2", + "wwbn/avideo": "<=12.4", + "xataface/xataface": "<3", + "xpressengine/xpressengine": "<3.0.15", + "yeswiki/yeswiki": "<4.1", + "yetiforce/yetiforce-crm": "<=6.4", + "yidashi/yii2cmf": "<=2", + "yii2mod/yii2-cms": "<1.9.2", + "yiisoft/yii": "<1.1.27", + "yiisoft/yii2": "<2.0.38", + "yiisoft/yii2-bootstrap": "<2.0.4", + "yiisoft/yii2-dev": "<2.0.43", + "yiisoft/yii2-elasticsearch": "<2.0.5", + "yiisoft/yii2-gii": "<=2.2.4", + "yiisoft/yii2-jui": "<2.0.4", + "yiisoft/yii2-redis": "<2.0.8", + "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", + "yoast-seo-for-typo3/yoast_seo": "<7.2.3", + "yourls/yourls": "<=1.8.2", + "zendesk/zendesk_api_client_php": "<2.2.11", + "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", + "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", + "zendframework/zend-diactoros": "<1.8.4", + "zendframework/zend-feed": "<2.10.3", + "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-http": "<2.8.1", + "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", + "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2", + "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4", + "zendframework/zend-validator": ">=2.3,<2.3.6", + "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", + "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", + "zendframework/zendframework": "<=3", + "zendframework/zendframework1": "<1.12.20", + "zendframework/zendopenid": ">=2,<2.0.2", + "zendframework/zendxml": ">=1,<1.0.1", + "zetacomponents/mail": "<1.8.2", + "zf-commons/zfc-user": "<1.2.2", + "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", + "zfr/zfr-oauth2-server-module": "<0.1.2", + "zoujingli/thinkadmin": "<6.0.22" + }, + "type": "metapackage", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "role": "maintainer" + }, + { + "name": "Ilya Tribusean", + "email": "slash3b@gmail.com", + "role": "maintainer" + } + ], + "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", + "keywords": [ + "dev" + ], + "support": { + "issues": "https://github.com/Roave/SecurityAdvisories/issues", + "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" + }, + "funding": [ + { + "url": "https://github.com/Ocramius", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", + "type": "tidelift" + } + ], + "time": "2023-05-30T21:04:11+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": { + "roave/security-advisories": 20 }, - { - "name": "symfony/var-dumper", - "version": "v6.2.10", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "41a750a23412ca76fdbbf5096943b4134272c1ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/41a750a23412ca76fdbbf5096943b4134272c1ab", - "reference": "41a750a23412ca76fdbbf5096943b4134272c1ab", - "shasum": "" - }, - "require": { + "prefer-stable": true, + "prefer-lowest": false, + "platform": { "php": ">=8.1", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<5.4" - }, - "require-dev": { + "ext-simplexml": "*", + "ext-dom": "*", "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.2.10" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-04-18T13:46:08+00:00" - }, - { - "name": "tracy/tracy", - "version": "v2.10.2", - "source": { - "type": "git", - "url": "https://github.com/nette/tracy.git", - "reference": "882fee7cf4258a602ad4a37461e837ed2ca1406b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/tracy/zipball/882fee7cf4258a602ad4a37461e837ed2ca1406b", - "reference": "882fee7cf4258a602ad4a37461e837ed2ca1406b", - "shasum": "" - }, - "require": { "ext-json": "*", - "ext-session": "*", - "php": ">=8.0 <8.3" - }, - "conflict": { - "nette/di": "<3.0" - }, - "require-dev": { - "latte/latte": "^2.5", - "nette/di": "^3.0", - "nette/mail": "^3.0", - "nette/tester": "^2.2", - "nette/utils": "^3.0", - "phpstan/phpstan": "^1.0", - "psr/log": "^1.0 || ^2.0 || ^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.10-dev" - } - }, - "autoload": { - "files": [ - "src/Tracy/functions.php" - ], - "classmap": [ - "src" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "😎 Tracy: the addictive tool to ease debugging PHP code for cool developers. Friendly design, logging, profiler, advanced features like debugging AJAX calls or CLI support. You will love it.", - "homepage": "https://tracy.nette.org", - "keywords": [ - "Xdebug", - "debug", - "debugger", - "nette", - "profiler" - ], - "support": { - "issues": "https://github.com/nette/tracy/issues", - "source": "https://github.com/nette/tracy/tree/v2.10.2" - }, - "time": "2023-03-29T12:34:53+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.5.0", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": true - }, - "branch-alias": { - "dev-master": "5.5-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://github.com/vlucas" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2022-10-16T01:01:54+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2022-03-08T17:03:00+00:00" + "ext-libxml": "*", + "ext-mbstring": "*", + "lib-iconv": "*", + "lib-libxml": "*" }, - { - "name": "wikimedia/composer-merge-plugin", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/wikimedia/composer-merge-plugin.git", - "reference": "a03d426c8e9fb2c9c569d9deeb31a083292788bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wikimedia/composer-merge-plugin/zipball/a03d426c8e9fb2c9c569d9deeb31a083292788bc", - "reference": "a03d426c8e9fb2c9c569d9deeb31a083292788bc", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.1||^2.0", - "php": ">=7.2.0" - }, - "require-dev": { - "composer/composer": "^1.1||^2.0", - "ext-json": "*", - "mediawiki/mediawiki-phan-config": "0.11.1", - "php-parallel-lint/php-parallel-lint": "~1.3.1", - "phpspec/prophecy": "~1.15.0", - "phpunit/phpunit": "^8.5||^9.0", - "squizlabs/php_codesniffer": "~3.7.1" - }, - "type": "composer-plugin", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "class": "Wikimedia\\Composer\\Merge\\V2\\MergePlugin" - }, - "autoload": { - "psr-4": { - "Wikimedia\\Composer\\Merge\\V2\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bryan Davis", - "email": "bd808@wikimedia.org" - } - ], - "description": "Composer plugin to merge multiple composer.json files", - "support": { - "issues": "https://github.com/wikimedia/composer-merge-plugin/issues", - "source": "https://github.com/wikimedia/composer-merge-plugin/tree/v2.1.0" - }, - "time": "2023-04-15T19:07:00+00:00" - } - ], - "packages-dev": [ - { - "name": "roave/security-advisories", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "2d9146bd69addfbd99652930a825c8ba7b8ea13c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/2d9146bd69addfbd99652930a825c8ba7b8ea13c", - "reference": "2d9146bd69addfbd99652930a825c8ba7b8ea13c", - "shasum": "" - }, - "conflict": { - "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.1.9", - "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", - "aheinze/cockpit": "<=2.2.1", - "akaunting/akaunting": "<2.1.13", - "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", - "alextselegidis/easyappointments": "<1.5", - "alterphp/easyadmin-extension-bundle": ">=1.2,<1.2.11|>=1.3,<1.3.1", - "amazing/media2click": ">=1,<1.3.3", - "amphp/artax": "<1.0.6|>=2,<2.0.6", - "amphp/http": "<1.0.1", - "amphp/http-client": ">=4,<4.4", - "anchorcms/anchor-cms": "<=0.12.7", - "andreapollastri/cipi": "<=3.1.15", - "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<=1.0.1|>=2,<=2.2.4", - "apereo/phpcas": "<1.6", - "api-platform/core": ">=2.2,<2.2.10|>=2.3,<2.3.6|>=2.6,<2.7.10|>=3,<3.0.12|>=3.1,<3.1.3", - "appwrite/server-ce": "<=1.2.1", - "arc/web": "<3", - "area17/twill": "<1.2.5|>=2,<2.5.3", - "asymmetricrypt/asymmetricrypt": ">=0,<9.9.99", - "automad/automad": "<1.8", - "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": ">=3,<3.2.1", - "azuracast/azuracast": "<0.18.3", - "backdrop/backdrop": "<1.24.2", - "badaso/core": "<2.7", - "bagisto/bagisto": "<0.1.5", - "barrelstrength/sprout-base-email": "<1.2.7", - "barrelstrength/sprout-forms": "<3.9", - "barryvdh/laravel-translation-manager": "<0.6.2", - "barzahlen/barzahlen-php": "<2.0.1", - "baserproject/basercms": "<4.7.5", - "bassjobsen/bootstrap-3-typeahead": ">4.0.2", - "bigfork/silverstripe-form-capture": ">=3,<=3.1", - "billz/raspap-webgui": "<=2.6.6", - "bk2k/bootstrap-package": ">=7.1,<7.1.2|>=8,<8.0.8|>=9,<9.0.4|>=9.1,<9.1.3|>=10,<10.0.10|>=11,<11.0.3", - "bmarshall511/wordpress_zero_spam": "<5.2.13", - "bolt/bolt": "<3.7.2", - "bolt/core": "<=4.2", - "bottelet/flarepoint": "<2.2.1", - "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,<2.0.2", - "bytefury/crater": "<6.0.2", - "cachethq/cachet": "<2.5.1", - "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10|= 1.3.7|>=4.1,<4.1.4", - "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", - "cardgate/magento2": "<2.0.33", - "cart2quote/module-quotation": ">=4.1.6,<=4.4.5|>=5,<5.4.4", - "cartalyst/sentry": "<=2.1.6", - "catfan/medoo": "<1.7.5", - "centreon/centreon": "<22.10-beta.1", - "cesnet/simplesamlphp-module-proxystatistics": "<3.1", - "cockpit-hq/cockpit": "<2.4.1", - "codeception/codeception": "<3.1.3|>=4,<4.1.22", - "codeigniter/framework": "<=3.0.6", - "codeigniter4/framework": "<4.3.5", - "codeigniter4/shield": "<1-beta.4|= 1.0.0-beta", - "codiad/codiad": "<=2.8.4", - "composer/composer": "<1.10.26|>=2-alpha.1,<2.2.12|>=2.3,<2.3.5", - "concrete5/concrete5": "<9.2|>= 9.0.0RC1, < 9.1.3", - "concrete5/core": "<8.5.8|>=9,<9.1", - "contao-components/mediaelement": ">=2.14.2,<2.21.1", - "contao/contao": ">=4,<4.4.56|>=4.5,<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4", - "contao/core": ">=2,<3.5.39", - "contao/core-bundle": "<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4|= 4.10.0", - "contao/listing-bundle": ">=4,<4.4.8", - "contao/managed-edition": "<=1.5", - "craftcms/cms": "<=3.8.3|>=4,<4.4.6|>= 4.0.0-RC1, < 4.3.7|>= 4.0.0-RC1, < 4.2.1", - "croogo/croogo": "<3.0.7", - "cuyz/valinor": "<0.12", - "czproject/git-php": "<4.0.3", - "darylldoyle/safe-svg": "<1.9.10", - "datadog/dd-trace": ">=0.30,<0.30.2", - "david-garcia/phpwhois": "<=4.3.1", - "dbrisinajumi/d2files": "<1", - "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", - "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", - "directmailteam/direct-mail": "<5.2.4", - "doctrine/annotations": ">=1,<1.2.7", - "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", - "doctrine/common": ">=2,<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", - "doctrine/doctrine-module": "<=0.7.1", - "doctrine/mongodb-odm": ">=1,<1.0.2", - "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", - "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<16|>=16.0.1,<16.0.3|= 12.0.5|>= 3.3.beta1, < 13.0.2", - "dompdf/dompdf": "<2.0.2|= 2.0.2", - "drupal/core": ">=7,<7.96|>=8,<9.4.14|>=9.5,<9.5.8|>=10,<10.0.8", - "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", - "dweeves/magmi": "<=0.7.24", - "ecodev/newsletter": "<=4", - "ectouch/ectouch": "<=2.7.2", - "elefant/cms": "<1.3.13", - "elgg/elgg": "<3.3.24|>=4,<4.0.5", - "encore/laravel-admin": "<=1.8.19", - "endroid/qr-code-bundle": "<3.4.2", - "enshrined/svg-sanitize": "<0.15", - "erusev/parsedown": "<1.7.2", - "ether/logs": "<3.0.4", - "exceedone/exment": "<4.4.3|>=5,<5.0.3", - "exceedone/laravel-admin": "= 3.0.0|<2.2.3", - "ezsystems/demobundle": ">=5.4,<5.4.6.1", - "ezsystems/ez-support-tools": ">=2.2,<2.2.3", - "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1", - "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1|>=5.4,<5.4.11.1|>=2017.12,<2017.12.0.1", - "ezsystems/ezplatform": "<=1.13.6|>=2,<=2.5.24", - "ezsystems/ezplatform-admin-ui": ">=1.3,<1.3.5|>=1.4,<1.4.6|>=1.5,<1.5.29|>=2.3,<2.3.26", - "ezsystems/ezplatform-admin-ui-assets": ">=4,<4.2.1|>=5,<5.0.1|>=5.1,<5.1.1", - "ezsystems/ezplatform-graphql": ">=1-rc.1,<1.0.13|>=2-beta.1,<2.3.12", - "ezsystems/ezplatform-kernel": "<1.2.5.1|>=1.3,<1.3.26", - "ezsystems/ezplatform-rest": ">=1.2,<=1.2.2|>=1.3,<1.3.8", - "ezsystems/ezplatform-richtext": ">=2.3,<2.3.7.1", - "ezsystems/ezplatform-user": ">=1,<1.0.1", - "ezsystems/ezpublish-kernel": "<6.13.8.2|>=7,<7.5.30", - "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.6,<=2019.3.5.1", - "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", - "ezsystems/repository-forms": ">=2.3,<2.3.2.1|>=2.5,<2.5.15", - "ezyang/htmlpurifier": "<4.1.1", - "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", - "facturascripts/facturascripts": "<=2022.8", - "feehi/cms": "<=2.1.1", - "feehi/feehicms": "<=2.1.1", - "fenom/fenom": "<=2.12.1", - "filegator/filegator": "<7.8", - "firebase/php-jwt": "<6", - "fixpunkt/fp-masterquiz": "<2.2.1|>=3,<3.5.2", - "fixpunkt/fp-newsletter": "<1.1.1|>=2,<2.1.2|>=2.2,<3.2.6", - "flarum/core": "<1.7", - "flarum/mentions": "<1.6.3", - "flarum/sticky": ">=0.1-beta.14,<=0.1-beta.15", - "flarum/tags": "<=0.1-beta.13", - "fluidtypo3/vhs": "<5.1.1", - "fof/byobu": ">=0.3-beta.2,<1.1.7", - "fof/upload": "<1.2.3", - "fooman/tcpdf": "<6.2.22", - "forkcms/forkcms": "<5.11.1", - "fossar/tcpdf-parser": "<6.2.22", - "francoisjacquet/rosariosis": "<11", - "frappant/frp-form-answers": "<3.1.2|>=4,<4.0.2", - "friendsofsymfony/oauth2-php": "<1.3", - "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", - "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", - "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", - "froala/wysiwyg-editor": "<3.2.7", - "froxlor/froxlor": "<2.0.16", - "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=3.2", - "gaoming13/wechat-php-sdk": "<=1.10.2", - "genix/cms": "<=1.1.11", - "getgrav/grav": "<1.7.34", - "getkirby/cms": "= 3.8.0|<3.5.8.2|>=3.6,<3.6.6.2|>=3.7,<3.7.5.1", - "getkirby/panel": "<2.5.14", - "getkirby/starterkit": "<=3.7.0.2", - "gilacms/gila": "<=1.11.4", - "globalpayments/php-sdk": "<2", - "google/protobuf": "<3.15", - "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", - "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", - "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", - "harvesthq/chosen": "<1.8.7", - "helloxz/imgurl": "= 2.31|<=2.31", - "hillelcoren/invoice-ninja": "<5.3.35", - "himiklab/yii2-jqgrid-widget": "<1.0.8", - "hjue/justwriting": "<=1", - "hov/jobfair": "<1.0.13|>=2,<2.0.2", - "httpsoft/http-message": "<1.0.12", - "hyn/multi-tenant": ">=5.6,<5.7.2", - "ibexa/admin-ui": ">=4.2,<4.2.3", - "ibexa/core": ">=4,<4.0.7|>=4.1,<4.1.4|>=4.2,<4.2.3", - "ibexa/graphql": ">=2.5,<2.5.31|>=3.3,<3.3.28|>=4.2,<4.2.3", - "ibexa/post-install": "<=1.0.4", - "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/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", - "illuminate/view": "<6.20.42|>=7,<7.30.6|>=8,<8.75", - "impresscms/impresscms": "<=1.4.3", - "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.1", - "in2code/lux": "<17.6.1|>=18,<24.0.2", - "innologi/typo3-appointments": "<2.0.6", - "intelliants/subrion": "<=4.2.1", - "islandora/islandora": ">=2,<2.4.1", - "ivankristianto/phpwhois": "<=4.3", - "jackalope/jackalope-doctrine-dbal": "<1.7.4", - "james-heinrich/getid3": "<1.9.21", - "jasig/phpcas": "<1.3.3", - "joomla/archive": "<1.1.12|>=2,<2.0.1", - "joomla/filesystem": "<1.6.2|>=2,<2.0.1", - "joomla/filter": "<1.4.4|>=2,<2.0.1", - "joomla/input": ">=2,<2.0.2", - "joomla/session": "<1.3.1", - "joyqi/hyper-down": "<=2.4.27", - "jsdecena/laracom": "<2.0.9", - "jsmitty12/phpwhois": "<5.1", - "kazist/phpwhois": "<=4.2.6", - "kelvinmo/simplexrd": "<3.1.1", - "kevinpapst/kimai2": "<1.16.7", - "kimai/kimai": "<1.1", - "kitodo/presentation": "<3.1.2", - "klaviyo/magento2-extension": ">=1,<3", - "knplabs/knp-snappy": "<1.4.2", - "krayin/laravel-crm": "<1.2.2", - "kreait/firebase-php": ">=3.2,<3.8.1", - "la-haute-societe/tcpdf": "<6.2.22", - "laminas/laminas-diactoros": "<2.18.1|>=2.24,<2.24.2|>=2.25,<2.25.2|= 2.23.0|= 2.22.0|= 2.21.0|= 2.20.0|= 2.19.0", - "laminas/laminas-form": "<2.17.1|>=3,<3.0.2|>=3.1,<3.1.1", - "laminas/laminas-http": "<2.14.2", - "laravel/fortify": "<1.11.1", - "laravel/framework": "<6.20.42|>=7,<7.30.6|>=8,<8.75", - "laravel/socialite": ">=1,<1.0.99|>=2,<2.0.10", - "latte/latte": "<2.10.8", - "lavalite/cms": "<=9", - "lcobucci/jwt": ">=3.4,<3.4.6|>=4,<4.0.4|>=4.1,<4.1.5", - "league/commonmark": "<0.18.3", - "league/flysystem": "<1.1.4|>=2,<2.1.1", - "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "librenms/librenms": "<22.10", - "liftkit/database": "<2.13.2", - "limesurvey/limesurvey": "<3.27.19", - "livehelperchat/livehelperchat": "<=3.91", - "livewire/livewire": ">2.2.4,<2.2.6", - "lms/routes": "<2.1.1", - "localizationteam/l10nmgr": "<7.4|>=8,<8.7|>=9,<9.2", - "luyadev/yii-helpers": "<1.2.1", - "magento/community-edition": ">=2,<2.2.10|>=2.3,<2.3.3", - "magento/magento1ce": "<1.9.4.3", - "magento/magento1ee": ">=1,<1.14.4.3", - "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2-p.2", - "maikuolan/phpmussel": ">=1,<1.6", - "mantisbt/mantisbt": "<=2.25.5", - "marcwillmann/turn": "<0.3.3", - "matyhtf/framework": "<3.0.6", - "mautic/core": "<4.3|= 2.13.1", - "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/matomo": "<2.4.3", - "melisplatform/melis-asset-manager": "<5.0.1", - "melisplatform/melis-cms": "<5.0.1", - "melisplatform/melis-front": "<5.0.1", - "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", - "mgallegos/laravel-jqgrid": "<=1.3", - "microweber/microweber": "<1.3.4", - "miniorange/miniorange-saml": "<1.4.3", - "mittwald/typo3_forum": "<1.2.1", - "mobiledetect/mobiledetectlib": "<2.8.32", - "modx/revolution": "<= 2.8.3-pl|<2.8", - "mojo42/jirafeau": "<4.4", - "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.2-rc.2|= 3.11", - "mustache/mustache": ">=2,<2.14.1", - "namshi/jose": "<2.2", - "neoan3-apps/template": "<1.1.1", - "neorazorx/facturascripts": "<2022.4", - "neos/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "neos/form": ">=1.2,<4.3.3|>=5,<5.0.9|>=5.1,<5.1.3", - "neos/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.9.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<5.3.10|>=7,<7.0.9|>=7.1,<7.1.7|>=7.2,<7.2.6|>=7.3,<7.3.4|>=8,<8.0.2", - "neos/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", - "netgen/tagsbundle": ">=3.4,<3.4.11|>=4,<4.0.15", - "nette/application": ">=2,<2.0.19|>=2.1,<2.1.13|>=2.2,<2.2.10|>=2.3,<2.3.14|>=2.4,<2.4.16|>=3,<3.0.6", - "nette/nette": ">=2,<2.0.19|>=2.1,<2.1.13", - "nilsteampassnet/teampass": "<3.0.7", - "notrinos/notrinos-erp": "<=0.7", - "noumo/easyii": "<=0.9", - "nukeviet/nukeviet": "<4.5.2", - "nyholm/psr7": "<1.6.1", - "nystudio107/craft-seomatic": "<3.4.12", - "nzo/url-encryptor-bundle": ">=4,<4.3.2|>=5,<5.0.1", - "october/backend": "<1.1.2", - "october/cms": "= 1.1.1|= 1.0.471|= 1.0.469|>=1.0.319,<1.0.469", - "october/october": ">=1.0.319,<1.0.466|>=2.1,<2.1.12", - "october/rain": "<1.0.472|>=1.1,<1.1.2", - "october/system": "<1.0.476|>=1.1,<1.1.12|>=2,<2.2.34|>=3,<3.0.66", - "onelogin/php-saml": "<2.10.4", - "oneup/uploader-bundle": "<1.9.3|>=2,<2.1.5", - "open-web-analytics/open-web-analytics": "<1.7.4", - "opencart/opencart": "<=3.0.3.7", - "openid/php-openid": "<2.3", - "openmage/magento-lts": "<19.4.22|>=20,<20.0.19", - "orchid/platform": ">=9,<9.4.4", - "oro/commerce": ">=4.1,<5.0.6", - "oro/crm": ">=1.7,<1.7.4|>=3.1,<4.1.17|>=4.2,<4.2.7", - "oro/platform": ">=1.7,<1.7.4|>=3.1,<3.1.29|>=4.1,<4.1.17|>=4.2,<4.2.8", - "packbackbooks/lti-1-3-php-library": "<5", - "padraic/humbug_get_contents": "<1.1.2", - "pagarme/pagarme-php": ">=0,<3", - "pagekit/pagekit": "<=1.0.18", - "paragonie/random_compat": "<2", - "passbolt/passbolt_api": "<2.11", - "paypal/merchant-sdk-php": "<3.12", - "pear/archive_tar": "<1.4.14", - "pear/crypt_gpg": "<1.6.7", - "pegasus/google-for-jobs": "<1.5.1|>=2,<2.1.1", - "personnummer/personnummer": "<3.0.2", - "phanan/koel": "<5.1.4", - "php-mod/curl": "<2.3.2", - "phpbb/phpbb": ">=3.2,<3.2.10|>=3.3,<3.3.1", - "phpfastcache/phpfastcache": "<6.1.5|>=7,<7.1.2|>=8,<8.0.7", - "phpmailer/phpmailer": "<6.5", - "phpmussel/phpmussel": ">=1,<1.6", - "phpmyadmin/phpmyadmin": "<5.2.1", - "phpmyfaq/phpmyfaq": "<=3.1.7", - "phpoffice/phpexcel": "<1.8", - "phpoffice/phpspreadsheet": "<1.16", - "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.19", - "phpservermon/phpservermon": "<=3.5.2", - "phpsysinfo/phpsysinfo": "<3.2.5", - "phpunit/phpunit": ">=4.8.19,<4.8.28|>=5,<5.6.3", - "phpwhois/phpwhois": "<=4.2.5", - "phpxmlrpc/extras": "<0.6.1", - "phpxmlrpc/phpxmlrpc": "<4.9.2", - "pimcore/customer-management-framework-bundle": "<3.3.10", - "pimcore/data-hub": "<1.2.4", - "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<10.5.21", - "pixelfed/pixelfed": "<=0.11.4", - "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<4.12.5|>= 4.0.0-BETA5, < 4.4.2", - "pressbooks/pressbooks": "<5.18", - "prestashop/autoupgrade": ">=4,<4.10.1", - "prestashop/blockwishlist": ">=2,<2.1.1", - "prestashop/contactform": ">=1.0.1,<4.3", - "prestashop/gamification": "<2.3.2", - "prestashop/prestashop": "<8.0.4", - "prestashop/productcomments": "<5.0.2", - "prestashop/ps_emailsubscription": "<2.6.1", - "prestashop/ps_facetedsearch": "<3.4.1", - "prestashop/ps_linklist": "<3.1", - "privatebin/privatebin": "<1.4", - "processwire/processwire": "<=3.0.200", - "propel/propel": ">=2-alpha.1,<=2-alpha.7", - "propel/propel1": ">=1,<=1.7.1", - "pterodactyl/panel": "<1.7", - "ptrofimov/beanstalk_console": "<1.7.14", - "pusher/pusher-php-server": "<2.2.1", - "pwweb/laravel-core": "<=0.3.6-beta", - "pyrocms/pyrocms": "<=3.9.1", - "rainlab/debugbar-plugin": "<3.1", - "rankmath/seo-by-rank-math": "<=1.0.95", - "react/http": ">=0.7,<1.9", - "really-simple-plugins/complianz-gdpr": "<6.4.2", - "remdex/livehelperchat": "<3.99", - "rmccue/requests": ">=1.6,<1.8", - "robrichards/xmlseclibs": "<3.0.4", - "roots/soil": "<4.1", - "rudloff/alltube": "<3.0.3", - "s-cart/core": "<6.9", - "s-cart/s-cart": "<6.9", - "sabberworm/php-css-parser": ">=1,<1.0.1|>=2,<2.0.1|>=3,<3.0.1|>=4,<4.0.1|>=5,<5.0.9|>=5.1,<5.1.3|>=5.2,<5.2.1|>=6,<6.0.2|>=7,<7.0.4|>=8,<8.0.1|>=8.1,<8.1.1|>=8.2,<8.2.1|>=8.3,<8.3.1", - "sabre/dav": ">=1.6,<1.6.99|>=1.7,<1.7.11|>=1.8,<1.8.9", - "scheb/two-factor-bundle": ">=0,<3.26|>=4,<4.11", - "sensiolabs/connect": "<4.2.3", - "serluck/phpwhois": "<=4.2.6", - "shopware/core": "<=6.4.20", - "shopware/platform": "<=6.4.20", - "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.14", - "shopware/storefront": "<=6.4.8.1", - "shopxo/shopxo": "<2.2.6", - "showdoc/showdoc": "<2.10.4", - "silverstripe/admin": "<1.12.7", - "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.12.5", - "silverstripe/graphql": "<3.5.2|>=4-alpha.1,<4-alpha.2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3|= 4.0.0-alpha1", - "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", - "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", - "silverstripe/restfulserver": ">=1,<1.0.9|>=2,<2.0.4", - "silverstripe/silverstripe-omnipay": "<2.5.2|>=3,<3.0.2|>=3.1,<3.1.4|>=3.2,<3.2.1", - "silverstripe/subsites": ">=2,<2.6.1", - "silverstripe/taxonomy": ">=1.3,<1.3.1|>=2,<2.0.1", - "silverstripe/userforms": "<3", - "silverstripe/versioned-admin": ">=1,<1.11.1", - "simple-updates/phpwhois": "<=1", - "simplesamlphp/saml2": "<1.10.6|>=2,<2.3.8|>=3,<3.1.4", - "simplesamlphp/simplesamlphp": "<1.18.6", - "simplesamlphp/simplesamlphp-module-infocard": "<1.0.1", - "simplesamlphp/simplesamlphp-module-openid": "<1", - "simplesamlphp/simplesamlphp-module-openidprovider": "<0.9", - "simplito/elliptic-php": "<1.0.6", - "sitegeist/fluid-components": "<3.5", - "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", - "slim/slim": "<2.6", - "smarty/smarty": "<3.1.48|>=4,<4.3.1", - "snipe/snipe-it": "<=6.0.14|>= 6.0.0-RC-1, <= 6.0.0-RC-5", - "socalnick/scn-social-auth": "<1.15.2", - "socialiteproviders/steam": "<1.1", - "spatie/browsershot": "<3.57.4", - "spipu/html2pdf": "<5.2.4", - "spoonity/tcpdf": "<6.2.22", - "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", - "ssddanbrown/bookstack": "<22.2.3", - "statamic/cms": "<3.2.39|>=3.3,<3.3.2", - "stormpath/sdk": ">=0,<9.9.99", - "studio-42/elfinder": "<2.1.59", - "subrion/cms": "<=4.2.1", - "sukohi/surpass": "<1", - "sulu/sulu": "= 2.4.0-RC1|<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8", - "sumocoders/framework-user-bundle": "<1.4", - "swag/paypal": "<5.4.4", - "swiftmailer/swiftmailer": ">=4,<5.4.5", - "sylius/admin-bundle": ">=1,<1.0.17|>=1.1,<1.1.9|>=1.2,<1.2.2", - "sylius/grid": ">=1,<1.1.19|>=1.2,<1.2.18|>=1.3,<1.3.13|>=1.4,<1.4.5|>=1.5,<1.5.1", - "sylius/grid-bundle": "<1.10.1", - "sylius/paypal-plugin": ">=1,<1.2.4|>=1.3,<1.3.1", - "sylius/resource-bundle": "<1.3.14|>=1.4,<1.4.7|>=1.5,<1.5.2|>=1.6,<1.6.4", - "sylius/sylius": "<1.9.10|>=1.10,<1.10.11|>=1.11,<1.11.2", - "symbiote/silverstripe-multivaluefield": ">=3,<3.0.99", - "symbiote/silverstripe-queuedjobs": ">=3,<3.0.2|>=3.1,<3.1.4|>=4,<4.0.7|>=4.1,<4.1.2|>=4.2,<4.2.4|>=4.3,<4.3.3|>=4.4,<4.4.3|>=4.5,<4.5.1|>=4.6,<4.6.4", - "symbiote/silverstripe-seed": "<6.0.3", - "symbiote/silverstripe-versionedfiles": "<=2.0.3", - "symfont/process": ">=0", - "symfony/cache": ">=3.1,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8", - "symfony/dependency-injection": ">=2,<2.0.17|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/error-handler": ">=4.4,<4.4.4|>=5,<5.0.4", - "symfony/form": ">=2.3,<2.3.35|>=2.4,<2.6.12|>=2.7,<2.7.50|>=2.8,<2.8.49|>=3,<3.4.20|>=4,<4.0.15|>=4.1,<4.1.9|>=4.2,<4.2.1", - "symfony/framework-bundle": ">=2,<2.3.18|>=2.4,<2.4.8|>=2.5,<2.5.2|>=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7|>=5.3.14,<=5.3.14|>=5.4.3,<=5.4.3|>=6.0.3,<=6.0.3|= 6.0.3|= 5.4.3|= 5.3.14", - "symfony/http-foundation": ">=2,<2.8.52|>=3,<3.4.35|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7", - "symfony/http-kernel": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", - "symfony/intl": ">=2.7,<2.7.38|>=2.8,<2.8.31|>=3,<3.2.14|>=3.3,<3.3.13", - "symfony/maker-bundle": ">=1.27,<1.29.2|>=1.30,<1.31.1", - "symfony/mime": ">=4.3,<4.3.8", - "symfony/phpunit-bridge": ">=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/polyfill": ">=1,<1.10", - "symfony/polyfill-php55": ">=1,<1.10", - "symfony/proxy-manager-bridge": ">=2.7,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.1.12|>=4.2,<4.2.7", - "symfony/routing": ">=2,<2.0.19", - "symfony/security": ">=2,<2.7.51|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.8", - "symfony/security-bundle": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", - "symfony/security-core": ">=2.4,<2.6.13|>=2.7,<2.7.9|>=2.7.30,<2.7.32|>=2.8,<3.4.49|>=4,<4.4.24|>=5,<5.2.9", - "symfony/security-csrf": ">=2.4,<2.7.48|>=2.8,<2.8.41|>=3,<3.3.17|>=3.4,<3.4.11|>=4,<4.0.11", - "symfony/security-guard": ">=2.8,<3.4.48|>=4,<4.4.23|>=5,<5.2.8", - "symfony/security-http": ">=2.3,<2.3.41|>=2.4,<2.7.51|>=2.8,<2.8.50|>=3,<3.4.26|>=4,<4.2.12|>=4.3,<4.3.8|>=4.4,<4.4.7|>=5,<5.0.7|>=5.1,<5.2.8|>=5.3,<5.3.2", - "symfony/serializer": ">=2,<2.0.11|>=4.1,<4.4.35|>=5,<5.3.12", - "symfony/symfony": ">=2,<4.4.50|>=5,<5.4.20|>=6,<6.0.20|>=6.1,<6.1.12|>=6.2,<6.2.6", - "symfony/translation": ">=2,<2.0.17", - "symfony/validator": ">=2,<2.0.24|>=2.1,<2.1.12|>=2.2,<2.2.5|>=2.3,<2.3.3", - "symfony/var-exporter": ">=4.2,<4.2.12|>=4.3,<4.3.8", - "symfony/web-profiler-bundle": ">=2,<2.3.19|>=2.4,<2.4.9|>=2.5,<2.5.4", - "symfony/yaml": ">=2,<2.0.22|>=2.1,<2.1.7", - "t3/dce": ">=2.2,<2.6.2", - "t3g/svg-sanitizer": "<1.0.3", - "tastyigniter/tastyigniter": "<3.3", - "tcg/voyager": "<=1.4", - "tecnickcom/tcpdf": "<6.2.22", - "terminal42/contao-tablelookupwizard": "<3.3.5", - "thelia/backoffice-default-template": ">=2.1,<2.1.2", - "thelia/thelia": ">=2.1-beta.1,<2.1.3", - "theonedemon/phpwhois": "<=4.2.5", - "thinkcmf/thinkcmf": "<=5.1.7", - "thorsten/phpmyfaq": "<3.2-beta", - "tinymce/tinymce": "<5.10.7|>=6,<6.3.1", - "tinymighty/wiki-seo": "<1.2.2", - "titon/framework": ">=0,<9.9.99", - "tobiasbg/tablepress": "<= 2.0-RC1", - "topthink/framework": "<6.0.14", - "topthink/think": "<=6.1.1", - "topthink/thinkphp": "<=3.2.3", - "tribalsystems/zenario": "<=9.3.57595", - "truckersmp/phpwhois": "<=4.3.1", - "ttskch/pagination-service-provider": "<1", - "twig/twig": "<1.44.7|>=2,<2.15.3|>=3,<3.4.3", - "typo3/cms": "<2.0.5|>=3,<3.0.3|>=6.2,<6.2.30|>=7,<7.6.32|>=8,<8.7.38|>=9,<9.5.29|>=10,<10.4.35|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-backend": ">=7,<=7.6.50|>=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/cms-core": "<8.7.51|>=9,<9.5.40|>=10,<10.4.36|>=11,<11.5.23|>=12,<12.2", - "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", - "typo3/flow": ">=1,<1.0.4|>=1.1,<1.1.1|>=2,<2.0.1|>=2.3,<2.3.16|>=3,<3.0.12|>=3.1,<3.1.10|>=3.2,<3.2.13|>=3.3,<3.3.13|>=4,<4.0.6", - "typo3/html-sanitizer": ">=1,<1.5|>=2,<2.1.1", - "typo3/neos": ">=1.1,<1.1.3|>=1.2,<1.2.13|>=2,<2.0.4|>=2.3,<2.3.99|>=3,<3.0.20|>=3.1,<3.1.18|>=3.2,<3.2.14|>=3.3,<3.3.23|>=4,<4.0.17|>=4.1,<4.1.16|>=4.2,<4.2.12|>=4.3,<4.3.3", - "typo3/phar-stream-wrapper": ">=1,<2.1.1|>=3,<3.1.1", - "typo3/swiftmailer": ">=4.1,<4.1.99|>=5.4,<5.4.5", - "typo3fluid/fluid": ">=2,<2.0.8|>=2.1,<2.1.7|>=2.2,<2.2.4|>=2.3,<2.3.7|>=2.4,<2.4.4|>=2.5,<2.5.11|>=2.6,<2.6.10", - "ua-parser/uap-php": "<3.8", - "unisharp/laravel-filemanager": "<=2.5.1", - "userfrosting/userfrosting": ">=0.3.1,<4.6.3", - "usmanhalalit/pixie": "<1.0.3|>=2,<2.0.2", - "uvdesk/community-skeleton": "<=1.1.1", - "vanilla/safecurl": "<0.9.2", - "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", - "vova07/yii2-fileapi-widget": "<0.1.9", - "vrana/adminer": "<4.8.1", - "wallabag/tcpdf": "<6.2.22", - "wallabag/wallabag": "<2.5.4", - "wanglelecc/laracms": "<=1.0.3", - "web-auth/webauthn-framework": ">=3.3,<3.3.4", - "webbuilders-group/silverstripe-kapost-bridge": "<0.4", - "webcoast/deferred-image-processing": "<1.0.2", - "webpa/webpa": "<3.1.2", - "wikimedia/parsoid": "<0.12.2", - "willdurand/js-translation-bundle": "<2.1.1", - "wintercms/winter": "<1.0.475|>=1.1,<1.1.10|>=1.2,<1.2.1", - "woocommerce/woocommerce": "<6.6", - "wp-cli/wp-cli": "<2.5", - "wp-graphql/wp-graphql": "<0.3.5", - "wpanel/wpanel4-cms": "<=4.3.1", - "wpcloud/wp-stateless": "<3.2", - "wwbn/avideo": "<=12.4", - "xataface/xataface": "<3", - "xpressengine/xpressengine": "<3.0.15", - "yeswiki/yeswiki": "<4.1", - "yetiforce/yetiforce-crm": "<=6.4", - "yidashi/yii2cmf": "<=2", - "yii2mod/yii2-cms": "<1.9.2", - "yiisoft/yii": "<1.1.27", - "yiisoft/yii2": "<2.0.38", - "yiisoft/yii2-bootstrap": "<2.0.4", - "yiisoft/yii2-dev": "<2.0.43", - "yiisoft/yii2-elasticsearch": "<2.0.5", - "yiisoft/yii2-gii": "<=2.2.4", - "yiisoft/yii2-jui": "<2.0.4", - "yiisoft/yii2-redis": "<2.0.8", - "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", - "yoast-seo-for-typo3/yoast_seo": "<7.2.3", - "yourls/yourls": "<=1.8.2", - "zendesk/zendesk_api_client_php": "<2.2.11", - "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", - "zendframework/zend-developer-tools": ">=1.2.2,<1.2.3", - "zendframework/zend-diactoros": "<1.8.4", - "zendframework/zend-feed": "<2.10.3", - "zendframework/zend-form": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-http": "<2.8.1", - "zendframework/zend-json": ">=2.1,<2.1.6|>=2.2,<2.2.6", - "zendframework/zend-ldap": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.8|>=2.3,<2.3.3", - "zendframework/zend-mail": ">=2,<2.4.11|>=2.5,<2.7.2", - "zendframework/zend-navigation": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-session": ">=2,<2.0.99|>=2.1,<2.1.99|>=2.2,<2.2.9|>=2.3,<2.3.4", - "zendframework/zend-validator": ">=2.3,<2.3.6", - "zendframework/zend-view": ">=2,<2.2.7|>=2.3,<2.3.1", - "zendframework/zend-xmlrpc": ">=2.1,<2.1.6|>=2.2,<2.2.6", - "zendframework/zendframework": "<=3", - "zendframework/zendframework1": "<1.12.20", - "zendframework/zendopenid": ">=2,<2.0.2", - "zendframework/zendxml": ">=1,<1.0.1", - "zetacomponents/mail": "<1.8.2", - "zf-commons/zfc-user": "<1.2.2", - "zfcampus/zf-apigility-doctrine": ">=1,<1.0.3", - "zfr/zfr-oauth2-server-module": "<0.1.2", - "zoujingli/thinkadmin": "<6.0.22" - }, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "role": "maintainer" - }, - { - "name": "Ilya Tribusean", - "email": "slash3b@gmail.com", - "role": "maintainer" - } - ], - "description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it", - "keywords": [ - "dev" - ], - "support": { - "issues": "https://github.com/Roave/SecurityAdvisories/issues", - "source": "https://github.com/Roave/SecurityAdvisories/tree/latest" - }, - "funding": [ - { - "url": "https://github.com/Ocramius", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/roave/security-advisories", - "type": "tidelift" - } - ], - "time": "2023-05-22T21:04:18+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "roave/security-advisories": 20 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": ">=8.1", - "ext-simplexml": "*", - "ext-dom": "*", - "ext-iconv": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "lib-iconv": "*", - "lib-libxml": "*" - }, - "platform-dev": [], - "plugin-api-version": "2.3.0" + "platform-dev": [], + "plugin-api-version": "2.3.0" } diff --git a/core/factory/version.php b/core/factory/version.php index c27f306aaf..ee21bd5191 100644 --- a/core/factory/version.php +++ b/core/factory/version.php @@ -1,7 +1,6 @@ - '3.2.2', // Current version number - 'release_date' => 'May 25, 2023', // Date of release + 'release_date' => 'May 31, 2023', // Date of release 'branch' => 'Evolution CMS', // Codebase name - 'full_appname' => 'Evolution CMS 3.2.2 (May 25, 2023)' + 'full_appname' => 'Evolution CMS 3.2.2 (May 31, 2023)' ]; diff --git a/core/src/Console/SiteUpdateCommand.php b/core/src/Console/SiteUpdateCommand.php index 7d4c1067fd..fbf3114231 100644 --- a/core/src/Console/SiteUpdateCommand.php +++ b/core/src/Console/SiteUpdateCommand.php @@ -1,12 +1,11 @@ $val) { - $arrayVersion = explode('.', $val['name']); if ($currentMajorVersion == array_shift($arrayVersion)) { - $git['version'] = $val['name']; - if (strpos($val['name'], 'alpha')) { $git['alpha'] = $val['name']; continue; @@ -101,12 +97,12 @@ public function startUpdate() } if ($git['version'] != '') { $url = 'https://github.com/evolution-cms/evolution/archive/' . $git['version'] . '.zip'; - echo "Start download EvolutionCMS\n"; + $this->line('Start download Evolution CMS'); $url = file_get_contents($url); $file = MODX_BASE_PATH . 'new_version.zip'; file_put_contents($file, $url); - echo "Start unpacking EvolutionCMS\n"; + $this->line('Start unpacking Evolution CMS'); $temp_dir = MODX_BASE_PATH . '_temp' . md5(time()); //run unzip and install @@ -127,6 +123,36 @@ public function startUpdate() SELF::moveFiles($temp_dir . '/' . $dir, MODX_BASE_PATH); SELF::rmdirs($temp_dir); + $ch = curl_init(); + $url = 'https://api.github.com/repos/' . $updateRepository . '/releases'; + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_REFERER, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_HTTPHEADER, array("User-Agent: updateNotify widget")); + $releases = curl_exec($ch); + curl_close($ch); + + $factoryName = $currentVersion['full_appname']; + if (substr($releases, 0, 1) == "[") { + $releases = json_decode($releases, true); + foreach ($releases as $release) { + if ($git['version'] == $release["tag_name"]) { + $factoryDate = date("M j, Y", strtotime($release["published_at"])); + $factoryName = $release["name"] . ' (' . $factoryDate . ')'; + $factoryVersion = ' "' . $release["tag_name"] . '", // Current version number' . "\n"; + $factoryVersion .= "\t" . '"release_date" => "' . $factoryDate . '", // Date of release' . "\n"; + $factoryVersion .= "\t" . '"branch" => "Evolution CMS", // Codebase name' . "\n"; + $factoryVersion .= "\t" . '"full_appname" => "' . $factoryName . '", // Date of release' . "\n"; + $factoryVersion .= '];'; + file_put_contents(EVO_CORE_PATH . "factory/version.php", $factoryVersion); + break; + } + } + } + $delete_file = MODX_BASE_PATH . 'install/stubs/file_for_delete.txt'; if (file_exists($delete_file)) { $files = explode("\n", file_get_contents($delete_file)); @@ -146,13 +172,15 @@ public function startUpdate() $application = new Application(); $application->setAutoExit(false); $application->run($input); - echo "Run Migrations\n"; + $this->line('Run Migrations'); exec('php ../install/cli-install.php --typeInstall=2 --removeInstall=y'); - echo "Remove Install Directory\n"; + $this->line('Remove Install Directory'); + self::rmdirs(MODX_BASE_PATH . 'install'); + $this->line('Now You use ' . $factoryName . ''); } else { - echo 'You use almost current version'; + $this->line('You use almost current version'); } } diff --git a/core/vendor/autoload.php b/core/vendor/autoload.php index 534506aa4b..695f1ac1e7 100644 --- a/core/vendor/autoload.php +++ b/core/vendor/autoload.php @@ -22,4 +22,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit08584f8f0eccca6c60577ced8376ce8c::getLoader(); +return ComposerAutoloaderInitfacb702495127c53b6aa7bcb6294d866::getLoader(); diff --git a/core/vendor/bin/doctrine-dbal.bat b/core/vendor/bin/doctrine-dbal.bat deleted file mode 100644 index 56c0b3fef1..0000000000 --- a/core/vendor/bin/doctrine-dbal.bat +++ /dev/null @@ -1,5 +0,0 @@ -@ECHO OFF -setlocal DISABLEDELAYEDEXPANSION -SET BIN_TARGET=%~dp0/doctrine-dbal -SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 -php "%BIN_TARGET%" %* diff --git a/core/vendor/bin/jsonlint.bat b/core/vendor/bin/jsonlint.bat deleted file mode 100644 index 3fe6ab4edc..0000000000 --- a/core/vendor/bin/jsonlint.bat +++ /dev/null @@ -1,5 +0,0 @@ -@ECHO OFF -setlocal DISABLEDELAYEDEXPANSION -SET BIN_TARGET=%~dp0/jsonlint -SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 -php "%BIN_TARGET%" %* diff --git a/core/vendor/bin/patch-type-declarations.bat b/core/vendor/bin/patch-type-declarations.bat deleted file mode 100644 index 2b0707968a..0000000000 --- a/core/vendor/bin/patch-type-declarations.bat +++ /dev/null @@ -1,5 +0,0 @@ -@ECHO OFF -setlocal DISABLEDELAYEDEXPANSION -SET BIN_TARGET=%~dp0/patch-type-declarations -SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 -php "%BIN_TARGET%" %* diff --git a/core/vendor/bin/salo.bat b/core/vendor/bin/salo.bat deleted file mode 100644 index bf1e6075f9..0000000000 --- a/core/vendor/bin/salo.bat +++ /dev/null @@ -1,5 +0,0 @@ -@ECHO OFF -setlocal DISABLEDELAYEDEXPANSION -SET BIN_TARGET=%~dp0/../evolutioncms/salo2/bin/salo -SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 -bash "%BIN_TARGET%" %* diff --git a/core/vendor/bin/var-dump-server.bat b/core/vendor/bin/var-dump-server.bat deleted file mode 100644 index 94333da54c..0000000000 --- a/core/vendor/bin/var-dump-server.bat +++ /dev/null @@ -1,5 +0,0 @@ -@ECHO OFF -setlocal DISABLEDELAYEDEXPANSION -SET BIN_TARGET=%~dp0/var-dump-server -SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 -php "%BIN_TARGET%" %* diff --git a/core/vendor/composer/autoload_classmap.php b/core/vendor/composer/autoload_classmap.php index c275d5e9ba..ee983ebae3 100644 --- a/core/vendor/composer/autoload_classmap.php +++ b/core/vendor/composer/autoload_classmap.php @@ -846,32 +846,6 @@ 'Egulias\\EmailValidator\\EmailLexer' => $vendorDir . '/egulias/email-validator/src/EmailLexer.php', 'Egulias\\EmailValidator\\EmailParser' => $vendorDir . '/egulias/email-validator/src/EmailParser.php', 'Egulias\\EmailValidator\\EmailValidator' => $vendorDir . '/egulias/email-validator/src/EmailValidator.php', - 'Egulias\\EmailValidator\\Exception\\AtextAfterCFWS' => $vendorDir . '/egulias/email-validator/src/Exception/AtextAfterCFWS.php', - 'Egulias\\EmailValidator\\Exception\\CRLFAtTheEnd' => $vendorDir . '/egulias/email-validator/src/Exception/CRLFAtTheEnd.php', - 'Egulias\\EmailValidator\\Exception\\CRLFX2' => $vendorDir . '/egulias/email-validator/src/Exception/CRLFX2.php', - 'Egulias\\EmailValidator\\Exception\\CRNoLF' => $vendorDir . '/egulias/email-validator/src/Exception/CRNoLF.php', - 'Egulias\\EmailValidator\\Exception\\CharNotAllowed' => $vendorDir . '/egulias/email-validator/src/Exception/CharNotAllowed.php', - 'Egulias\\EmailValidator\\Exception\\CommaInDomain' => $vendorDir . '/egulias/email-validator/src/Exception/CommaInDomain.php', - 'Egulias\\EmailValidator\\Exception\\ConsecutiveAt' => $vendorDir . '/egulias/email-validator/src/Exception/ConsecutiveAt.php', - 'Egulias\\EmailValidator\\Exception\\ConsecutiveDot' => $vendorDir . '/egulias/email-validator/src/Exception/ConsecutiveDot.php', - 'Egulias\\EmailValidator\\Exception\\DomainAcceptsNoMail' => $vendorDir . '/egulias/email-validator/src/Exception/DomainAcceptsNoMail.php', - 'Egulias\\EmailValidator\\Exception\\DomainHyphened' => $vendorDir . '/egulias/email-validator/src/Exception/DomainHyphened.php', - 'Egulias\\EmailValidator\\Exception\\DotAtEnd' => $vendorDir . '/egulias/email-validator/src/Exception/DotAtEnd.php', - 'Egulias\\EmailValidator\\Exception\\DotAtStart' => $vendorDir . '/egulias/email-validator/src/Exception/DotAtStart.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingAT' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingAT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingATEXT' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingATEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingCTEXT' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingCTEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingDTEXT' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingDTEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingDomainLiteralClose' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingDomainLiteralClose.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingQPair' => $vendorDir . '/egulias/email-validator/src/Exception/ExpectingQPair.php', - 'Egulias\\EmailValidator\\Exception\\InvalidEmail' => $vendorDir . '/egulias/email-validator/src/Exception/InvalidEmail.php', - 'Egulias\\EmailValidator\\Exception\\LocalOrReservedDomain' => $vendorDir . '/egulias/email-validator/src/Exception/LocalOrReservedDomain.php', - 'Egulias\\EmailValidator\\Exception\\NoDNSRecord' => $vendorDir . '/egulias/email-validator/src/Exception/NoDNSRecord.php', - 'Egulias\\EmailValidator\\Exception\\NoDomainPart' => $vendorDir . '/egulias/email-validator/src/Exception/NoDomainPart.php', - 'Egulias\\EmailValidator\\Exception\\NoLocalPart' => $vendorDir . '/egulias/email-validator/src/Exception/NoLocalPart.php', - 'Egulias\\EmailValidator\\Exception\\UnclosedComment' => $vendorDir . '/egulias/email-validator/src/Exception/UnclosedComment.php', - 'Egulias\\EmailValidator\\Exception\\UnclosedQuotedString' => $vendorDir . '/egulias/email-validator/src/Exception/UnclosedQuotedString.php', - 'Egulias\\EmailValidator\\Exception\\UnopenedComment' => $vendorDir . '/egulias/email-validator/src/Exception/UnopenedComment.php', 'Egulias\\EmailValidator\\MessageIDParser' => $vendorDir . '/egulias/email-validator/src/MessageIDParser.php', 'Egulias\\EmailValidator\\Parser' => $vendorDir . '/egulias/email-validator/src/Parser.php', 'Egulias\\EmailValidator\\Parser\\Comment' => $vendorDir . '/egulias/email-validator/src/Parser/Comment.php', @@ -885,22 +859,42 @@ 'Egulias\\EmailValidator\\Parser\\IDLeftPart' => $vendorDir . '/egulias/email-validator/src/Parser/IDLeftPart.php', 'Egulias\\EmailValidator\\Parser\\IDRightPart' => $vendorDir . '/egulias/email-validator/src/Parser/IDRightPart.php', 'Egulias\\EmailValidator\\Parser\\LocalPart' => $vendorDir . '/egulias/email-validator/src/Parser/LocalPart.php', - 'Egulias\\EmailValidator\\Parser\\Parser' => $vendorDir . '/egulias/email-validator/src/Parser/Parser.php', 'Egulias\\EmailValidator\\Parser\\PartParser' => $vendorDir . '/egulias/email-validator/src/Parser/PartParser.php', 'Egulias\\EmailValidator\\Result\\InvalidEmail' => $vendorDir . '/egulias/email-validator/src/Result/InvalidEmail.php', + 'Egulias\\EmailValidator\\Result\\MultipleErrors' => $vendorDir . '/egulias/email-validator/src/Result/MultipleErrors.php', 'Egulias\\EmailValidator\\Result\\Reason\\AtextAfterCFWS' => $vendorDir . '/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php', 'Egulias\\EmailValidator\\Result\\Reason\\CRLFAtTheEnd' => $vendorDir . '/egulias/email-validator/src/Result/Reason/CRLFAtTheEnd.php', + 'Egulias\\EmailValidator\\Result\\Reason\\CRLFX2' => $vendorDir . '/egulias/email-validator/src/Result/Reason/CRLFX2.php', + 'Egulias\\EmailValidator\\Result\\Reason\\CRNoLF' => $vendorDir . '/egulias/email-validator/src/Result/Reason/CRNoLF.php', 'Egulias\\EmailValidator\\Result\\Reason\\CharNotAllowed' => $vendorDir . '/egulias/email-validator/src/Result/Reason/CharNotAllowed.php', 'Egulias\\EmailValidator\\Result\\Reason\\CommaInDomain' => $vendorDir . '/egulias/email-validator/src/Result/Reason/CommaInDomain.php', 'Egulias\\EmailValidator\\Result\\Reason\\CommentsInIDRight' => $vendorDir . '/egulias/email-validator/src/Result/Reason/CommentsInIDRight.php', + 'Egulias\\EmailValidator\\Result\\Reason\\ConsecutiveAt' => $vendorDir . '/egulias/email-validator/src/Result/Reason/ConsecutiveAt.php', + 'Egulias\\EmailValidator\\Result\\Reason\\ConsecutiveDot' => $vendorDir . '/egulias/email-validator/src/Result/Reason/ConsecutiveDot.php', 'Egulias\\EmailValidator\\Result\\Reason\\DetailedReason' => $vendorDir . '/egulias/email-validator/src/Result/Reason/DetailedReason.php', 'Egulias\\EmailValidator\\Result\\Reason\\DomainAcceptsNoMail' => $vendorDir . '/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php', + 'Egulias\\EmailValidator\\Result\\Reason\\DomainHyphened' => $vendorDir . '/egulias/email-validator/src/Result/Reason/DomainHyphened.php', + 'Egulias\\EmailValidator\\Result\\Reason\\DomainTooLong' => $vendorDir . '/egulias/email-validator/src/Result/Reason/DomainTooLong.php', + 'Egulias\\EmailValidator\\Result\\Reason\\DotAtEnd' => $vendorDir . '/egulias/email-validator/src/Result/Reason/DotAtEnd.php', + 'Egulias\\EmailValidator\\Result\\Reason\\DotAtStart' => $vendorDir . '/egulias/email-validator/src/Result/Reason/DotAtStart.php', + 'Egulias\\EmailValidator\\Result\\Reason\\EmptyReason' => $vendorDir . '/egulias/email-validator/src/Result/Reason/EmptyReason.php', 'Egulias\\EmailValidator\\Result\\Reason\\ExceptionFound' => $vendorDir . '/egulias/email-validator/src/Result/Reason/ExceptionFound.php', + 'Egulias\\EmailValidator\\Result\\Reason\\ExpectingATEXT' => $vendorDir . '/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php', + 'Egulias\\EmailValidator\\Result\\Reason\\ExpectingCTEXT' => $vendorDir . '/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php', + 'Egulias\\EmailValidator\\Result\\Reason\\ExpectingDTEXT' => $vendorDir . '/egulias/email-validator/src/Result/Reason/ExpectingDTEXT.php', 'Egulias\\EmailValidator\\Result\\Reason\\ExpectingDomainLiteralClose' => $vendorDir . '/egulias/email-validator/src/Result/Reason/ExpectingDomainLiteralClose.php', + 'Egulias\\EmailValidator\\Result\\Reason\\LabelTooLong' => $vendorDir . '/egulias/email-validator/src/Result/Reason/LabelTooLong.php', 'Egulias\\EmailValidator\\Result\\Reason\\LocalOrReservedDomain' => $vendorDir . '/egulias/email-validator/src/Result/Reason/LocalOrReservedDomain.php', 'Egulias\\EmailValidator\\Result\\Reason\\NoDNSRecord' => $vendorDir . '/egulias/email-validator/src/Result/Reason/NoDNSRecord.php', + 'Egulias\\EmailValidator\\Result\\Reason\\NoDomainPart' => $vendorDir . '/egulias/email-validator/src/Result/Reason/NoDomainPart.php', + 'Egulias\\EmailValidator\\Result\\Reason\\NoLocalPart' => $vendorDir . '/egulias/email-validator/src/Result/Reason/NoLocalPart.php', + 'Egulias\\EmailValidator\\Result\\Reason\\RFCWarnings' => $vendorDir . '/egulias/email-validator/src/Result/Reason/RFCWarnings.php', 'Egulias\\EmailValidator\\Result\\Reason\\Reason' => $vendorDir . '/egulias/email-validator/src/Result/Reason/Reason.php', + 'Egulias\\EmailValidator\\Result\\Reason\\SpoofEmail' => $vendorDir . '/egulias/email-validator/src/Result/Reason/SpoofEmail.php', 'Egulias\\EmailValidator\\Result\\Reason\\UnOpenedComment' => $vendorDir . '/egulias/email-validator/src/Result/Reason/UnOpenedComment.php', + 'Egulias\\EmailValidator\\Result\\Reason\\UnableToGetDNSRecord' => $vendorDir . '/egulias/email-validator/src/Result/Reason/UnableToGetDNSRecord.php', + 'Egulias\\EmailValidator\\Result\\Reason\\UnclosedComment' => $vendorDir . '/egulias/email-validator/src/Result/Reason/UnclosedComment.php', + 'Egulias\\EmailValidator\\Result\\Reason\\UnclosedQuotedString' => $vendorDir . '/egulias/email-validator/src/Result/Reason/UnclosedQuotedString.php', 'Egulias\\EmailValidator\\Result\\Reason\\UnusualElements' => $vendorDir . '/egulias/email-validator/src/Result/Reason/UnusualElements.php', 'Egulias\\EmailValidator\\Result\\Result' => $vendorDir . '/egulias/email-validator/src/Result/Result.php', 'Egulias\\EmailValidator\\Result\\SpoofEmail' => $vendorDir . '/egulias/email-validator/src/Result/SpoofEmail.php', @@ -909,22 +903,18 @@ 'Egulias\\EmailValidator\\Validation\\DNSGetRecordWrapper' => $vendorDir . '/egulias/email-validator/src/Validation/DNSGetRecordWrapper.php', 'Egulias\\EmailValidator\\Validation\\DNSRecords' => $vendorDir . '/egulias/email-validator/src/Validation/DNSRecords.php', 'Egulias\\EmailValidator\\Validation\\EmailValidation' => $vendorDir . '/egulias/email-validator/src/Validation/EmailValidation.php', - 'Egulias\\EmailValidator\\Validation\\Error\\RFCWarnings' => $vendorDir . '/egulias/email-validator/src/Validation/Error/RFCWarnings.php', - 'Egulias\\EmailValidator\\Validation\\Error\\SpoofEmail' => $vendorDir . '/egulias/email-validator/src/Validation/Error/SpoofEmail.php', 'Egulias\\EmailValidator\\Validation\\Exception\\EmptyValidationList' => $vendorDir . '/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php', + 'Egulias\\EmailValidator\\Validation\\Extra\\SpoofCheckValidation' => $vendorDir . '/egulias/email-validator/src/Validation/Extra/SpoofCheckValidation.php', 'Egulias\\EmailValidator\\Validation\\MessageIDValidation' => $vendorDir . '/egulias/email-validator/src/Validation/MessageIDValidation.php', - 'Egulias\\EmailValidator\\Validation\\MultipleErrors' => $vendorDir . '/egulias/email-validator/src/Validation/MultipleErrors.php', 'Egulias\\EmailValidator\\Validation\\MultipleValidationWithAnd' => $vendorDir . '/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php', 'Egulias\\EmailValidator\\Validation\\NoRFCWarningsValidation' => $vendorDir . '/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php', 'Egulias\\EmailValidator\\Validation\\RFCValidation' => $vendorDir . '/egulias/email-validator/src/Validation/RFCValidation.php', - 'Egulias\\EmailValidator\\Validation\\SpoofCheckValidation' => $vendorDir . '/egulias/email-validator/src/Validation/SpoofCheckValidation.php', 'Egulias\\EmailValidator\\Warning\\AddressLiteral' => $vendorDir . '/egulias/email-validator/src/Warning/AddressLiteral.php', 'Egulias\\EmailValidator\\Warning\\CFWSNearAt' => $vendorDir . '/egulias/email-validator/src/Warning/CFWSNearAt.php', 'Egulias\\EmailValidator\\Warning\\CFWSWithFWS' => $vendorDir . '/egulias/email-validator/src/Warning/CFWSWithFWS.php', 'Egulias\\EmailValidator\\Warning\\Comment' => $vendorDir . '/egulias/email-validator/src/Warning/Comment.php', 'Egulias\\EmailValidator\\Warning\\DeprecatedComment' => $vendorDir . '/egulias/email-validator/src/Warning/DeprecatedComment.php', 'Egulias\\EmailValidator\\Warning\\DomainLiteral' => $vendorDir . '/egulias/email-validator/src/Warning/DomainLiteral.php', - 'Egulias\\EmailValidator\\Warning\\DomainTooLong' => $vendorDir . '/egulias/email-validator/src/Warning/DomainTooLong.php', 'Egulias\\EmailValidator\\Warning\\EmailTooLong' => $vendorDir . '/egulias/email-validator/src/Warning/EmailTooLong.php', 'Egulias\\EmailValidator\\Warning\\IPV6BadChar' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6BadChar.php', 'Egulias\\EmailValidator\\Warning\\IPV6ColonEnd' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6ColonEnd.php', @@ -933,7 +923,6 @@ 'Egulias\\EmailValidator\\Warning\\IPV6DoubleColon' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6DoubleColon.php', 'Egulias\\EmailValidator\\Warning\\IPV6GroupCount' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6GroupCount.php', 'Egulias\\EmailValidator\\Warning\\IPV6MaxGroups' => $vendorDir . '/egulias/email-validator/src/Warning/IPV6MaxGroups.php', - 'Egulias\\EmailValidator\\Warning\\LabelTooLong' => $vendorDir . '/egulias/email-validator/src/Warning/LabelTooLong.php', 'Egulias\\EmailValidator\\Warning\\LocalTooLong' => $vendorDir . '/egulias/email-validator/src/Warning/LocalTooLong.php', 'Egulias\\EmailValidator\\Warning\\NoDNSMXRecord' => $vendorDir . '/egulias/email-validator/src/Warning/NoDNSMXRecord.php', 'Egulias\\EmailValidator\\Warning\\ObsoleteDTEXT' => $vendorDir . '/egulias/email-validator/src/Warning/ObsoleteDTEXT.php', @@ -2420,11 +2409,14 @@ 'Predis\\Command\\Redis\\AbstractCommand\\BZPOPBase' => $vendorDir . '/predis/predis/src/Command/Redis/AbstractCommand/BZPOPBase.php', 'Predis\\Command\\Redis\\BGREWRITEAOF' => $vendorDir . '/predis/predis/src/Command/Redis/BGREWRITEAOF.php', 'Predis\\Command\\Redis\\BGSAVE' => $vendorDir . '/predis/predis/src/Command/Redis/BGSAVE.php', + 'Predis\\Command\\Redis\\BITCOUNT' => $vendorDir . '/predis/predis/src/Command/Redis/BITCOUNT.php', 'Predis\\Command\\Redis\\BITFIELD' => $vendorDir . '/predis/predis/src/Command/Redis/BITFIELD.php', 'Predis\\Command\\Redis\\BITOP' => $vendorDir . '/predis/predis/src/Command/Redis/BITOP.php', + 'Predis\\Command\\Redis\\BITPOS' => $vendorDir . '/predis/predis/src/Command/Redis/BITPOS.php', 'Predis\\Command\\Redis\\BLMOVE' => $vendorDir . '/predis/predis/src/Command/Redis/BLMOVE.php', 'Predis\\Command\\Redis\\BLMPOP' => $vendorDir . '/predis/predis/src/Command/Redis/BLMPOP.php', 'Predis\\Command\\Redis\\BLPOP' => $vendorDir . '/predis/predis/src/Command/Redis/BLPOP.php', + 'Predis\\Command\\Redis\\BRPOP' => $vendorDir . '/predis/predis/src/Command/Redis/BRPOP.php', 'Predis\\Command\\Redis\\BRPOPLPUSH' => $vendorDir . '/predis/predis/src/Command/Redis/BRPOPLPUSH.php', 'Predis\\Command\\Redis\\BZMPOP' => $vendorDir . '/predis/predis/src/Command/Redis/BZMPOP.php', 'Predis\\Command\\Redis\\BZPOPMAX' => $vendorDir . '/predis/predis/src/Command/Redis/BZPOPMAX.php', @@ -2440,6 +2432,7 @@ 'Predis\\Command\\Redis\\DBSIZE' => $vendorDir . '/predis/predis/src/Command/Redis/DBSIZE.php', 'Predis\\Command\\Redis\\DECR' => $vendorDir . '/predis/predis/src/Command/Redis/DECR.php', 'Predis\\Command\\Redis\\DECRBY' => $vendorDir . '/predis/predis/src/Command/Redis/DECRBY.php', + 'Predis\\Command\\Redis\\DEL' => $vendorDir . '/predis/predis/src/Command/Redis/DEL.php', 'Predis\\Command\\Redis\\DISCARD' => $vendorDir . '/predis/predis/src/Command/Redis/DISCARD.php', 'Predis\\Command\\Redis\\DUMP' => $vendorDir . '/predis/predis/src/Command/Redis/DUMP.php', 'Predis\\Command\\Redis\\ECHO_' => $vendorDir . '/predis/predis/src/Command/Redis/ECHO_.php', @@ -2449,6 +2442,8 @@ 'Predis\\Command\\Redis\\EVAL_RO' => $vendorDir . '/predis/predis/src/Command/Redis/EVAL_RO.php', 'Predis\\Command\\Redis\\EXEC' => $vendorDir . '/predis/predis/src/Command/Redis/EXEC.php', 'Predis\\Command\\Redis\\EXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/EXISTS.php', + 'Predis\\Command\\Redis\\EXPIRE' => $vendorDir . '/predis/predis/src/Command/Redis/EXPIRE.php', + 'Predis\\Command\\Redis\\EXPIREAT' => $vendorDir . '/predis/predis/src/Command/Redis/EXPIREAT.php', 'Predis\\Command\\Redis\\EXPIRETIME' => $vendorDir . '/predis/predis/src/Command/Redis/EXPIRETIME.php', 'Predis\\Command\\Redis\\FAILOVER' => $vendorDir . '/predis/predis/src/Command/Redis/FAILOVER.php', 'Predis\\Command\\Redis\\FCALL' => $vendorDir . '/predis/predis/src/Command/Redis/FCALL.php', @@ -2460,6 +2455,7 @@ 'Predis\\Command\\Redis\\GEOHASH' => $vendorDir . '/predis/predis/src/Command/Redis/GEOHASH.php', 'Predis\\Command\\Redis\\GEOPOS' => $vendorDir . '/predis/predis/src/Command/Redis/GEOPOS.php', 'Predis\\Command\\Redis\\GEORADIUS' => $vendorDir . '/predis/predis/src/Command/Redis/GEORADIUS.php', + 'Predis\\Command\\Redis\\GEORADIUSBYMEMBER' => $vendorDir . '/predis/predis/src/Command/Redis/GEORADIUSBYMEMBER.php', 'Predis\\Command\\Redis\\GEOSEARCH' => $vendorDir . '/predis/predis/src/Command/Redis/GEOSEARCH.php', 'Predis\\Command\\Redis\\GEOSEARCHSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/GEOSEARCHSTORE.php', 'Predis\\Command\\Redis\\GET' => $vendorDir . '/predis/predis/src/Command/Redis/GET.php', @@ -2468,6 +2464,7 @@ 'Predis\\Command\\Redis\\GETEX' => $vendorDir . '/predis/predis/src/Command/Redis/GETEX.php', 'Predis\\Command\\Redis\\GETRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/GETRANGE.php', 'Predis\\Command\\Redis\\GETSET' => $vendorDir . '/predis/predis/src/Command/Redis/GETSET.php', + 'Predis\\Command\\Redis\\HDEL' => $vendorDir . '/predis/predis/src/Command/Redis/HDEL.php', 'Predis\\Command\\Redis\\HEXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/HEXISTS.php', 'Predis\\Command\\Redis\\HGET' => $vendorDir . '/predis/predis/src/Command/Redis/HGET.php', 'Predis\\Command\\Redis\\HGETALL' => $vendorDir . '/predis/predis/src/Command/Redis/HGETALL.php', @@ -2475,6 +2472,7 @@ 'Predis\\Command\\Redis\\HINCRBYFLOAT' => $vendorDir . '/predis/predis/src/Command/Redis/HINCRBYFLOAT.php', 'Predis\\Command\\Redis\\HKEYS' => $vendorDir . '/predis/predis/src/Command/Redis/HKEYS.php', 'Predis\\Command\\Redis\\HLEN' => $vendorDir . '/predis/predis/src/Command/Redis/HLEN.php', + 'Predis\\Command\\Redis\\HMGET' => $vendorDir . '/predis/predis/src/Command/Redis/HMGET.php', 'Predis\\Command\\Redis\\HMSET' => $vendorDir . '/predis/predis/src/Command/Redis/HMSET.php', 'Predis\\Command\\Redis\\HRANDFIELD' => $vendorDir . '/predis/predis/src/Command/Redis/HRANDFIELD.php', 'Predis\\Command\\Redis\\HSCAN' => $vendorDir . '/predis/predis/src/Command/Redis/HSCAN.php', @@ -2485,6 +2483,7 @@ 'Predis\\Command\\Redis\\INCR' => $vendorDir . '/predis/predis/src/Command/Redis/INCR.php', 'Predis\\Command\\Redis\\INCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/INCRBY.php', 'Predis\\Command\\Redis\\INCRBYFLOAT' => $vendorDir . '/predis/predis/src/Command/Redis/INCRBYFLOAT.php', + 'Predis\\Command\\Redis\\INFO' => $vendorDir . '/predis/predis/src/Command/Redis/INFO.php', 'Predis\\Command\\Redis\\KEYS' => $vendorDir . '/predis/predis/src/Command/Redis/KEYS.php', 'Predis\\Command\\Redis\\LASTSAVE' => $vendorDir . '/predis/predis/src/Command/Redis/LASTSAVE.php', 'Predis\\Command\\Redis\\LCS' => $vendorDir . '/predis/predis/src/Command/Redis/LCS.php', @@ -2494,11 +2493,13 @@ 'Predis\\Command\\Redis\\LMOVE' => $vendorDir . '/predis/predis/src/Command/Redis/LMOVE.php', 'Predis\\Command\\Redis\\LMPOP' => $vendorDir . '/predis/predis/src/Command/Redis/LMPOP.php', 'Predis\\Command\\Redis\\LPOP' => $vendorDir . '/predis/predis/src/Command/Redis/LPOP.php', + 'Predis\\Command\\Redis\\LPUSH' => $vendorDir . '/predis/predis/src/Command/Redis/LPUSH.php', 'Predis\\Command\\Redis\\LPUSHX' => $vendorDir . '/predis/predis/src/Command/Redis/LPUSHX.php', 'Predis\\Command\\Redis\\LRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/LRANGE.php', 'Predis\\Command\\Redis\\LREM' => $vendorDir . '/predis/predis/src/Command/Redis/LREM.php', 'Predis\\Command\\Redis\\LSET' => $vendorDir . '/predis/predis/src/Command/Redis/LSET.php', 'Predis\\Command\\Redis\\LTRIM' => $vendorDir . '/predis/predis/src/Command/Redis/LTRIM.php', + 'Predis\\Command\\Redis\\MGET' => $vendorDir . '/predis/predis/src/Command/Redis/MGET.php', 'Predis\\Command\\Redis\\MIGRATE' => $vendorDir . '/predis/predis/src/Command/Redis/MIGRATE.php', 'Predis\\Command\\Redis\\MONITOR' => $vendorDir . '/predis/predis/src/Command/Redis/MONITOR.php', 'Predis\\Command\\Redis\\MOVE' => $vendorDir . '/predis/predis/src/Command/Redis/MOVE.php', @@ -2510,11 +2511,16 @@ 'Predis\\Command\\Redis\\PEXPIRE' => $vendorDir . '/predis/predis/src/Command/Redis/PEXPIRE.php', 'Predis\\Command\\Redis\\PEXPIREAT' => $vendorDir . '/predis/predis/src/Command/Redis/PEXPIREAT.php', 'Predis\\Command\\Redis\\PEXPIRETIME' => $vendorDir . '/predis/predis/src/Command/Redis/PEXPIRETIME.php', + 'Predis\\Command\\Redis\\PFADD' => $vendorDir . '/predis/predis/src/Command/Redis/PFADD.php', + 'Predis\\Command\\Redis\\PFCOUNT' => $vendorDir . '/predis/predis/src/Command/Redis/PFCOUNT.php', + 'Predis\\Command\\Redis\\PFMERGE' => $vendorDir . '/predis/predis/src/Command/Redis/PFMERGE.php', 'Predis\\Command\\Redis\\PING' => $vendorDir . '/predis/predis/src/Command/Redis/PING.php', 'Predis\\Command\\Redis\\PSETEX' => $vendorDir . '/predis/predis/src/Command/Redis/PSETEX.php', + 'Predis\\Command\\Redis\\PSUBSCRIBE' => $vendorDir . '/predis/predis/src/Command/Redis/PSUBSCRIBE.php', 'Predis\\Command\\Redis\\PTTL' => $vendorDir . '/predis/predis/src/Command/Redis/PTTL.php', 'Predis\\Command\\Redis\\PUBLISH' => $vendorDir . '/predis/predis/src/Command/Redis/PUBLISH.php', 'Predis\\Command\\Redis\\PUBSUB' => $vendorDir . '/predis/predis/src/Command/Redis/PUBSUB.php', + 'Predis\\Command\\Redis\\PUNSUBSCRIBE' => $vendorDir . '/predis/predis/src/Command/Redis/PUNSUBSCRIBE.php', 'Predis\\Command\\Redis\\QUIT' => $vendorDir . '/predis/predis/src/Command/Redis/QUIT.php', 'Predis\\Command\\Redis\\RANDOMKEY' => $vendorDir . '/predis/predis/src/Command/Redis/RANDOMKEY.php', 'Predis\\Command\\Redis\\RENAME' => $vendorDir . '/predis/predis/src/Command/Redis/RENAME.php', @@ -2522,7 +2528,9 @@ 'Predis\\Command\\Redis\\RESTORE' => $vendorDir . '/predis/predis/src/Command/Redis/RESTORE.php', 'Predis\\Command\\Redis\\RPOP' => $vendorDir . '/predis/predis/src/Command/Redis/RPOP.php', 'Predis\\Command\\Redis\\RPOPLPUSH' => $vendorDir . '/predis/predis/src/Command/Redis/RPOPLPUSH.php', + 'Predis\\Command\\Redis\\RPUSH' => $vendorDir . '/predis/predis/src/Command/Redis/RPUSH.php', 'Predis\\Command\\Redis\\RPUSHX' => $vendorDir . '/predis/predis/src/Command/Redis/RPUSHX.php', + 'Predis\\Command\\Redis\\SADD' => $vendorDir . '/predis/predis/src/Command/Redis/SADD.php', 'Predis\\Command\\Redis\\SAVE' => $vendorDir . '/predis/predis/src/Command/Redis/SAVE.php', 'Predis\\Command\\Redis\\SCAN' => $vendorDir . '/predis/predis/src/Command/Redis/SCAN.php', 'Predis\\Command\\Redis\\SCARD' => $vendorDir . '/predis/predis/src/Command/Redis/SCARD.php', @@ -2537,6 +2545,7 @@ 'Predis\\Command\\Redis\\SETNX' => $vendorDir . '/predis/predis/src/Command/Redis/SETNX.php', 'Predis\\Command\\Redis\\SETRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/SETRANGE.php', 'Predis\\Command\\Redis\\SHUTDOWN' => $vendorDir . '/predis/predis/src/Command/Redis/SHUTDOWN.php', + 'Predis\\Command\\Redis\\SINTER' => $vendorDir . '/predis/predis/src/Command/Redis/SINTER.php', 'Predis\\Command\\Redis\\SINTERCARD' => $vendorDir . '/predis/predis/src/Command/Redis/SINTERCARD.php', 'Predis\\Command\\Redis\\SINTERSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/SINTERSTORE.php', 'Predis\\Command\\Redis\\SISMEMBER' => $vendorDir . '/predis/predis/src/Command/Redis/SISMEMBER.php', @@ -2549,14 +2558,18 @@ 'Predis\\Command\\Redis\\SORT_RO' => $vendorDir . '/predis/predis/src/Command/Redis/SORT_RO.php', 'Predis\\Command\\Redis\\SPOP' => $vendorDir . '/predis/predis/src/Command/Redis/SPOP.php', 'Predis\\Command\\Redis\\SRANDMEMBER' => $vendorDir . '/predis/predis/src/Command/Redis/SRANDMEMBER.php', + 'Predis\\Command\\Redis\\SREM' => $vendorDir . '/predis/predis/src/Command/Redis/SREM.php', 'Predis\\Command\\Redis\\SSCAN' => $vendorDir . '/predis/predis/src/Command/Redis/SSCAN.php', 'Predis\\Command\\Redis\\STRLEN' => $vendorDir . '/predis/predis/src/Command/Redis/STRLEN.php', + 'Predis\\Command\\Redis\\SUBSCRIBE' => $vendorDir . '/predis/predis/src/Command/Redis/SUBSCRIBE.php', 'Predis\\Command\\Redis\\SUBSTR' => $vendorDir . '/predis/predis/src/Command/Redis/SUBSTR.php', + 'Predis\\Command\\Redis\\SUNION' => $vendorDir . '/predis/predis/src/Command/Redis/SUNION.php', 'Predis\\Command\\Redis\\SUNIONSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/SUNIONSTORE.php', 'Predis\\Command\\Redis\\TIME' => $vendorDir . '/predis/predis/src/Command/Redis/TIME.php', 'Predis\\Command\\Redis\\TOUCH' => $vendorDir . '/predis/predis/src/Command/Redis/TOUCH.php', 'Predis\\Command\\Redis\\TTL' => $vendorDir . '/predis/predis/src/Command/Redis/TTL.php', 'Predis\\Command\\Redis\\TYPE' => $vendorDir . '/predis/predis/src/Command/Redis/TYPE.php', + 'Predis\\Command\\Redis\\UNSUBSCRIBE' => $vendorDir . '/predis/predis/src/Command/Redis/UNSUBSCRIBE.php', 'Predis\\Command\\Redis\\UNWATCH' => $vendorDir . '/predis/predis/src/Command/Redis/UNWATCH.php', 'Predis\\Command\\Redis\\WATCH' => $vendorDir . '/predis/predis/src/Command/Redis/WATCH.php', 'Predis\\Command\\Redis\\XADD' => $vendorDir . '/predis/predis/src/Command/Redis/XADD.php', @@ -2585,6 +2598,7 @@ 'Predis\\Command\\Redis\\ZRANGEBYSCORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZRANGEBYSCORE.php', 'Predis\\Command\\Redis\\ZRANGESTORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZRANGESTORE.php', 'Predis\\Command\\Redis\\ZRANK' => $vendorDir . '/predis/predis/src/Command/Redis/ZRANK.php', + 'Predis\\Command\\Redis\\ZREM' => $vendorDir . '/predis/predis/src/Command/Redis/ZREM.php', 'Predis\\Command\\Redis\\ZREMRANGEBYLEX' => $vendorDir . '/predis/predis/src/Command/Redis/ZREMRANGEBYLEX.php', 'Predis\\Command\\Redis\\ZREMRANGEBYRANK' => $vendorDir . '/predis/predis/src/Command/Redis/ZREMRANGEBYRANK.php', 'Predis\\Command\\Redis\\ZREMRANGEBYSCORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZREMRANGEBYSCORE.php', @@ -2595,6 +2609,7 @@ 'Predis\\Command\\Redis\\ZSCAN' => $vendorDir . '/predis/predis/src/Command/Redis/ZSCAN.php', 'Predis\\Command\\Redis\\ZSCORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZSCORE.php', 'Predis\\Command\\Redis\\ZUNION' => $vendorDir . '/predis/predis/src/Command/Redis/ZUNION.php', + 'Predis\\Command\\Redis\\ZUNIONSTORE' => $vendorDir . '/predis/predis/src/Command/Redis/ZUNIONSTORE.php', 'Predis\\Command\\ScriptCommand' => $vendorDir . '/predis/predis/src/Command/ScriptCommand.php', 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\DeleteStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DeleteStrategy.php', 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\LoadStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/LoadStrategy.php', @@ -2728,6 +2743,14 @@ 'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php', 'Psr\\Http\\Message\\UriFactoryInterface' => $vendorDir . '/psr/http-factory/src/UriFactoryInterface.php', 'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php', + 'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/src/AbstractLogger.php', + 'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/src/InvalidArgumentException.php', + 'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/src/LogLevel.php', + 'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/src/LoggerAwareInterface.php', + 'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/src/LoggerAwareTrait.php', + 'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/src/LoggerInterface.php', + 'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/src/LoggerTrait.php', + 'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/src/NullLogger.php', 'Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php', 'Psr\\SimpleCache\\CacheInterface' => $vendorDir . '/psr/simple-cache/src/CacheInterface.php', 'Psr\\SimpleCache\\InvalidArgumentException' => $vendorDir . '/psr/simple-cache/src/InvalidArgumentException.php', @@ -2857,6 +2880,7 @@ 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => $vendorDir . '/symfony/console/Descriptor/DescriptorInterface.php', 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => $vendorDir . '/symfony/console/Descriptor/JsonDescriptor.php', 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => $vendorDir . '/symfony/console/Descriptor/MarkdownDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\ReStructuredTextDescriptor' => $vendorDir . '/symfony/console/Descriptor/ReStructuredTextDescriptor.php', 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => $vendorDir . '/symfony/console/Descriptor/TextDescriptor.php', 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => $vendorDir . '/symfony/console/Descriptor/XmlDescriptor.php', 'Symfony\\Component\\Console\\EventListener\\ErrorListener' => $vendorDir . '/symfony/console/EventListener/ErrorListener.php', @@ -2967,7 +2991,6 @@ 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => $vendorDir . '/symfony/event-dispatcher/EventSubscriberInterface.php', 'Symfony\\Component\\EventDispatcher\\GenericEvent' => $vendorDir . '/symfony/event-dispatcher/GenericEvent.php', 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ImmutableEventDispatcher.php', - 'Symfony\\Component\\EventDispatcher\\LegacyEventDispatcherProxy' => $vendorDir . '/symfony/event-dispatcher/LegacyEventDispatcherProxy.php', 'Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/ExceptionInterface.php', 'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => $vendorDir . '/symfony/filesystem/Exception/FileNotFoundException.php', 'Symfony\\Component\\Filesystem\\Exception\\IOException' => $vendorDir . '/symfony/filesystem/Exception/IOException.php', @@ -3090,6 +3113,7 @@ 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Proxy\\SessionHandlerProxy' => $vendorDir . '/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\SessionStorageFactoryInterface' => $vendorDir . '/symfony/http-foundation/Session/Storage/SessionStorageFactoryInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\SessionStorageInterface' => $vendorDir . '/symfony/http-foundation/Session/Storage/SessionStorageInterface.php', + 'Symfony\\Component\\HttpFoundation\\StreamedJsonResponse' => $vendorDir . '/symfony/http-foundation/StreamedJsonResponse.php', 'Symfony\\Component\\HttpFoundation\\StreamedResponse' => $vendorDir . '/symfony/http-foundation/StreamedResponse.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\RequestAttributeValueSame' => $vendorDir . '/symfony/http-foundation/Test/Constraint/RequestAttributeValueSame.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseCookieValueSame' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php', @@ -3103,8 +3127,15 @@ 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseStatusCodeSame' => $vendorDir . '/symfony/http-foundation/Test/Constraint/ResponseStatusCodeSame.php', 'Symfony\\Component\\HttpFoundation\\UrlHelper' => $vendorDir . '/symfony/http-foundation/UrlHelper.php', 'Symfony\\Component\\HttpKernel\\Attribute\\AsController' => $vendorDir . '/symfony/http-kernel/Attribute/AsController.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\AsTargetedValueResolver' => $vendorDir . '/symfony/http-kernel/Attribute/AsTargetedValueResolver.php', 'Symfony\\Component\\HttpKernel\\Attribute\\Cache' => $vendorDir . '/symfony/http-kernel/Attribute/Cache.php', 'Symfony\\Component\\HttpKernel\\Attribute\\MapDateTime' => $vendorDir . '/symfony/http-kernel/Attribute/MapDateTime.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\MapQueryParameter' => $vendorDir . '/symfony/http-kernel/Attribute/MapQueryParameter.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\MapQueryString' => $vendorDir . '/symfony/http-kernel/Attribute/MapQueryString.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\MapRequestPayload' => $vendorDir . '/symfony/http-kernel/Attribute/MapRequestPayload.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\ValueResolver' => $vendorDir . '/symfony/http-kernel/Attribute/ValueResolver.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\WithHttpStatus' => $vendorDir . '/symfony/http-kernel/Attribute/WithHttpStatus.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\WithLogLevel' => $vendorDir . '/symfony/http-kernel/Attribute/WithLogLevel.php', 'Symfony\\Component\\HttpKernel\\Bundle\\AbstractBundle' => $vendorDir . '/symfony/http-kernel/Bundle/AbstractBundle.php', 'Symfony\\Component\\HttpKernel\\Bundle\\Bundle' => $vendorDir . '/symfony/http-kernel/Bundle/Bundle.php', 'Symfony\\Component\\HttpKernel\\Bundle\\BundleExtension' => $vendorDir . '/symfony/http-kernel/Bundle/BundleExtension.php', @@ -3126,7 +3157,9 @@ 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\DateTimeValueResolver' => $vendorDir . '/symfony/http-kernel/Controller/ArgumentResolver/DateTimeValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\DefaultValueResolver' => $vendorDir . '/symfony/http-kernel/Controller/ArgumentResolver/DefaultValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\NotTaggedControllerValueResolver' => $vendorDir . '/symfony/http-kernel/Controller/ArgumentResolver/NotTaggedControllerValueResolver.php', + 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\QueryParameterValueResolver' => $vendorDir . '/symfony/http-kernel/Controller/ArgumentResolver/QueryParameterValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\RequestAttributeValueResolver' => $vendorDir . '/symfony/http-kernel/Controller/ArgumentResolver/RequestAttributeValueResolver.php', + 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\RequestPayloadValueResolver' => $vendorDir . '/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\RequestValueResolver' => $vendorDir . '/symfony/http-kernel/Controller/ArgumentResolver/RequestValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\ServiceValueResolver' => $vendorDir . '/symfony/http-kernel/Controller/ArgumentResolver/ServiceValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\SessionValueResolver' => $vendorDir . '/symfony/http-kernel/Controller/ArgumentResolver/SessionValueResolver.php', @@ -3155,6 +3188,7 @@ 'Symfony\\Component\\HttpKernel\\DataCollector\\RequestDataCollector' => $vendorDir . '/symfony/http-kernel/DataCollector/RequestDataCollector.php', 'Symfony\\Component\\HttpKernel\\DataCollector\\RouterDataCollector' => $vendorDir . '/symfony/http-kernel/DataCollector/RouterDataCollector.php', 'Symfony\\Component\\HttpKernel\\DataCollector\\TimeDataCollector' => $vendorDir . '/symfony/http-kernel/DataCollector/TimeDataCollector.php', + 'Symfony\\Component\\HttpKernel\\Debug\\ErrorHandlerConfigurator' => $vendorDir . '/symfony/http-kernel/Debug/ErrorHandlerConfigurator.php', 'Symfony\\Component\\HttpKernel\\Debug\\FileLinkFormatter' => $vendorDir . '/symfony/http-kernel/Debug/FileLinkFormatter.php', 'Symfony\\Component\\HttpKernel\\Debug\\TraceableEventDispatcher' => $vendorDir . '/symfony/http-kernel/Debug/TraceableEventDispatcher.php', 'Symfony\\Component\\HttpKernel\\DependencyInjection\\AddAnnotatedClassesToCachePass' => $vendorDir . '/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php', @@ -3211,6 +3245,7 @@ 'Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException' => $vendorDir . '/symfony/http-kernel/Exception/NotFoundHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\PreconditionFailedHttpException' => $vendorDir . '/symfony/http-kernel/Exception/PreconditionFailedHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\PreconditionRequiredHttpException' => $vendorDir . '/symfony/http-kernel/Exception/PreconditionRequiredHttpException.php', + 'Symfony\\Component\\HttpKernel\\Exception\\ResolverNotFoundException' => $vendorDir . '/symfony/http-kernel/Exception/ResolverNotFoundException.php', 'Symfony\\Component\\HttpKernel\\Exception\\ServiceUnavailableHttpException' => $vendorDir . '/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\TooManyRequestsHttpException' => $vendorDir . '/symfony/http-kernel/Exception/TooManyRequestsHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException' => $vendorDir . '/symfony/http-kernel/Exception/UnauthorizedHttpException.php', @@ -3401,7 +3436,6 @@ 'Symfony\\Component\\Routing\\Requirement\\Requirement' => $vendorDir . '/symfony/routing/Requirement/Requirement.php', 'Symfony\\Component\\Routing\\Route' => $vendorDir . '/symfony/routing/Route.php', 'Symfony\\Component\\Routing\\RouteCollection' => $vendorDir . '/symfony/routing/RouteCollection.php', - 'Symfony\\Component\\Routing\\RouteCollectionBuilder' => $vendorDir . '/symfony/routing/RouteCollectionBuilder.php', 'Symfony\\Component\\Routing\\RouteCompiler' => $vendorDir . '/symfony/routing/RouteCompiler.php', 'Symfony\\Component\\Routing\\RouteCompilerInterface' => $vendorDir . '/symfony/routing/RouteCompilerInterface.php', 'Symfony\\Component\\Routing\\Router' => $vendorDir . '/symfony/routing/Router.php', @@ -3545,6 +3579,7 @@ 'Symfony\\Component\\VarDumper\\Caster\\RedisCaster' => $vendorDir . '/symfony/var-dumper/Caster/RedisCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster' => $vendorDir . '/symfony/var-dumper/Caster/ReflectionCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster' => $vendorDir . '/symfony/var-dumper/Caster/ResourceCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ScalarStub' => $vendorDir . '/symfony/var-dumper/Caster/ScalarStub.php', 'Symfony\\Component\\VarDumper\\Caster\\SplCaster' => $vendorDir . '/symfony/var-dumper/Caster/SplCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\StubCaster' => $vendorDir . '/symfony/var-dumper/Caster/StubCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster' => $vendorDir . '/symfony/var-dumper/Caster/SymfonyCaster.php', @@ -3604,6 +3639,7 @@ 'Symfony\\Polyfill\\Php80\\Php80' => $vendorDir . '/symfony/polyfill-php80/Php80.php', 'Symfony\\Polyfill\\Php80\\PhpToken' => $vendorDir . '/symfony/polyfill-php80/PhpToken.php', 'Symfony\\Polyfill\\Php81\\Php81' => $vendorDir . '/symfony/polyfill-php81/Php81.php', + 'Symfony\\Polyfill\\Php83\\Php83' => $vendorDir . '/symfony/polyfill-php83/Php83.php', 'Termwind\\Actions\\StyleToMethod' => $vendorDir . '/nunomaduro/termwind/src/Actions/StyleToMethod.php', 'Termwind\\Components\\Anchor' => $vendorDir . '/nunomaduro/termwind/src/Components/Anchor.php', 'Termwind\\Components\\BreakLine' => $vendorDir . '/nunomaduro/termwind/src/Components/BreakLine.php', diff --git a/core/vendor/composer/autoload_files.php b/core/vendor/composer/autoload_files.php index 87ff9f281c..2bfc6893d1 100644 --- a/core/vendor/composer/autoload_files.php +++ b/core/vendor/composer/autoload_files.php @@ -12,6 +12,7 @@ 'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php', '72579e7bd17821bb1321b87411366eae' => $vendorDir . '/illuminate/support/helpers.php', '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', + '662a729f963d39afe703c9d9b7ab4a8c' => $vendorDir . '/symfony/polyfill-php83/bootstrap.php', '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php', diff --git a/core/vendor/composer/autoload_psr4.php b/core/vendor/composer/autoload_psr4.php index c60efb7e34..f92b172a31 100644 --- a/core/vendor/composer/autoload_psr4.php +++ b/core/vendor/composer/autoload_psr4.php @@ -11,6 +11,7 @@ 'Wikimedia\\Composer\\Merge\\V2\\' => array($vendorDir . '/wikimedia/composer-merge-plugin/src'), 'WebPConvert\\' => array($vendorDir . '/rosell-dk/webp-convert/src'), 'Termwind\\' => array($vendorDir . '/nunomaduro/termwind/src'), + 'Symfony\\Polyfill\\Php83\\' => array($vendorDir . '/symfony/polyfill-php83'), 'Symfony\\Polyfill\\Php81\\' => array($vendorDir . '/symfony/polyfill-php81'), 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), 'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'), @@ -43,7 +44,7 @@ 'React\\Promise\\' => array($vendorDir . '/react/promise/src'), 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), - 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), + 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'), 'Psr\\Http\\Client\\' => array($vendorDir . '/psr/http-client/src'), 'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), diff --git a/core/vendor/composer/autoload_real.php b/core/vendor/composer/autoload_real.php index f21ec93efa..06c7733ff7 100644 --- a/core/vendor/composer/autoload_real.php +++ b/core/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit08584f8f0eccca6c60577ced8376ce8c +class ComposerAutoloaderInitfacb702495127c53b6aa7bcb6294d866 { private static $loader; @@ -24,16 +24,16 @@ public static function getLoader() require __DIR__ . '/platform_check.php'; - spl_autoload_register(array('ComposerAutoloaderInit08584f8f0eccca6c60577ced8376ce8c', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInitfacb702495127c53b6aa7bcb6294d866', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); - spl_autoload_unregister(array('ComposerAutoloaderInit08584f8f0eccca6c60577ced8376ce8c', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInitfacb702495127c53b6aa7bcb6294d866', 'loadClassLoader')); require __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInitfacb702495127c53b6aa7bcb6294d866::getInitializer($loader)); $loader->register(true); - $filesToLoad = \Composer\Autoload\ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c::$files; + $filesToLoad = \Composer\Autoload\ComposerStaticInitfacb702495127c53b6aa7bcb6294d866::$files; $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; diff --git a/core/vendor/composer/autoload_static.php b/core/vendor/composer/autoload_static.php index 66f949c6f3..30fffafab2 100644 --- a/core/vendor/composer/autoload_static.php +++ b/core/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c +class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 { public static $files = array ( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', @@ -13,6 +13,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php', '72579e7bd17821bb1321b87411366eae' => __DIR__ . '/..' . '/illuminate/support/helpers.php', '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', + '662a729f963d39afe703c9d9b7ab4a8c' => __DIR__ . '/..' . '/symfony/polyfill-php83/bootstrap.php', '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php', 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', @@ -64,6 +65,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c ), 'S' => array ( + 'Symfony\\Polyfill\\Php83\\' => 23, 'Symfony\\Polyfill\\Php81\\' => 23, 'Symfony\\Polyfill\\Php80\\' => 23, 'Symfony\\Polyfill\\Php73\\' => 23, @@ -222,6 +224,10 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c array ( 0 => __DIR__ . '/..' . '/nunomaduro/termwind/src', ), + 'Symfony\\Polyfill\\Php83\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php83', + ), 'Symfony\\Polyfill\\Php81\\' => array ( 0 => __DIR__ . '/..' . '/symfony/polyfill-php81', @@ -352,8 +358,8 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c ), 'Psr\\Http\\Message\\' => array ( - 0 => __DIR__ . '/..' . '/psr/http-factory/src', - 1 => __DIR__ . '/..' . '/psr/http-message/src', + 0 => __DIR__ . '/..' . '/psr/http-message/src', + 1 => __DIR__ . '/..' . '/psr/http-factory/src', ), 'Psr\\Http\\Client\\' => array ( @@ -1471,32 +1477,6 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Egulias\\EmailValidator\\EmailLexer' => __DIR__ . '/..' . '/egulias/email-validator/src/EmailLexer.php', 'Egulias\\EmailValidator\\EmailParser' => __DIR__ . '/..' . '/egulias/email-validator/src/EmailParser.php', 'Egulias\\EmailValidator\\EmailValidator' => __DIR__ . '/..' . '/egulias/email-validator/src/EmailValidator.php', - 'Egulias\\EmailValidator\\Exception\\AtextAfterCFWS' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/AtextAfterCFWS.php', - 'Egulias\\EmailValidator\\Exception\\CRLFAtTheEnd' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/CRLFAtTheEnd.php', - 'Egulias\\EmailValidator\\Exception\\CRLFX2' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/CRLFX2.php', - 'Egulias\\EmailValidator\\Exception\\CRNoLF' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/CRNoLF.php', - 'Egulias\\EmailValidator\\Exception\\CharNotAllowed' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/CharNotAllowed.php', - 'Egulias\\EmailValidator\\Exception\\CommaInDomain' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/CommaInDomain.php', - 'Egulias\\EmailValidator\\Exception\\ConsecutiveAt' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ConsecutiveAt.php', - 'Egulias\\EmailValidator\\Exception\\ConsecutiveDot' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ConsecutiveDot.php', - 'Egulias\\EmailValidator\\Exception\\DomainAcceptsNoMail' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/DomainAcceptsNoMail.php', - 'Egulias\\EmailValidator\\Exception\\DomainHyphened' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/DomainHyphened.php', - 'Egulias\\EmailValidator\\Exception\\DotAtEnd' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/DotAtEnd.php', - 'Egulias\\EmailValidator\\Exception\\DotAtStart' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/DotAtStart.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingAT' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingAT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingATEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingATEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingCTEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingCTEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingDTEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingDTEXT.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingDomainLiteralClose' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingDomainLiteralClose.php', - 'Egulias\\EmailValidator\\Exception\\ExpectingQPair' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/ExpectingQPair.php', - 'Egulias\\EmailValidator\\Exception\\InvalidEmail' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/InvalidEmail.php', - 'Egulias\\EmailValidator\\Exception\\LocalOrReservedDomain' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/LocalOrReservedDomain.php', - 'Egulias\\EmailValidator\\Exception\\NoDNSRecord' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/NoDNSRecord.php', - 'Egulias\\EmailValidator\\Exception\\NoDomainPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/NoDomainPart.php', - 'Egulias\\EmailValidator\\Exception\\NoLocalPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/NoLocalPart.php', - 'Egulias\\EmailValidator\\Exception\\UnclosedComment' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/UnclosedComment.php', - 'Egulias\\EmailValidator\\Exception\\UnclosedQuotedString' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/UnclosedQuotedString.php', - 'Egulias\\EmailValidator\\Exception\\UnopenedComment' => __DIR__ . '/..' . '/egulias/email-validator/src/Exception/UnopenedComment.php', 'Egulias\\EmailValidator\\MessageIDParser' => __DIR__ . '/..' . '/egulias/email-validator/src/MessageIDParser.php', 'Egulias\\EmailValidator\\Parser' => __DIR__ . '/..' . '/egulias/email-validator/src/Parser.php', 'Egulias\\EmailValidator\\Parser\\Comment' => __DIR__ . '/..' . '/egulias/email-validator/src/Parser/Comment.php', @@ -1510,22 +1490,42 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Egulias\\EmailValidator\\Parser\\IDLeftPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Parser/IDLeftPart.php', 'Egulias\\EmailValidator\\Parser\\IDRightPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Parser/IDRightPart.php', 'Egulias\\EmailValidator\\Parser\\LocalPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Parser/LocalPart.php', - 'Egulias\\EmailValidator\\Parser\\Parser' => __DIR__ . '/..' . '/egulias/email-validator/src/Parser/Parser.php', 'Egulias\\EmailValidator\\Parser\\PartParser' => __DIR__ . '/..' . '/egulias/email-validator/src/Parser/PartParser.php', 'Egulias\\EmailValidator\\Result\\InvalidEmail' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/InvalidEmail.php', + 'Egulias\\EmailValidator\\Result\\MultipleErrors' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/MultipleErrors.php', 'Egulias\\EmailValidator\\Result\\Reason\\AtextAfterCFWS' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php', 'Egulias\\EmailValidator\\Result\\Reason\\CRLFAtTheEnd' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/CRLFAtTheEnd.php', + 'Egulias\\EmailValidator\\Result\\Reason\\CRLFX2' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/CRLFX2.php', + 'Egulias\\EmailValidator\\Result\\Reason\\CRNoLF' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/CRNoLF.php', 'Egulias\\EmailValidator\\Result\\Reason\\CharNotAllowed' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/CharNotAllowed.php', 'Egulias\\EmailValidator\\Result\\Reason\\CommaInDomain' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/CommaInDomain.php', 'Egulias\\EmailValidator\\Result\\Reason\\CommentsInIDRight' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/CommentsInIDRight.php', + 'Egulias\\EmailValidator\\Result\\Reason\\ConsecutiveAt' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/ConsecutiveAt.php', + 'Egulias\\EmailValidator\\Result\\Reason\\ConsecutiveDot' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/ConsecutiveDot.php', 'Egulias\\EmailValidator\\Result\\Reason\\DetailedReason' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/DetailedReason.php', 'Egulias\\EmailValidator\\Result\\Reason\\DomainAcceptsNoMail' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php', + 'Egulias\\EmailValidator\\Result\\Reason\\DomainHyphened' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/DomainHyphened.php', + 'Egulias\\EmailValidator\\Result\\Reason\\DomainTooLong' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/DomainTooLong.php', + 'Egulias\\EmailValidator\\Result\\Reason\\DotAtEnd' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/DotAtEnd.php', + 'Egulias\\EmailValidator\\Result\\Reason\\DotAtStart' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/DotAtStart.php', + 'Egulias\\EmailValidator\\Result\\Reason\\EmptyReason' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/EmptyReason.php', 'Egulias\\EmailValidator\\Result\\Reason\\ExceptionFound' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/ExceptionFound.php', + 'Egulias\\EmailValidator\\Result\\Reason\\ExpectingATEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php', + 'Egulias\\EmailValidator\\Result\\Reason\\ExpectingCTEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php', + 'Egulias\\EmailValidator\\Result\\Reason\\ExpectingDTEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/ExpectingDTEXT.php', 'Egulias\\EmailValidator\\Result\\Reason\\ExpectingDomainLiteralClose' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/ExpectingDomainLiteralClose.php', + 'Egulias\\EmailValidator\\Result\\Reason\\LabelTooLong' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/LabelTooLong.php', 'Egulias\\EmailValidator\\Result\\Reason\\LocalOrReservedDomain' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/LocalOrReservedDomain.php', 'Egulias\\EmailValidator\\Result\\Reason\\NoDNSRecord' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/NoDNSRecord.php', + 'Egulias\\EmailValidator\\Result\\Reason\\NoDomainPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/NoDomainPart.php', + 'Egulias\\EmailValidator\\Result\\Reason\\NoLocalPart' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/NoLocalPart.php', + 'Egulias\\EmailValidator\\Result\\Reason\\RFCWarnings' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/RFCWarnings.php', 'Egulias\\EmailValidator\\Result\\Reason\\Reason' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/Reason.php', + 'Egulias\\EmailValidator\\Result\\Reason\\SpoofEmail' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/SpoofEmail.php', 'Egulias\\EmailValidator\\Result\\Reason\\UnOpenedComment' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/UnOpenedComment.php', + 'Egulias\\EmailValidator\\Result\\Reason\\UnableToGetDNSRecord' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/UnableToGetDNSRecord.php', + 'Egulias\\EmailValidator\\Result\\Reason\\UnclosedComment' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/UnclosedComment.php', + 'Egulias\\EmailValidator\\Result\\Reason\\UnclosedQuotedString' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/UnclosedQuotedString.php', 'Egulias\\EmailValidator\\Result\\Reason\\UnusualElements' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Reason/UnusualElements.php', 'Egulias\\EmailValidator\\Result\\Result' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/Result.php', 'Egulias\\EmailValidator\\Result\\SpoofEmail' => __DIR__ . '/..' . '/egulias/email-validator/src/Result/SpoofEmail.php', @@ -1534,22 +1534,18 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Egulias\\EmailValidator\\Validation\\DNSGetRecordWrapper' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/DNSGetRecordWrapper.php', 'Egulias\\EmailValidator\\Validation\\DNSRecords' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/DNSRecords.php', 'Egulias\\EmailValidator\\Validation\\EmailValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/EmailValidation.php', - 'Egulias\\EmailValidator\\Validation\\Error\\RFCWarnings' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/Error/RFCWarnings.php', - 'Egulias\\EmailValidator\\Validation\\Error\\SpoofEmail' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/Error/SpoofEmail.php', 'Egulias\\EmailValidator\\Validation\\Exception\\EmptyValidationList' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php', + 'Egulias\\EmailValidator\\Validation\\Extra\\SpoofCheckValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/Extra/SpoofCheckValidation.php', 'Egulias\\EmailValidator\\Validation\\MessageIDValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/MessageIDValidation.php', - 'Egulias\\EmailValidator\\Validation\\MultipleErrors' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/MultipleErrors.php', 'Egulias\\EmailValidator\\Validation\\MultipleValidationWithAnd' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php', 'Egulias\\EmailValidator\\Validation\\NoRFCWarningsValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php', 'Egulias\\EmailValidator\\Validation\\RFCValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/RFCValidation.php', - 'Egulias\\EmailValidator\\Validation\\SpoofCheckValidation' => __DIR__ . '/..' . '/egulias/email-validator/src/Validation/SpoofCheckValidation.php', 'Egulias\\EmailValidator\\Warning\\AddressLiteral' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/AddressLiteral.php', 'Egulias\\EmailValidator\\Warning\\CFWSNearAt' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/CFWSNearAt.php', 'Egulias\\EmailValidator\\Warning\\CFWSWithFWS' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/CFWSWithFWS.php', 'Egulias\\EmailValidator\\Warning\\Comment' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/Comment.php', 'Egulias\\EmailValidator\\Warning\\DeprecatedComment' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/DeprecatedComment.php', 'Egulias\\EmailValidator\\Warning\\DomainLiteral' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/DomainLiteral.php', - 'Egulias\\EmailValidator\\Warning\\DomainTooLong' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/DomainTooLong.php', 'Egulias\\EmailValidator\\Warning\\EmailTooLong' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/EmailTooLong.php', 'Egulias\\EmailValidator\\Warning\\IPV6BadChar' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6BadChar.php', 'Egulias\\EmailValidator\\Warning\\IPV6ColonEnd' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6ColonEnd.php', @@ -1558,7 +1554,6 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Egulias\\EmailValidator\\Warning\\IPV6DoubleColon' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6DoubleColon.php', 'Egulias\\EmailValidator\\Warning\\IPV6GroupCount' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6GroupCount.php', 'Egulias\\EmailValidator\\Warning\\IPV6MaxGroups' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/IPV6MaxGroups.php', - 'Egulias\\EmailValidator\\Warning\\LabelTooLong' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/LabelTooLong.php', 'Egulias\\EmailValidator\\Warning\\LocalTooLong' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/LocalTooLong.php', 'Egulias\\EmailValidator\\Warning\\NoDNSMXRecord' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/NoDNSMXRecord.php', 'Egulias\\EmailValidator\\Warning\\ObsoleteDTEXT' => __DIR__ . '/..' . '/egulias/email-validator/src/Warning/ObsoleteDTEXT.php', @@ -3045,11 +3040,14 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\AbstractCommand\\BZPOPBase' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/AbstractCommand/BZPOPBase.php', 'Predis\\Command\\Redis\\BGREWRITEAOF' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BGREWRITEAOF.php', 'Predis\\Command\\Redis\\BGSAVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BGSAVE.php', + 'Predis\\Command\\Redis\\BITCOUNT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BITCOUNT.php', 'Predis\\Command\\Redis\\BITFIELD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BITFIELD.php', 'Predis\\Command\\Redis\\BITOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BITOP.php', + 'Predis\\Command\\Redis\\BITPOS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BITPOS.php', 'Predis\\Command\\Redis\\BLMOVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BLMOVE.php', 'Predis\\Command\\Redis\\BLMPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BLMPOP.php', 'Predis\\Command\\Redis\\BLPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BLPOP.php', + 'Predis\\Command\\Redis\\BRPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BRPOP.php', 'Predis\\Command\\Redis\\BRPOPLPUSH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BRPOPLPUSH.php', 'Predis\\Command\\Redis\\BZMPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BZMPOP.php', 'Predis\\Command\\Redis\\BZPOPMAX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BZPOPMAX.php', @@ -3065,6 +3063,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\DBSIZE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DBSIZE.php', 'Predis\\Command\\Redis\\DECR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DECR.php', 'Predis\\Command\\Redis\\DECRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DECRBY.php', + 'Predis\\Command\\Redis\\DEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DEL.php', 'Predis\\Command\\Redis\\DISCARD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DISCARD.php', 'Predis\\Command\\Redis\\DUMP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/DUMP.php', 'Predis\\Command\\Redis\\ECHO_' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ECHO_.php', @@ -3074,6 +3073,8 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\EVAL_RO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EVAL_RO.php', 'Predis\\Command\\Redis\\EXEC' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EXEC.php', 'Predis\\Command\\Redis\\EXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EXISTS.php', + 'Predis\\Command\\Redis\\EXPIRE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EXPIRE.php', + 'Predis\\Command\\Redis\\EXPIREAT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EXPIREAT.php', 'Predis\\Command\\Redis\\EXPIRETIME' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/EXPIRETIME.php', 'Predis\\Command\\Redis\\FAILOVER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FAILOVER.php', 'Predis\\Command\\Redis\\FCALL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FCALL.php', @@ -3085,6 +3086,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\GEOHASH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEOHASH.php', 'Predis\\Command\\Redis\\GEOPOS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEOPOS.php', 'Predis\\Command\\Redis\\GEORADIUS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEORADIUS.php', + 'Predis\\Command\\Redis\\GEORADIUSBYMEMBER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEORADIUSBYMEMBER.php', 'Predis\\Command\\Redis\\GEOSEARCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEOSEARCH.php', 'Predis\\Command\\Redis\\GEOSEARCHSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GEOSEARCHSTORE.php', 'Predis\\Command\\Redis\\GET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GET.php', @@ -3093,6 +3095,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\GETEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GETEX.php', 'Predis\\Command\\Redis\\GETRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GETRANGE.php', 'Predis\\Command\\Redis\\GETSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/GETSET.php', + 'Predis\\Command\\Redis\\HDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HDEL.php', 'Predis\\Command\\Redis\\HEXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HEXISTS.php', 'Predis\\Command\\Redis\\HGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HGET.php', 'Predis\\Command\\Redis\\HGETALL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HGETALL.php', @@ -3100,6 +3103,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\HINCRBYFLOAT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HINCRBYFLOAT.php', 'Predis\\Command\\Redis\\HKEYS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HKEYS.php', 'Predis\\Command\\Redis\\HLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HLEN.php', + 'Predis\\Command\\Redis\\HMGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HMGET.php', 'Predis\\Command\\Redis\\HMSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HMSET.php', 'Predis\\Command\\Redis\\HRANDFIELD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HRANDFIELD.php', 'Predis\\Command\\Redis\\HSCAN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/HSCAN.php', @@ -3110,6 +3114,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\INCR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/INCR.php', 'Predis\\Command\\Redis\\INCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/INCRBY.php', 'Predis\\Command\\Redis\\INCRBYFLOAT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/INCRBYFLOAT.php', + 'Predis\\Command\\Redis\\INFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/INFO.php', 'Predis\\Command\\Redis\\KEYS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/KEYS.php', 'Predis\\Command\\Redis\\LASTSAVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LASTSAVE.php', 'Predis\\Command\\Redis\\LCS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LCS.php', @@ -3119,11 +3124,13 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\LMOVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LMOVE.php', 'Predis\\Command\\Redis\\LMPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LMPOP.php', 'Predis\\Command\\Redis\\LPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LPOP.php', + 'Predis\\Command\\Redis\\LPUSH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LPUSH.php', 'Predis\\Command\\Redis\\LPUSHX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LPUSHX.php', 'Predis\\Command\\Redis\\LRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LRANGE.php', 'Predis\\Command\\Redis\\LREM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LREM.php', 'Predis\\Command\\Redis\\LSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LSET.php', 'Predis\\Command\\Redis\\LTRIM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/LTRIM.php', + 'Predis\\Command\\Redis\\MGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MGET.php', 'Predis\\Command\\Redis\\MIGRATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MIGRATE.php', 'Predis\\Command\\Redis\\MONITOR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MONITOR.php', 'Predis\\Command\\Redis\\MOVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/MOVE.php', @@ -3135,11 +3142,16 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\PEXPIRE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PEXPIRE.php', 'Predis\\Command\\Redis\\PEXPIREAT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PEXPIREAT.php', 'Predis\\Command\\Redis\\PEXPIRETIME' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PEXPIRETIME.php', + 'Predis\\Command\\Redis\\PFADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PFADD.php', + 'Predis\\Command\\Redis\\PFCOUNT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PFCOUNT.php', + 'Predis\\Command\\Redis\\PFMERGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PFMERGE.php', 'Predis\\Command\\Redis\\PING' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PING.php', 'Predis\\Command\\Redis\\PSETEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PSETEX.php', + 'Predis\\Command\\Redis\\PSUBSCRIBE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PSUBSCRIBE.php', 'Predis\\Command\\Redis\\PTTL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PTTL.php', 'Predis\\Command\\Redis\\PUBLISH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PUBLISH.php', 'Predis\\Command\\Redis\\PUBSUB' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PUBSUB.php', + 'Predis\\Command\\Redis\\PUNSUBSCRIBE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/PUNSUBSCRIBE.php', 'Predis\\Command\\Redis\\QUIT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/QUIT.php', 'Predis\\Command\\Redis\\RANDOMKEY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RANDOMKEY.php', 'Predis\\Command\\Redis\\RENAME' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RENAME.php', @@ -3147,7 +3159,9 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\RESTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RESTORE.php', 'Predis\\Command\\Redis\\RPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RPOP.php', 'Predis\\Command\\Redis\\RPOPLPUSH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RPOPLPUSH.php', + 'Predis\\Command\\Redis\\RPUSH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RPUSH.php', 'Predis\\Command\\Redis\\RPUSHX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/RPUSHX.php', + 'Predis\\Command\\Redis\\SADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SADD.php', 'Predis\\Command\\Redis\\SAVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SAVE.php', 'Predis\\Command\\Redis\\SCAN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SCAN.php', 'Predis\\Command\\Redis\\SCARD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SCARD.php', @@ -3162,6 +3176,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\SETNX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SETNX.php', 'Predis\\Command\\Redis\\SETRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SETRANGE.php', 'Predis\\Command\\Redis\\SHUTDOWN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SHUTDOWN.php', + 'Predis\\Command\\Redis\\SINTER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SINTER.php', 'Predis\\Command\\Redis\\SINTERCARD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SINTERCARD.php', 'Predis\\Command\\Redis\\SINTERSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SINTERSTORE.php', 'Predis\\Command\\Redis\\SISMEMBER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SISMEMBER.php', @@ -3174,14 +3189,18 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\SORT_RO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SORT_RO.php', 'Predis\\Command\\Redis\\SPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SPOP.php', 'Predis\\Command\\Redis\\SRANDMEMBER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SRANDMEMBER.php', + 'Predis\\Command\\Redis\\SREM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SREM.php', 'Predis\\Command\\Redis\\SSCAN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SSCAN.php', 'Predis\\Command\\Redis\\STRLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/STRLEN.php', + 'Predis\\Command\\Redis\\SUBSCRIBE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SUBSCRIBE.php', 'Predis\\Command\\Redis\\SUBSTR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SUBSTR.php', + 'Predis\\Command\\Redis\\SUNION' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SUNION.php', 'Predis\\Command\\Redis\\SUNIONSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/SUNIONSTORE.php', 'Predis\\Command\\Redis\\TIME' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TIME.php', 'Predis\\Command\\Redis\\TOUCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TOUCH.php', 'Predis\\Command\\Redis\\TTL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TTL.php', 'Predis\\Command\\Redis\\TYPE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TYPE.php', + 'Predis\\Command\\Redis\\UNSUBSCRIBE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/UNSUBSCRIBE.php', 'Predis\\Command\\Redis\\UNWATCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/UNWATCH.php', 'Predis\\Command\\Redis\\WATCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/WATCH.php', 'Predis\\Command\\Redis\\XADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XADD.php', @@ -3210,6 +3229,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\ZRANGEBYSCORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZRANGEBYSCORE.php', 'Predis\\Command\\Redis\\ZRANGESTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZRANGESTORE.php', 'Predis\\Command\\Redis\\ZRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZRANK.php', + 'Predis\\Command\\Redis\\ZREM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREM.php', 'Predis\\Command\\Redis\\ZREMRANGEBYLEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREMRANGEBYLEX.php', 'Predis\\Command\\Redis\\ZREMRANGEBYRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREMRANGEBYRANK.php', 'Predis\\Command\\Redis\\ZREMRANGEBYSCORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZREMRANGEBYSCORE.php', @@ -3220,6 +3240,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Predis\\Command\\Redis\\ZSCAN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZSCAN.php', 'Predis\\Command\\Redis\\ZSCORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZSCORE.php', 'Predis\\Command\\Redis\\ZUNION' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZUNION.php', + 'Predis\\Command\\Redis\\ZUNIONSTORE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ZUNIONSTORE.php', 'Predis\\Command\\ScriptCommand' => __DIR__ . '/..' . '/predis/predis/src/Command/ScriptCommand.php', 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\DeleteStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DeleteStrategy.php', 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\LoadStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/LoadStrategy.php', @@ -3353,6 +3374,14 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php', 'Psr\\Http\\Message\\UriFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UriFactoryInterface.php', 'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php', + 'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/src/AbstractLogger.php', + 'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/src/InvalidArgumentException.php', + 'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/src/LogLevel.php', + 'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/src/LoggerAwareInterface.php', + 'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/src/LoggerAwareTrait.php', + 'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/src/LoggerInterface.php', + 'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/src/LoggerTrait.php', + 'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/src/NullLogger.php', 'Psr\\SimpleCache\\CacheException' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheException.php', 'Psr\\SimpleCache\\CacheInterface' => __DIR__ . '/..' . '/psr/simple-cache/src/CacheInterface.php', 'Psr\\SimpleCache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/simple-cache/src/InvalidArgumentException.php', @@ -3482,6 +3511,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => __DIR__ . '/..' . '/symfony/console/Descriptor/DescriptorInterface.php', 'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/JsonDescriptor.php', 'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/MarkdownDescriptor.php', + 'Symfony\\Component\\Console\\Descriptor\\ReStructuredTextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/ReStructuredTextDescriptor.php', 'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/TextDescriptor.php', 'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => __DIR__ . '/..' . '/symfony/console/Descriptor/XmlDescriptor.php', 'Symfony\\Component\\Console\\EventListener\\ErrorListener' => __DIR__ . '/..' . '/symfony/console/EventListener/ErrorListener.php', @@ -3592,7 +3622,6 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => __DIR__ . '/..' . '/symfony/event-dispatcher/EventSubscriberInterface.php', 'Symfony\\Component\\EventDispatcher\\GenericEvent' => __DIR__ . '/..' . '/symfony/event-dispatcher/GenericEvent.php', 'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => __DIR__ . '/..' . '/symfony/event-dispatcher/ImmutableEventDispatcher.php', - 'Symfony\\Component\\EventDispatcher\\LegacyEventDispatcherProxy' => __DIR__ . '/..' . '/symfony/event-dispatcher/LegacyEventDispatcherProxy.php', 'Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/filesystem/Exception/ExceptionInterface.php', 'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/FileNotFoundException.php', 'Symfony\\Component\\Filesystem\\Exception\\IOException' => __DIR__ . '/..' . '/symfony/filesystem/Exception/IOException.php', @@ -3715,6 +3744,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\Proxy\\SessionHandlerProxy' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\SessionStorageFactoryInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/SessionStorageFactoryInterface.php', 'Symfony\\Component\\HttpFoundation\\Session\\Storage\\SessionStorageInterface' => __DIR__ . '/..' . '/symfony/http-foundation/Session/Storage/SessionStorageInterface.php', + 'Symfony\\Component\\HttpFoundation\\StreamedJsonResponse' => __DIR__ . '/..' . '/symfony/http-foundation/StreamedJsonResponse.php', 'Symfony\\Component\\HttpFoundation\\StreamedResponse' => __DIR__ . '/..' . '/symfony/http-foundation/StreamedResponse.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\RequestAttributeValueSame' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/RequestAttributeValueSame.php', 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseCookieValueSame' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php', @@ -3728,8 +3758,15 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Symfony\\Component\\HttpFoundation\\Test\\Constraint\\ResponseStatusCodeSame' => __DIR__ . '/..' . '/symfony/http-foundation/Test/Constraint/ResponseStatusCodeSame.php', 'Symfony\\Component\\HttpFoundation\\UrlHelper' => __DIR__ . '/..' . '/symfony/http-foundation/UrlHelper.php', 'Symfony\\Component\\HttpKernel\\Attribute\\AsController' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/AsController.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\AsTargetedValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/AsTargetedValueResolver.php', 'Symfony\\Component\\HttpKernel\\Attribute\\Cache' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/Cache.php', 'Symfony\\Component\\HttpKernel\\Attribute\\MapDateTime' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/MapDateTime.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\MapQueryParameter' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/MapQueryParameter.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\MapQueryString' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/MapQueryString.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\MapRequestPayload' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/MapRequestPayload.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\ValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/ValueResolver.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\WithHttpStatus' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/WithHttpStatus.php', + 'Symfony\\Component\\HttpKernel\\Attribute\\WithLogLevel' => __DIR__ . '/..' . '/symfony/http-kernel/Attribute/WithLogLevel.php', 'Symfony\\Component\\HttpKernel\\Bundle\\AbstractBundle' => __DIR__ . '/..' . '/symfony/http-kernel/Bundle/AbstractBundle.php', 'Symfony\\Component\\HttpKernel\\Bundle\\Bundle' => __DIR__ . '/..' . '/symfony/http-kernel/Bundle/Bundle.php', 'Symfony\\Component\\HttpKernel\\Bundle\\BundleExtension' => __DIR__ . '/..' . '/symfony/http-kernel/Bundle/BundleExtension.php', @@ -3751,7 +3788,9 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\DateTimeValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ArgumentResolver/DateTimeValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\DefaultValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ArgumentResolver/DefaultValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\NotTaggedControllerValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ArgumentResolver/NotTaggedControllerValueResolver.php', + 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\QueryParameterValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ArgumentResolver/QueryParameterValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\RequestAttributeValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ArgumentResolver/RequestAttributeValueResolver.php', + 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\RequestPayloadValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\RequestValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ArgumentResolver/RequestValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\ServiceValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ArgumentResolver/ServiceValueResolver.php', 'Symfony\\Component\\HttpKernel\\Controller\\ArgumentResolver\\SessionValueResolver' => __DIR__ . '/..' . '/symfony/http-kernel/Controller/ArgumentResolver/SessionValueResolver.php', @@ -3780,6 +3819,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Symfony\\Component\\HttpKernel\\DataCollector\\RequestDataCollector' => __DIR__ . '/..' . '/symfony/http-kernel/DataCollector/RequestDataCollector.php', 'Symfony\\Component\\HttpKernel\\DataCollector\\RouterDataCollector' => __DIR__ . '/..' . '/symfony/http-kernel/DataCollector/RouterDataCollector.php', 'Symfony\\Component\\HttpKernel\\DataCollector\\TimeDataCollector' => __DIR__ . '/..' . '/symfony/http-kernel/DataCollector/TimeDataCollector.php', + 'Symfony\\Component\\HttpKernel\\Debug\\ErrorHandlerConfigurator' => __DIR__ . '/..' . '/symfony/http-kernel/Debug/ErrorHandlerConfigurator.php', 'Symfony\\Component\\HttpKernel\\Debug\\FileLinkFormatter' => __DIR__ . '/..' . '/symfony/http-kernel/Debug/FileLinkFormatter.php', 'Symfony\\Component\\HttpKernel\\Debug\\TraceableEventDispatcher' => __DIR__ . '/..' . '/symfony/http-kernel/Debug/TraceableEventDispatcher.php', 'Symfony\\Component\\HttpKernel\\DependencyInjection\\AddAnnotatedClassesToCachePass' => __DIR__ . '/..' . '/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php', @@ -3836,6 +3876,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/NotFoundHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\PreconditionFailedHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/PreconditionFailedHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\PreconditionRequiredHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/PreconditionRequiredHttpException.php', + 'Symfony\\Component\\HttpKernel\\Exception\\ResolverNotFoundException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/ResolverNotFoundException.php', 'Symfony\\Component\\HttpKernel\\Exception\\ServiceUnavailableHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\TooManyRequestsHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/TooManyRequestsHttpException.php', 'Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException' => __DIR__ . '/..' . '/symfony/http-kernel/Exception/UnauthorizedHttpException.php', @@ -4026,7 +4067,6 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Symfony\\Component\\Routing\\Requirement\\Requirement' => __DIR__ . '/..' . '/symfony/routing/Requirement/Requirement.php', 'Symfony\\Component\\Routing\\Route' => __DIR__ . '/..' . '/symfony/routing/Route.php', 'Symfony\\Component\\Routing\\RouteCollection' => __DIR__ . '/..' . '/symfony/routing/RouteCollection.php', - 'Symfony\\Component\\Routing\\RouteCollectionBuilder' => __DIR__ . '/..' . '/symfony/routing/RouteCollectionBuilder.php', 'Symfony\\Component\\Routing\\RouteCompiler' => __DIR__ . '/..' . '/symfony/routing/RouteCompiler.php', 'Symfony\\Component\\Routing\\RouteCompilerInterface' => __DIR__ . '/..' . '/symfony/routing/RouteCompilerInterface.php', 'Symfony\\Component\\Routing\\Router' => __DIR__ . '/..' . '/symfony/routing/Router.php', @@ -4170,6 +4210,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Symfony\\Component\\VarDumper\\Caster\\RedisCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/RedisCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ReflectionCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ReflectionCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\ResourceCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ResourceCaster.php', + 'Symfony\\Component\\VarDumper\\Caster\\ScalarStub' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/ScalarStub.php', 'Symfony\\Component\\VarDumper\\Caster\\SplCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/SplCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\StubCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/StubCaster.php', 'Symfony\\Component\\VarDumper\\Caster\\SymfonyCaster' => __DIR__ . '/..' . '/symfony/var-dumper/Caster/SymfonyCaster.php', @@ -4229,6 +4270,7 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c 'Symfony\\Polyfill\\Php80\\Php80' => __DIR__ . '/..' . '/symfony/polyfill-php80/Php80.php', 'Symfony\\Polyfill\\Php80\\PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/PhpToken.php', 'Symfony\\Polyfill\\Php81\\Php81' => __DIR__ . '/..' . '/symfony/polyfill-php81/Php81.php', + 'Symfony\\Polyfill\\Php83\\Php83' => __DIR__ . '/..' . '/symfony/polyfill-php83/Php83.php', 'Termwind\\Actions\\StyleToMethod' => __DIR__ . '/..' . '/nunomaduro/termwind/src/Actions/StyleToMethod.php', 'Termwind\\Components\\Anchor' => __DIR__ . '/..' . '/nunomaduro/termwind/src/Components/Anchor.php', 'Termwind\\Components\\BreakLine' => __DIR__ . '/..' . '/nunomaduro/termwind/src/Components/BreakLine.php', @@ -4378,10 +4420,10 @@ class ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c::$prefixDirsPsr4; - $loader->prefixesPsr0 = ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c::$prefixesPsr0; - $loader->classMap = ComposerStaticInit08584f8f0eccca6c60577ced8376ce8c::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInitfacb702495127c53b6aa7bcb6294d866::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitfacb702495127c53b6aa7bcb6294d866::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInitfacb702495127c53b6aa7bcb6294d866::$prefixesPsr0; + $loader->classMap = ComposerStaticInitfacb702495127c53b6aa7bcb6294d866::$classMap; }, null, ClassLoader::class); } diff --git a/core/vendor/composer/composer/.gitattributes b/core/vendor/composer/composer/.gitattributes new file mode 100644 index 0000000000..a929b35288 --- /dev/null +++ b/core/vendor/composer/composer/.gitattributes @@ -0,0 +1,19 @@ +# Auto-detect text files, ensure they use LF. +* text=auto eol=lf + +# These files are always considered text and should use LF. +# See core.whitespace @ https://git-scm.com/docs/git-config for whitespace flags. +*.php text eol=lf whitespace=blank-at-eol,blank-at-eof,space-before-tab,tab-in-indent,tabwidth=4 diff=php +*.json text eol=lf whitespace=blank-at-eol,blank-at-eof,space-before-tab,tab-in-indent,tabwidth=4 +*.test text eol=lf whitespace=blank-at-eol,blank-at-eof,space-before-tab,tab-in-indent,tabwidth=4 +*.yml text eol=lf whitespace=blank-at-eol,blank-at-eof,space-before-tab,tab-in-indent,tabwidth=2 + +# Exclude non-essential files from dist +/tests export-ignore +.github export-ignore +.php_cs export-ignore +.travis.yml export-ignore +appveyor.yml export-ignore +phpunit.xml.dist export-ignore +/phpstan/* export-ignore +/phpstan/rules.neon -export-ignore \ No newline at end of file diff --git a/core/vendor/composer/composer/.gitignore b/core/vendor/composer/composer/.gitignore new file mode 100644 index 0000000000..3db374fdf3 --- /dev/null +++ b/core/vendor/composer/composer/.gitignore @@ -0,0 +1,12 @@ +/.settings +/.project +/.buildpath +/composer.phar +/vendor +/nbproject +.phpunit.result.cache +phpunit.xml +.vagrant +Vagrantfile +.idea +.php-cs-fixer.cache diff --git a/core/vendor/composer/composer/CHANGELOG.md b/core/vendor/composer/composer/CHANGELOG.md index 5a48af7ba3..2a96e5d37d 100644 --- a/core/vendor/composer/composer/CHANGELOG.md +++ b/core/vendor/composer/composer/CHANGELOG.md @@ -1,3 +1,19 @@ +### [2.5.7] 2023-05-24 + + * Fixed regression preventing autoloading the dependencies of metapackages when running --no-dev (#11481) + +### [2.5.6] 2023-05-24 + + * BC Warning: Installers and `InstallationManager::getInstallPath` will now return `null` instead of an empty string for metapackages' paths. This may have adverse effects on plugin code using this expecting always a string but it is unlikely (#11455) + * Fixed metapackages showing their install path as the root package's path instead of empty (#11455) + * Fixed lock file verification on `install` to deal better with `replace`/`provide` (#11475) + * Fixed lock file having a more recent modification time than the vendor dir when `require` guesses the constraint after resolution (#11405) + * Fixed numeric default branches with a `v` prefix being treated as non-numeric ones and receiving an alias like e.g. dev-main would (e51d755a08) + * Fixed binary proxies not being transparent when included by another PHP process and returning a value (#11454) + * Fixed support for plugin classes being marked as `readonly` (#11404) + * Fixed `getmypid` being required as it is not always available (#11401) + * Fixed authentication issue when downloading several files from private Bitbucket in parallel (#11464) + ### [2.5.5] 2023-03-21 * Fixed basic auth failures resulting in infinite retry loop (#11320) @@ -1708,6 +1724,8 @@ * Initial release +[2.5.7]: https://github.com/composer/composer/compare/2.5.6...2.5.7 +[2.5.6]: https://github.com/composer/composer/compare/2.5.5...2.5.6 [2.5.5]: https://github.com/composer/composer/compare/2.5.4...2.5.5 [2.5.4]: https://github.com/composer/composer/compare/2.5.3...2.5.4 [2.5.3]: https://github.com/composer/composer/compare/2.5.2...2.5.3 diff --git a/core/vendor/composer/composer/composer.lock b/core/vendor/composer/composer/composer.lock index ed8f2760ab..14527c2e44 100644 --- a/core/vendor/composer/composer/composer.lock +++ b/core/vendor/composer/composer/composer.lock @@ -692,23 +692,23 @@ }, { "name": "react/promise", - "version": "v2.9.0", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910" + "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910", - "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910", + "url": "https://api.github.com/repos/reactphp/promise/zipball/f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", + "reference": "f913fb8cceba1e6644b7b90c4bfb678ed8a3ef38", "shasum": "" }, "require": { "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36" + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.36" }, "type": "library", "autoload": { @@ -752,32 +752,28 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v2.9.0" + "source": "https://github.com/reactphp/promise/tree/v2.10.0" }, "funding": [ { - "url": "https://github.com/WyriHaximus", - "type": "github" - }, - { - "url": "https://github.com/clue", - "type": "github" + "url": "https://opencollective.com/reactphp", + "type": "open_collective" } ], - "time": "2022-02-11T10:27:51+00:00" + "time": "2023-05-02T15:15:43+00:00" }, { "name": "seld/jsonlint", - "version": "1.9.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "4211420d25eba80712bff236a98960ef68b866b7" + "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7", - "reference": "4211420d25eba80712bff236a98960ef68b866b7", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/594fd6462aad8ecee0b45ca5045acea4776667f1", + "reference": "594fd6462aad8ecee0b45ca5045acea4776667f1", "shasum": "" }, "require": { @@ -816,7 +812,7 @@ ], "support": { "issues": "https://github.com/Seldaek/jsonlint/issues", - "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0" + "source": "https://github.com/Seldaek/jsonlint/tree/1.10.0" }, "funding": [ { @@ -828,7 +824,7 @@ "type": "tidelift" } ], - "time": "2022-04-01T13:37:23+00:00" + "time": "2023-05-11T13:16:46+00:00" }, { "name": "seld/phar-utils", @@ -941,16 +937,16 @@ }, { "name": "symfony/console", - "version": "v5.4.21", + "version": "v5.4.23", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "c77433ddc6cdc689caf48065d9ea22ca0853fbd9" + "reference": "90f21e27d0d88ce38720556dd164d4a1e4c3934c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c77433ddc6cdc689caf48065d9ea22ca0853fbd9", - "reference": "c77433ddc6cdc689caf48065d9ea22ca0853fbd9", + "url": "https://api.github.com/repos/symfony/console/zipball/90f21e27d0d88ce38720556dd164d4a1e4c3934c", + "reference": "90f21e27d0d88ce38720556dd164d4a1e4c3934c", "shasum": "" }, "require": { @@ -1015,12 +1011,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.21" + "source": "https://github.com/symfony/console/tree/v5.4.23" }, "funding": [ { @@ -1036,7 +1032,7 @@ "type": "tidelift" } ], - "time": "2023-02-25T16:59:41+00:00" + "time": "2023-04-24T18:47:29+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1107,16 +1103,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.4.21", + "version": "v5.4.23", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "e75960b1bbfd2b8c9e483e0d74811d555ca3de9f" + "reference": "b2f79d86cd9e7de0fff6d03baa80eaed7a5f38b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e75960b1bbfd2b8c9e483e0d74811d555ca3de9f", - "reference": "e75960b1bbfd2b8c9e483e0d74811d555ca3de9f", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b2f79d86cd9e7de0fff6d03baa80eaed7a5f38b5", + "reference": "b2f79d86cd9e7de0fff6d03baa80eaed7a5f38b5", "shasum": "" }, "require": { @@ -1151,7 +1147,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.21" + "source": "https://github.com/symfony/filesystem/tree/v5.4.23" }, "funding": [ { @@ -1167,7 +1163,7 @@ "type": "tidelift" } ], - "time": "2023-02-14T08:03:56+00:00" + "time": "2023-03-02T11:38:35+00:00" }, { "name": "symfony/finder", @@ -1805,16 +1801,16 @@ }, { "name": "symfony/process", - "version": "v5.4.21", + "version": "v5.4.23", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "d4ce417ebcb0b7d090b4c178ed6d3accc518e8bd" + "reference": "4b842fc4b61609e0a155a114082bd94e31e98287" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d4ce417ebcb0b7d090b4c178ed6d3accc518e8bd", - "reference": "d4ce417ebcb0b7d090b4c178ed6d3accc518e8bd", + "url": "https://api.github.com/repos/symfony/process/zipball/4b842fc4b61609e0a155a114082bd94e31e98287", + "reference": "4b842fc4b61609e0a155a114082bd94e31e98287", "shasum": "" }, "require": { @@ -1847,7 +1843,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.21" + "source": "https://github.com/symfony/process/tree/v5.4.23" }, "funding": [ { @@ -1863,7 +1859,7 @@ "type": "tidelift" } ], - "time": "2023-02-21T19:46:44+00:00" + "time": "2023-04-18T13:50:24+00:00" }, { "name": "symfony/service-contracts", @@ -1950,16 +1946,16 @@ }, { "name": "symfony/string", - "version": "v5.4.21", + "version": "v5.4.22", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f" + "reference": "8036a4c76c0dd29e60b6a7cafcacc50cf088ea62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/edac10d167b78b1d90f46a80320d632de0bd9f2f", - "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f", + "url": "https://api.github.com/repos/symfony/string/zipball/8036a4c76c0dd29e60b6a7cafcacc50cf088ea62", + "reference": "8036a4c76c0dd29e60b6a7cafcacc50cf088ea62", "shasum": "" }, "require": { @@ -2016,7 +2012,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.4.21" + "source": "https://github.com/symfony/string/tree/v5.4.22" }, "funding": [ { @@ -2032,22 +2028,22 @@ "type": "tidelift" } ], - "time": "2023-02-22T08:00:55+00:00" + "time": "2023-03-14T06:11:53+00:00" } ], "packages-dev": [ { "name": "phpstan/phpstan", - "version": "1.10.7", + "version": "1.10.15", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "b10ceb526d9607903c5b2673f1fc8775dbe48975" + "reference": "762c4dac4da6f8756eebb80e528c3a47855da9bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b10ceb526d9607903c5b2673f1fc8775dbe48975", - "reference": "b10ceb526d9607903c5b2673f1fc8775dbe48975", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/762c4dac4da6f8756eebb80e528c3a47855da9bd", + "reference": "762c4dac4da6f8756eebb80e528c3a47855da9bd", "shasum": "" }, "require": { @@ -2096,7 +2092,7 @@ "type": "tidelift" } ], - "time": "2023-03-16T15:24:20+00:00" + "time": "2023-05-09T15:28:01+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", @@ -2148,16 +2144,16 @@ }, { "name": "phpstan/phpstan-phpunit", - "version": "1.3.10", + "version": "1.3.12", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "4cc5c6cc38e56bce7ea47c4091814e516d172dc3" + "reference": "c44246879d692d3b2cf2a21d65be4b4715d6ef21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/4cc5c6cc38e56bce7ea47c4091814e516d172dc3", - "reference": "4cc5c6cc38e56bce7ea47c4091814e516d172dc3", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/c44246879d692d3b2cf2a21d65be4b4715d6ef21", + "reference": "c44246879d692d3b2cf2a21d65be4b4715d6ef21", "shasum": "" }, "require": { @@ -2194,22 +2190,22 @@ "description": "PHPUnit extensions and rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.3.10" + "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.3.12" }, - "time": "2023-03-02T10:25:13+00:00" + "time": "2023-05-23T11:58:47+00:00" }, { "name": "phpstan/phpstan-strict-rules", - "version": "1.5.0", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "b7dd96a5503919a43b3cd06a2dced9d4252492f2" + "reference": "b21c03d4f6f3a446e4311155f4be9d65048218e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/b7dd96a5503919a43b3cd06a2dced9d4252492f2", - "reference": "b7dd96a5503919a43b3cd06a2dced9d4252492f2", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/b21c03d4f6f3a446e4311155f4be9d65048218e6", + "reference": "b21c03d4f6f3a446e4311155f4be9d65048218e6", "shasum": "" }, "require": { @@ -2243,28 +2239,28 @@ "description": "Extra strict and opinionated rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.0" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.1" }, - "time": "2023-02-21T10:17:10+00:00" + "time": "2023-03-29T14:47:40+00:00" }, { "name": "phpstan/phpstan-symfony", - "version": "1.2.23", + "version": "1.3.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-symfony.git", - "reference": "8a8d0538ca943b20beda7e9799e14fb3683262d4" + "reference": "7332b90dfc291ac5b4b83fbca2081936faa1e3f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/8a8d0538ca943b20beda7e9799e14fb3683262d4", - "reference": "8a8d0538ca943b20beda7e9799e14fb3683262d4", + "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/7332b90dfc291ac5b4b83fbca2081936faa1e3f9", + "reference": "7332b90dfc291ac5b4b83fbca2081936faa1e3f9", "shasum": "" }, "require": { "ext-simplexml": "*", "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.9.4" + "phpstan/phpstan": "^1.9.18" }, "conflict": { "symfony/framework-bundle": "<3.0" @@ -2274,7 +2270,7 @@ "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/phpstan-phpunit": "^1.0", "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "^8.5.29 || ^9.5", "psr/container": "1.0 || 1.1.1", "symfony/config": "^5.4 || ^6.1", "symfony/console": "^5.4 || ^6.1", @@ -2314,22 +2310,22 @@ "description": "Symfony Framework extensions and rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-symfony/issues", - "source": "https://github.com/phpstan/phpstan-symfony/tree/1.2.23" + "source": "https://github.com/phpstan/phpstan-symfony/tree/1.3.2" }, - "time": "2023-02-06T10:42:02+00:00" + "time": "2023-05-16T12:46:15+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v6.2.7", + "version": "v6.2.10", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "56965fae0b6b8d271015990eff5240ffff02e185" + "reference": "552950db2919421ad917e29e76d1999a2a31a8e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/56965fae0b6b8d271015990eff5240ffff02e185", - "reference": "56965fae0b6b8d271015990eff5240ffff02e185", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/552950db2919421ad917e29e76d1999a2a31a8e3", + "reference": "552950db2919421ad917e29e76d1999a2a31a8e3", "shasum": "" }, "require": { @@ -2383,7 +2379,7 @@ "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.7" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.10" }, "funding": [ { @@ -2399,7 +2395,7 @@ "type": "tidelift" } ], - "time": "2023-02-16T09:57:23+00:00" + "time": "2023-04-18T13:46:08+00:00" } ], "aliases": [], diff --git a/core/vendor/composer/composer/doc/articles/custom-installers.md b/core/vendor/composer/composer/doc/articles/custom-installers.md index 6e2ad86703..28d1212971 100644 --- a/core/vendor/composer/composer/doc/articles/custom-installers.md +++ b/core/vendor/composer/composer/doc/articles/custom-installers.md @@ -157,9 +157,8 @@ source for the exact signature): invoked with the update argument. * **uninstall()**, here you can determine the actions that need to be executed when the package needs to be removed. -* **getInstallPath()**, this method should return the location where the - package is to be installed, _relative from the location of composer.json._ - The path _must not end with a slash._ +* **getInstallPath()**, this method should return the absolute path where the + package is to be installed. The path _must not end with a slash._ Example: diff --git a/core/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php b/core/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php index a16e6b67b6..c7ab9ca1fe 100644 --- a/core/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php +++ b/core/vendor/composer/composer/src/Composer/Autoload/AutoloadGenerator.php @@ -473,7 +473,7 @@ private function buildExclusionRegex(string $dir, ?array $excluded): ?string /** * @param PackageInterface[] $packages - * @return array + * @return non-empty-array */ public function buildPackageMap(InstallationManager $installationManager, PackageInterface $rootPackage, array $packages) { @@ -485,7 +485,6 @@ public function buildPackageMap(InstallationManager $installationManager, Packag continue; } $this->validatePackage($package); - $packageMap[] = [ $package, $installationManager->getInstallPath($package), @@ -519,7 +518,7 @@ protected function validatePackage(PackageInterface $package) /** * Compiles an ordered list of namespace => path mappings * - * @param array $packageMap array of array(package, installDir-relative-to-composer.json) + * @param non-empty-array $packageMap array of array(package, installDir-relative-to-composer.json or null for metapackages) * @param RootPackageInterface $rootPackage root package instance * @param bool|string[] $filteredDevPackages If an array, the list of packages that must be removed. If bool, whether to filter out require-dev packages * @return array @@ -609,7 +608,7 @@ public function createLoader(array $autoloads, ?string $vendorDir = null) } /** - * @param array $packageMap + * @param array $packageMap * @return ?string */ protected function getIncludePathsFile(array $packageMap, Filesystem $filesystem, string $basePath, string $vendorPath, string $vendorPathCode, string $appBaseDirCode) @@ -619,6 +618,11 @@ protected function getIncludePathsFile(array $packageMap, Filesystem $filesystem foreach ($packageMap as $item) { [$package, $installPath] = $item; + // packages that are not installed cannot autoload anything + if (null === $installPath) { + continue; + } + if (null !== $package->getTargetDir() && strlen($package->getTargetDir()) > 0) { $installPath = substr($installPath, 0, -strlen('/'.$package->getTargetDir())); } @@ -712,7 +716,7 @@ protected function getPathCode(Filesystem $filesystem, string $basePath, string } /** - * @param array $packageMap + * @param array $packageMap * @param bool|'php-only' $checkPlatform * @param string[] $devPackageNames * @return ?string @@ -1145,7 +1149,7 @@ public static function getInitializer(ClassLoader \$loader) } /** - * @param array $packageMap + * @param array $packageMap * @param string $type one of: 'psr-0'|'psr-4'|'classmap'|'files' * @return array|array>|array */ @@ -1156,6 +1160,11 @@ protected function parseAutoloadsType(array $packageMap, string $type, RootPacka foreach ($packageMap as $item) { [$package, $installPath] = $item; + // packages that are not installed cannot autoload anything + if (null === $installPath) { + continue; + } + $autoload = $package->getAutoload(); if ($this->devMode && $package === $rootPackage) { $autoload = array_merge_recursive($autoload, $package->getDevAutoload()); @@ -1245,10 +1254,8 @@ protected function getFileIdentifier(PackageInterface $package, string $path) /** * Filters out dev-dependencies * - * @param array $packageMap - * @return array - * - * @phpstan-param array $packageMap + * @param array $packageMap + * @return array */ protected function filterPackageMap(array $packageMap, RootPackageInterface $rootPackage) { @@ -1301,8 +1308,8 @@ static function ($item) use ($include): bool { * * Packages of equal weight are sorted alphabetically * - * @param array $packageMap - * @return array + * @param array $packageMap + * @return array */ protected function sortPackageMap(array $packageMap) { diff --git a/core/vendor/composer/composer/src/Composer/Command/RequireCommand.php b/core/vendor/composer/composer/src/Composer/Command/RequireCommand.php index 0ef69066a8..90ca115b0e 100644 --- a/core/vendor/composer/composer/src/Composer/Command/RequireCommand.php +++ b/core/vendor/composer/composer/src/Composer/Command/RequireCommand.php @@ -551,10 +551,15 @@ private function updateRequirementsAfterResolution(array $requirementsToUpdate, if (false === $contents) { throw new \RuntimeException('Unable to read '.$this->json->getPath().' contents to update the lock file hash.'); } - $lock = new JsonFile(Factory::getLockFile($this->json->getPath())); + $lockFile = Factory::getLockFile($this->json->getPath()); + $lockMtime = filemtime($lockFile); + $lock = new JsonFile($lockFile); $lockData = $lock->read(); $lockData['content-hash'] = Locker::getContentHash($contents); $lock->write($lockData); + if (is_int($lockMtime)) { + @touch($lockFile, $lockMtime); + } } } diff --git a/core/vendor/composer/composer/src/Composer/Command/ShowCommand.php b/core/vendor/composer/composer/src/Composer/Command/ShowCommand.php index 5c07b4605d..d7bd2c75a7 100644 --- a/core/vendor/composer/composer/src/Composer/Command/ShowCommand.php +++ b/core/vendor/composer/composer/src/Composer/Command/ShowCommand.php @@ -332,7 +332,12 @@ protected function execute(InputInterface $input, OutputInterface $output) } if ($input->getOption('path')) { $io->write($package->getName(), false); - $io->write(' ' . strtok(realpath($composer->getInstallationManager()->getInstallPath($package)), "\r\n")); + $path = $composer->getInstallationManager()->getInstallPath($package); + if (is_string($path)) { + $io->write(' ' . strtok(realpath($path), "\r\n")); + } else { + $io->write(' null'); + } return $exitCode; } @@ -509,7 +514,12 @@ protected function execute(InputInterface $input, OutputInterface $output) $packageViewData['description'] = $package->getDescription(); } if ($writePath) { - $packageViewData['path'] = strtok(realpath($composer->getInstallationManager()->getInstallPath($package)), "\r\n"); + $path = $composer->getInstallationManager()->getInstallPath($package); + if (is_string($path)) { + $packageViewData['path'] = strtok(realpath($path), "\r\n"); + } else { + $packageViewData['path'] = null; + } } $packageIsAbandoned = false; @@ -635,7 +645,7 @@ protected function execute(InputInterface $input, OutputInterface $output) } /** - * @param array $packages + * @param array $packages */ private function printPackages(IOInterface $io, array $packages, string $indent, bool $writeVersion, bool $writeLatest, bool $writeDescription, int $width, int $versionLength, int $nameLength, int $latestLength): void { @@ -669,8 +679,8 @@ private function printPackages(IOInterface $io, array $packages, string $indent, } $io->write(' ' . $description, false); } - if (isset($package['path'])) { - $io->write(' ' . $package['path'], false); + if (array_key_exists('path', $package)) { + $io->write(' '.(is_string($package['path']) ? $package['path'] : 'null'), false); } $io->write(''); if (isset($package['warning'])) { @@ -802,7 +812,12 @@ protected function printMeta(CompletePackageInterface $package, array $versions, $io->write('source : ' . sprintf('[%s] %s %s', $package->getSourceType(), $package->getSourceUrl(), $package->getSourceReference())); $io->write('dist : ' . sprintf('[%s] %s %s', $package->getDistType(), $package->getDistUrl(), $package->getDistReference())); if ($installedRepo->hasPackage($package)) { - $io->write('path : ' . sprintf('%s', realpath($this->requireComposer()->getInstallationManager()->getInstallPath($package)))); + $path = $this->requireComposer()->getInstallationManager()->getInstallPath($package); + if (is_string($path)) { + $io->write('path : ' . realpath($path)); + } else { + $io->write('path : null'); + } } $io->write('names : ' . implode(', ', $package->getNames())); @@ -958,9 +973,14 @@ protected function printPackageInfoAsJson(CompletePackageInterface $package, arr } if ($installedRepo->hasPackage($package)) { - $path = realpath($this->requireComposer()->getInstallationManager()->getInstallPath($package)); - if ($path !== false) { - $json['path'] = $path; + $path = $this->requireComposer()->getInstallationManager()->getInstallPath($package); + if (is_string($path)) { + $path = realpath($path); + if ($path !== false) { + $json['path'] = $path; + } + } else { + $json['path'] = null; } } diff --git a/core/vendor/composer/composer/src/Composer/Command/StatusCommand.php b/core/vendor/composer/composer/src/Composer/Command/StatusCommand.php index 42c20fcefd..780f70031a 100644 --- a/core/vendor/composer/composer/src/Composer/Command/StatusCommand.php +++ b/core/vendor/composer/composer/src/Composer/Command/StatusCommand.php @@ -99,6 +99,9 @@ private function doExecute(InputInterface $input): int foreach ($installedRepo->getCanonicalPackages() as $package) { $downloader = $dm->getDownloaderForPackage($package); $targetDir = $im->getInstallPath($package); + if ($targetDir === null) { + continue; + } if ($downloader instanceof ChangeReportInterface) { if (is_link($targetDir)) { diff --git a/core/vendor/composer/composer/src/Composer/Command/ValidateCommand.php b/core/vendor/composer/composer/src/Composer/Command/ValidateCommand.php index 92ff158afc..a5d1e9c460 100644 --- a/core/vendor/composer/composer/src/Composer/Command/ValidateCommand.php +++ b/core/vendor/composer/composer/src/Composer/Command/ValidateCommand.php @@ -112,6 +112,9 @@ protected function execute(InputInterface $input, OutputInterface $output): int $localRepo = $composer->getRepositoryManager()->getLocalRepository(); foreach ($localRepo->getPackages() as $package) { $path = $composer->getInstallationManager()->getInstallPath($package); + if (null === $path) { + continue; + } $file = $path . '/composer.json'; if (is_dir($path) && file_exists($file)) { [$errors, $publishErrors, $warnings] = $validator->validate($file, $checkAll, $checkVersion); diff --git a/core/vendor/composer/composer/src/Composer/Composer.php b/core/vendor/composer/composer/src/Composer/Composer.php index 195e9e43cb..0f69d35e16 100644 --- a/core/vendor/composer/composer/src/Composer/Composer.php +++ b/core/vendor/composer/composer/src/Composer/Composer.php @@ -51,9 +51,9 @@ class Composer extends PartialComposer * * @see getVersion() */ - public const VERSION = '2.5.5'; + public const VERSION = '2.5.7'; public const BRANCH_ALIAS_VERSION = ''; - public const RELEASE_DATE = '2023-03-21 11:50:05'; + public const RELEASE_DATE = '2023-05-24 15:00:39'; public const SOURCE_VERSION = ''; /** diff --git a/core/vendor/composer/composer/src/Composer/Console/Application.php b/core/vendor/composer/composer/src/Composer/Console/Application.php index 9e585e614d..01a2497b77 100644 --- a/core/vendor/composer/composer/src/Composer/Console/Application.php +++ b/core/vendor/composer/composer/src/Composer/Console/Application.php @@ -339,7 +339,8 @@ function_exists('php_uname') ? php_uname('s') . ' / ' . php_uname('r') : 'Unknow // Check system temp folder for usability as it can cause weird runtime issues otherwise Silencer::call(static function () use ($io): void { - $tempfile = sys_get_temp_dir() . '/temp-' . getmypid() . '-' . md5(microtime()); + $pid = function_exists('getmypid') ? getmypid() . '-' : ''; + $tempfile = sys_get_temp_dir() . '/temp-' . $pid . md5(microtime()); if (!(file_put_contents($tempfile, __FILE__) && (file_get_contents($tempfile) === __FILE__) && unlink($tempfile) && !file_exists($tempfile))) { $io->writeError(sprintf('PHP temp directory (%s) does not exist or is not writable to Composer. Set sys_temp_dir in your php.ini', sys_get_temp_dir())); } diff --git a/core/vendor/composer/composer/src/Composer/Installer/BinaryInstaller.php b/core/vendor/composer/composer/src/Composer/Installer/BinaryInstaller.php index 827c8178c7..ba50fe17f5 100644 --- a/core/vendor/composer/composer/src/Composer/Installer/BinaryInstaller.php +++ b/core/vendor/composer/composer/src/Composer/Installer/BinaryInstaller.php @@ -337,8 +337,7 @@ public function url_stat(\$path, \$flags) (function_exists('stream_get_wrappers') && in_array('phpvfscomposer', stream_get_wrappers(), true)) || (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) ) { - include("phpvfscomposer://" . $binPathExported); - exit(0); + return include("phpvfscomposer://" . $binPathExported); } } @@ -360,7 +359,7 @@ public function url_stat(\$path, \$flags) $globalsCode $streamProxyCode -include $binPathExported; +return include $binPathExported; PROXY; } diff --git a/core/vendor/composer/composer/src/Composer/Installer/InstallationManager.php b/core/vendor/composer/composer/src/Composer/Installer/InstallationManager.php index 0fcd462a10..d171139e9d 100644 --- a/core/vendor/composer/composer/src/Composer/Installer/InstallationManager.php +++ b/core/vendor/composer/composer/src/Composer/Installer/InstallationManager.php @@ -549,9 +549,9 @@ public function markAliasUninstalled(InstalledRepositoryInterface $repo, MarkAli /** * Returns the installation path of a package * - * @return string path + * @return string|null absolute path to install to, which does not end with a slash, or null if the package does not have anything installed on disk */ - public function getInstallPath(PackageInterface $package): string + public function getInstallPath(PackageInterface $package): ?string { $installer = $this->getInstaller($package->getType()); diff --git a/core/vendor/composer/composer/src/Composer/Installer/InstallerInterface.php b/core/vendor/composer/composer/src/Composer/Installer/InstallerInterface.php index bfa73e18d6..bdf42ec422 100644 --- a/core/vendor/composer/composer/src/Composer/Installer/InstallerInterface.php +++ b/core/vendor/composer/composer/src/Composer/Installer/InstallerInterface.php @@ -112,7 +112,7 @@ public function cleanup(string $type, PackageInterface $package, ?PackageInterfa /** * Returns the absolute installation path of a package. * - * @return string absolute path to install to, which MUST not end with a slash + * @return string|null absolute path to install to, which MUST not end with a slash, or null if the package does not have anything installed on disk */ public function getInstallPath(PackageInterface $package); } diff --git a/core/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php b/core/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php index 8fa39bf1e2..d87c6e3dc1 100644 --- a/core/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php +++ b/core/vendor/composer/composer/src/Composer/Installer/LibraryInstaller.php @@ -227,6 +227,8 @@ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $ /** * @inheritDoc + * + * @return string */ public function getInstallPath(PackageInterface $package) { diff --git a/core/vendor/composer/composer/src/Composer/Installer/MetapackageInstaller.php b/core/vendor/composer/composer/src/Composer/Installer/MetapackageInstaller.php index 952993e58c..f61a537fbe 100644 --- a/core/vendor/composer/composer/src/Composer/Installer/MetapackageInstaller.php +++ b/core/vendor/composer/composer/src/Composer/Installer/MetapackageInstaller.php @@ -124,9 +124,11 @@ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $ /** * @inheritDoc + * + * @return null */ public function getInstallPath(PackageInterface $package) { - return ''; + return null; } } diff --git a/core/vendor/composer/composer/src/Composer/Installer/ProjectInstaller.php b/core/vendor/composer/composer/src/Composer/Installer/ProjectInstaller.php index 3ee3aceafc..ccf439bfac 100644 --- a/core/vendor/composer/composer/src/Composer/Installer/ProjectInstaller.php +++ b/core/vendor/composer/composer/src/Composer/Installer/ProjectInstaller.php @@ -115,7 +115,7 @@ public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $ /** * Returns the installation path of a package * - * @return string path + * @return string configured install path */ public function getInstallPath(PackageInterface $package): string { diff --git a/core/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php b/core/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php index d33f1bc3f7..b3dc113d00 100644 --- a/core/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php +++ b/core/vendor/composer/composer/src/Composer/Package/Loader/ArrayLoader.php @@ -455,7 +455,7 @@ public function getBranchAlias(array $config): ?string if ( isset($config['default-branch']) && $config['default-branch'] === true - && false === $this->versionParser->parseNumericAliasPrefix($config['version']) + && false === $this->versionParser->parseNumericAliasPrefix(Preg::replace('{^v}', '', $config['version'])) ) { return VersionParser::DEFAULT_BRANCH_ALIAS; } diff --git a/core/vendor/composer/composer/src/Composer/Package/Locker.php b/core/vendor/composer/composer/src/Composer/Package/Locker.php index c589470143..e03b6bd6ae 100644 --- a/core/vendor/composer/composer/src/Composer/Package/Locker.php +++ b/core/vendor/composer/composer/src/Composer/Package/Locker.php @@ -18,6 +18,7 @@ use Composer\Repository\InstalledRepository; use Composer\Repository\LockArrayRepository; use Composer\Repository\PlatformRepository; +use Composer\Repository\RootPackageRepository; use Composer\Util\ProcessExecutor; use Composer\Package\Dumper\ArrayDumper; use Composer\Package\Loader\ArrayLoader; @@ -473,7 +474,11 @@ private function getPackageTime(PackageInterface $package): ?string return null; } - $path = realpath($this->installationManager->getInstallPath($package)); + $path = $this->installationManager->getInstallPath($package); + if ($path === null) { + return null; + } + $path = realpath($path); $sourceType = $package->getSourceType(); $datetime = null; @@ -510,9 +515,10 @@ public function getMissingRequirementInfo(RootPackageInterface $package, bool $i if ($includeDev === true) { $sets[] = ['repo' => $this->getLockedRepository(true), 'method' => 'getDevRequires', 'description' => 'Required (in require-dev)']; } + $rootRepo = new RootPackageRepository($package); foreach ($sets as $set) { - $installedRepo = new InstalledRepository([$set['repo']]); + $installedRepo = new InstalledRepository([$set['repo'], $rootRepo]); foreach (call_user_func([$package, $set['method']]) as $link) { if (PlatformRepository::isPlatformPackage($link->getTarget())) { @@ -523,9 +529,21 @@ public function getMissingRequirementInfo(RootPackageInterface $package, bool $i } if ($installedRepo->findPackagesWithReplacersAndProviders($link->getTarget(), $link->getConstraint()) === []) { $results = $installedRepo->findPackagesWithReplacersAndProviders($link->getTarget()); + if ($results !== []) { $provider = reset($results); - $missingRequirementInfo[] = '- ' . $set['description'].' package "' . $link->getTarget() . '" is in the lock file as "'.$provider->getPrettyVersion().'" but that does not satisfy your constraint "'.$link->getPrettyConstraint().'".'; + $description = $provider->getPrettyVersion(); + if ($provider->getName() !== $link->getTarget()) { + foreach (['getReplaces' => 'replaced as %s by %s', 'getProvides' => 'provided as %s by %s'] as $method => $text) { + foreach (call_user_func([$provider, $method]) as $providerLink) { + if ($providerLink->getTarget() === $link->getTarget()) { + $description = sprintf($text, $providerLink->getPrettyConstraint(), $provider->getPrettyName().' '.$provider->getPrettyVersion()); + break 2; + } + } + } + } + $missingRequirementInfo[] = '- ' . $set['description'].' package "' . $link->getTarget() . '" is in the lock file as "'.$description.'" but that does not satisfy your constraint "'.$link->getPrettyConstraint().'".'; } else { $missingRequirementInfo[] = '- ' . $set['description'].' package "' . $link->getTarget() . '" is not present in the lock file.'; } diff --git a/core/vendor/composer/composer/src/Composer/Plugin/PluginManager.php b/core/vendor/composer/composer/src/Composer/Plugin/PluginManager.php index 14eb40211b..731a5aba03 100644 --- a/core/vendor/composer/composer/src/Composer/Plugin/PluginManager.php +++ b/core/vendor/composer/composer/src/Composer/Plugin/PluginManager.php @@ -236,8 +236,11 @@ public function registerPackage(PackageInterface $package, bool $failOnMissingCl continue; } - $downloadPath = $this->getInstallPath($autoloadPackage, $globalRepo && $globalRepo->hasPackage($autoloadPackage)); - $autoloads[] = [$autoloadPackage, $downloadPath]; + $installPath = $this->getInstallPath($autoloadPackage, $globalRepo && $globalRepo->hasPackage($autoloadPackage)); + if ($installPath === null) { + continue; + } + $autoloads[] = [$autoloadPackage, $installPath]; } $map = $generator->parseAutoloads($autoloads, $rootPackage); @@ -264,7 +267,7 @@ public function registerPackage(PackageInterface $package, bool $failOnMissingCl if ($separatorPos) { $className = substr($class, $separatorPos + 1); } - $code = Preg::replace('{^((?:final\s+)?(?:\s*))class\s+('.preg_quote($className).')}mi', '$1class $2_composer_tmp'.self::$classCounter, $code, 1); + $code = Preg::replace('{^((?:(?:final|readonly)\s+)*(?:\s*))class\s+('.preg_quote($className).')}mi', '$1class $2_composer_tmp'.self::$classCounter, $code, 1); $code = strtr($code, [ '__FILE__' => var_export($path, true), '__DIR__' => var_export(dirname($path), true), @@ -524,9 +527,9 @@ private function collectDependencies(InstalledRepository $installedRepo, array $ * * @param bool $global Whether this is a global package * - * @return string Install path + * @return string|null Install path */ - private function getInstallPath(PackageInterface $package, bool $global = false): string + private function getInstallPath(PackageInterface $package, bool $global = false): ?string { if (!$global) { return $this->composer->getInstallationManager()->getInstallPath($package); diff --git a/core/vendor/composer/composer/src/Composer/Util/AuthHelper.php b/core/vendor/composer/composer/src/Composer/Util/AuthHelper.php index ec3476670d..3f03126023 100644 --- a/core/vendor/composer/composer/src/Composer/Util/AuthHelper.php +++ b/core/vendor/composer/composer/src/Composer/Util/AuthHelper.php @@ -28,6 +28,8 @@ class AuthHelper protected $config; /** @var array Map of origins to message displayed */ private $displayedOriginAuthentications = []; + /** @var array Map of URLs and whether they already retried with authentication from Bitbucket */ + private $bitbucketRetry = []; public function __construct(IOInterface $io, Config $config) { @@ -164,6 +166,12 @@ public function promptAuthIfNeeded(string $url, string $origin, int $statusCode, $this->io->setAuthentication($origin, 'x-token-auth', $accessToken); $askForOAuthToken = false; } + } elseif (!isset($this->bitbucketRetry[$url])) { + // when multiple requests fire at the same time, they will all fail and the first one resets the token to be correct above but then the others + // reach the code path and without this fallback they would end up throwing below + // see https://github.com/composer/composer/pull/11464 for more details + $askForOAuthToken = false; + $this->bitbucketRetry[$url] = true; } else { throw new TransportException('Could not authenticate against ' . $origin, 401); } diff --git a/core/vendor/composer/composer/src/Composer/Util/Platform.php b/core/vendor/composer/composer/src/Composer/Util/Platform.php index 2d0c89d886..3c971d1052 100644 --- a/core/vendor/composer/composer/src/Composer/Util/Platform.php +++ b/core/vendor/composer/composer/src/Composer/Util/Platform.php @@ -148,7 +148,7 @@ public static function isWindowsSubsystemForLinux(): bool if ( !ini_get('open_basedir') && is_readable('/proc/version') - && false !== stripos(Silencer::call('file_get_contents', '/proc/version'), 'microsoft') + && false !== stripos((string)Silencer::call('file_get_contents', '/proc/version'), 'microsoft') && !file_exists('/.dockerenv') // docker running inside WSL should not be seen as WSL ) { return self::$isWindowsSubsystemForLinux = true; diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json index 7e4077861a..93c1f1edf8 100644 --- a/core/vendor/composer/installed.json +++ b/core/vendor/composer/installed.json @@ -215,17 +215,17 @@ }, { "name": "composer/composer", - "version": "2.5.5", - "version_normalized": "2.5.5.0", + "version": "2.5.7", + "version_normalized": "2.5.7.0", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "c7cffaad16a60636a776017eac5bd8cd0095c32f" + "reference": "d477018d3f2ebd76dede3d3988a0b1a7add4d81e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/c7cffaad16a60636a776017eac5bd8cd0095c32f", - "reference": "c7cffaad16a60636a776017eac5bd8cd0095c32f", + "url": "https://api.github.com/repos/composer/composer/zipball/d477018d3f2ebd76dede3d3988a0b1a7add4d81e", + "reference": "d477018d3f2ebd76dede3d3988a0b1a7add4d81e", "shasum": "" }, "require": { @@ -264,7 +264,7 @@ "ext-zip": "Enabling the zip extension allows you to unzip archives", "ext-zlib": "Allow gzip compression of HTTP requests" }, - "time": "2023-03-21T10:50:05+00:00", + "time": "2023-05-24T13:00:40+00:00", "bin": [ "bin/composer" ], @@ -311,7 +311,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/composer/issues", - "source": "https://github.com/composer/composer/tree/2.5.5" + "source": "https://github.com/composer/composer/tree/2.5.7" }, "funding": [ { @@ -963,17 +963,17 @@ }, { "name": "doctrine/deprecations", - "version": "v1.0.0", - "version_normalized": "1.0.0.0", + "version": "v1.1.0", + "version_normalized": "1.1.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + "reference": "8cffffb2218e01f3b370bf763e00e81697725259" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/8cffffb2218e01f3b370bf763e00e81697725259", + "reference": "8cffffb2218e01f3b370bf763e00e81697725259", "shasum": "" }, "require": { @@ -987,7 +987,7 @@ "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, - "time": "2022-05-02T15:47:09+00:00", + "time": "2023-05-29T18:55:17+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1003,7 +1003,7 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + "source": "https://github.com/doctrine/deprecations/tree/v1.1.0" }, "install-path": "../doctrine/deprecations" }, @@ -2042,8 +2042,8 @@ }, { "name": "illuminate/bus", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/bus.git", @@ -2098,17 +2098,17 @@ }, { "name": "illuminate/cache", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/cache.git", - "reference": "f53cc686722653a409e2f12ca37a45166999d40f" + "reference": "8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/cache/zipball/f53cc686722653a409e2f12ca37a45166999d40f", - "reference": "f53cc686722653a409e2f12ca37a45166999d40f", + "url": "https://api.github.com/repos/illuminate/cache/zipball/8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72", + "reference": "8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72", "shasum": "" }, "require": { @@ -2130,7 +2130,7 @@ "illuminate/redis": "Required to use the redis cache driver (^10.0).", "symfony/cache": "Required to use PSR-6 cache bridge (^6.2)." }, - "time": "2023-05-22T14:14:21+00:00", + "time": "2023-05-24T13:58:54+00:00", "type": "library", "extra": { "branch-alias": { @@ -2163,17 +2163,17 @@ }, { "name": "illuminate/collections", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "4f3810082e70780547c48d803c2d315e566df6a5" + "reference": "73652e915e56531e08c06bd356d8fa8bc346812e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/4f3810082e70780547c48d803c2d315e566df6a5", - "reference": "4f3810082e70780547c48d803c2d315e566df6a5", + "url": "https://api.github.com/repos/illuminate/collections/zipball/73652e915e56531e08c06bd356d8fa8bc346812e", + "reference": "73652e915e56531e08c06bd356d8fa8bc346812e", "shasum": "" }, "require": { @@ -2185,7 +2185,7 @@ "suggest": { "symfony/var-dumper": "Required to use the dump method (^6.2)." }, - "time": "2023-05-09T18:53:34+00:00", + "time": "2023-05-24T17:26:41+00:00", "type": "library", "extra": { "branch-alias": { @@ -2221,8 +2221,8 @@ }, { "name": "illuminate/conditionable", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", @@ -2321,17 +2321,17 @@ }, { "name": "illuminate/console", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/console.git", - "reference": "6459d31a841fbc71033b1c6af97871085a45c8b0" + "reference": "ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/console/zipball/6459d31a841fbc71033b1c6af97871085a45c8b0", - "reference": "6459d31a841fbc71033b1c6af97871085a45c8b0", + "url": "https://api.github.com/repos/illuminate/console/zipball/ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339", + "reference": "ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339", "shasum": "" }, "require": { @@ -2355,7 +2355,7 @@ "illuminate/filesystem": "Required to use the generator command (^10.0).", "illuminate/queue": "Required to use closures for scheduled jobs (^10.0)." }, - "time": "2023-05-09T13:08:05+00:00", + "time": "2023-05-23T18:03:05+00:00", "type": "library", "extra": { "branch-alias": { @@ -2388,8 +2388,8 @@ }, { "name": "illuminate/container", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/container.git", @@ -2442,8 +2442,8 @@ }, { "name": "illuminate/contracts", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", @@ -2493,17 +2493,17 @@ }, { "name": "illuminate/database", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/database.git", - "reference": "cd8e990181f3f2df752c6419f90588f65f010004" + "reference": "5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/database/zipball/cd8e990181f3f2df752c6419f90588f65f010004", - "reference": "cd8e990181f3f2df752c6419f90588f65f010004", + "url": "https://api.github.com/repos/illuminate/database/zipball/5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4", + "reference": "5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4", "shasum": "" }, "require": { @@ -2526,7 +2526,7 @@ "illuminate/pagination": "Required to paginate the result set (^10.0).", "symfony/finder": "Required to use Eloquent model factories (^6.2)." }, - "time": "2023-05-23T17:43:24+00:00", + "time": "2023-05-29T15:22:45+00:00", "type": "library", "extra": { "branch-alias": { @@ -2565,8 +2565,8 @@ }, { "name": "illuminate/events", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/events.git", @@ -2623,8 +2623,8 @@ }, { "name": "illuminate/filesystem", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/filesystem.git", @@ -2690,8 +2690,8 @@ }, { "name": "illuminate/http", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/http.git", @@ -2753,8 +2753,8 @@ }, { "name": "illuminate/log", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/log.git", @@ -2805,8 +2805,8 @@ }, { "name": "illuminate/macroable", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", @@ -2854,8 +2854,8 @@ }, { "name": "illuminate/pagination", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/pagination.git", @@ -2907,8 +2907,8 @@ }, { "name": "illuminate/pipeline", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/pipeline.git", @@ -2958,8 +2958,8 @@ }, { "name": "illuminate/redis", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/redis.git", @@ -3015,17 +3015,17 @@ }, { "name": "illuminate/routing", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/routing.git", - "reference": "d563283c8f10d326804dcc701f9de70fd9ab4e3e" + "reference": "62e17faf9f9f4bb80f00c32599b630f5fcd257d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/routing/zipball/d563283c8f10d326804dcc701f9de70fd9ab4e3e", - "reference": "d563283c8f10d326804dcc701f9de70fd9ab4e3e", + "url": "https://api.github.com/repos/illuminate/routing/zipball/62e17faf9f9f4bb80f00c32599b630f5fcd257d7", + "reference": "62e17faf9f9f4bb80f00c32599b630f5fcd257d7", "shasum": "" }, "require": { @@ -3049,7 +3049,7 @@ "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." }, - "time": "2023-05-22T14:14:21+00:00", + "time": "2023-05-23T18:17:17+00:00", "type": "library", "extra": { "branch-alias": { @@ -3082,8 +3082,8 @@ }, { "name": "illuminate/session", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/session.git", @@ -3142,17 +3142,17 @@ }, { "name": "illuminate/support", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "2ec8978cc9eda6848389fa623018603ef920067b" + "reference": "679edd76b4ba656c3d4ee2dbf53e99e31a73448b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/2ec8978cc9eda6848389fa623018603ef920067b", - "reference": "2ec8978cc9eda6848389fa623018603ef920067b", + "url": "https://api.github.com/repos/illuminate/support/zipball/679edd76b4ba656c3d4ee2dbf53e99e31a73448b", + "reference": "679edd76b4ba656c3d4ee2dbf53e99e31a73448b", "shasum": "" }, "require": { @@ -3180,7 +3180,7 @@ "symfony/var-dumper": "Required to use the dd function (^6.2).", "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." }, - "time": "2023-05-23T17:29:20+00:00", + "time": "2023-05-26T14:41:26+00:00", "type": "library", "extra": { "branch-alias": { @@ -3216,8 +3216,8 @@ }, { "name": "illuminate/translation", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/translation.git", @@ -3270,17 +3270,17 @@ }, { "name": "illuminate/validation", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/validation.git", - "reference": "9e62010e23c66f1239e9331d1a10b063b8e88527" + "reference": "86e252487c170fb88cdb72f74aee1a8d187d377a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/validation/zipball/9e62010e23c66f1239e9331d1a10b063b8e88527", - "reference": "9e62010e23c66f1239e9331d1a10b063b8e88527", + "url": "https://api.github.com/repos/illuminate/validation/zipball/86e252487c170fb88cdb72f74aee1a8d187d377a", + "reference": "86e252487c170fb88cdb72f74aee1a8d187d377a", "shasum": "" }, "require": { @@ -3301,7 +3301,7 @@ "suggest": { "illuminate/database": "Required to use the database presence verifier (^10.0)." }, - "time": "2023-05-01T16:07:12+00:00", + "time": "2023-05-29T06:27:01+00:00", "type": "library", "extra": { "branch-alias": { @@ -3334,17 +3334,17 @@ }, { "name": "illuminate/view", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.13.0", + "version_normalized": "10.13.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/view.git", - "reference": "aebc2fa44b2366e87652d550ceb9871183dd7422" + "reference": "acf034c30db23debb797a94641a43780aeecd6c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/view/zipball/aebc2fa44b2366e87652d550ceb9871183dd7422", - "reference": "aebc2fa44b2366e87652d550ceb9871183dd7422", + "url": "https://api.github.com/repos/illuminate/view/zipball/acf034c30db23debb797a94641a43780aeecd6c1", + "reference": "acf034c30db23debb797a94641a43780aeecd6c1", "shasum": "" }, "require": { @@ -3358,7 +3358,7 @@ "illuminate/support": "^10.0", "php": "^8.1" }, - "time": "2023-05-12T19:36:39+00:00", + "time": "2023-05-30T14:18:22+00:00", "type": "library", "extra": { "branch-alias": { @@ -3784,17 +3784,17 @@ }, { "name": "nesbot/carbon", - "version": "2.66.0", - "version_normalized": "2.66.0.0", + "version": "2.67.0", + "version_normalized": "2.67.0.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "496712849902241f04902033b0441b269effe001" + "reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", - "reference": "496712849902241f04902033b0441b269effe001", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/c1001b3bc75039b07f38a79db5237c4c529e04c8", + "reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8", "shasum": "" }, "require": { @@ -3817,7 +3817,7 @@ "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.4" }, - "time": "2023-01-29T18:53:47+00:00", + "time": "2023-05-25T22:09:47+00:00", "bin": [ "bin/carbon" ], @@ -4764,12 +4764,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "2d9146bd69addfbd99652930a825c8ba7b8ea13c" + "reference": "d40baa1c4204055d04a5a9b5ad39c95b189ef889" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/2d9146bd69addfbd99652930a825c8ba7b8ea13c", - "reference": "2d9146bd69addfbd99652930a825c8ba7b8ea13c", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/d40baa1c4204055d04a5a9b5ad39c95b189ef889", + "reference": "d40baa1c4204055d04a5a9b5ad39c95b189ef889", "shasum": "" }, "conflict": { @@ -4845,7 +4845,7 @@ "contao/core-bundle": "<4.9.40|>=4.10,<4.11.7|>=4.13,<4.13.21|>=5.1,<5.1.4|= 4.10.0", "contao/listing-bundle": ">=4,<4.4.8", "contao/managed-edition": "<=1.5", - "craftcms/cms": "<=3.8.3|>=4,<4.4.6|>= 4.0.0-RC1, < 4.3.7|>= 4.0.0-RC1, < 4.2.1", + "craftcms/cms": ">= 4.0.0-RC1, <= 4.4.5|>= 4.0.0-RC1, <= 4.4.6|<=3.8.5|>=4,<4.4.6|>= 4.0.0-RC1, < 4.4.6|>= 4.0.0-RC1, < 4.3.7|>= 4.0.0-RC1, < 4.2.1", "croogo/croogo": "<3.0.7", "cuyz/valinor": "<0.12", "czproject/git-php": "<4.0.3", @@ -4865,7 +4865,7 @@ "doctrine/mongodb-odm": ">=1,<1.0.2", "doctrine/mongodb-odm-bundle": ">=2,<3.0.1", "doctrine/orm": ">=2,<2.4.8|>=2.5,<2.5.1|>=2.8.3,<2.8.4", - "dolibarr/dolibarr": "<16|>=16.0.1,<16.0.3|= 12.0.5|>= 3.3.beta1, < 13.0.2", + "dolibarr/dolibarr": "<17.0.1|= 12.0.5|>= 3.3.beta1, < 13.0.2", "dompdf/dompdf": "<2.0.2|= 2.0.2", "drupal/core": ">=7,<7.96|>=8,<9.4.14|>=9.5,<9.5.8|>=10,<10.0.8", "drupal/drupal": ">=7,<7.80|>=8,<8.9.16|>=9,<9.1.12|>=9.2,<9.2.4", @@ -5328,7 +5328,7 @@ "zfr/zfr-oauth2-server-module": "<0.1.2", "zoujingli/thinkadmin": "<6.0.22" }, - "time": "2023-05-22T21:04:18+00:00", + "time": "2023-05-30T21:04:11+00:00", "type": "metapackage", "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6115,24 +6115,24 @@ }, { "name": "symfony/console", - "version": "v6.2.10", - "version_normalized": "6.2.10.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "12288d9f4500f84a4d02254d4aa968b15488476f" + "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/12288d9f4500f84a4d02254d4aa968b15488476f", - "reference": "12288d9f4500f84a4d02254d4aa968b15488476f", + "url": "https://api.github.com/repos/symfony/console/zipball/8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7", + "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/string": "^5.4|^6.0" }, "conflict": { @@ -6154,13 +6154,7 @@ "symfony/process": "^5.4|^6.0", "symfony/var-dumper": "^5.4|^6.0" }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "time": "2023-04-28T13:37:43+00:00", + "time": "2023-05-29T12:49:39+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6194,7 +6188,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.2.10" + "source": "https://github.com/symfony/console/tree/v6.3.0" }, "funding": [ { @@ -6214,27 +6208,27 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.2.1", - "version_normalized": "3.2.1.0", + "version": "v3.3.0", + "version_normalized": "3.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", - "reference": "e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { "php": ">=8.1" }, - "time": "2023-03-01T10:25:55+00:00", + "time": "2023-05-23T14:45:45+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -6264,7 +6258,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" }, "funding": [ { @@ -6284,17 +6278,17 @@ }, { "name": "symfony/error-handler", - "version": "v6.2.10", - "version_normalized": "6.2.10.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "8b7e9f124640cb0611624a9383176c3e5f7d8cfb" + "reference": "99d2d814a6351461af350ead4d963bd67451236f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/8b7e9f124640cb0611624a9383176c3e5f7d8cfb", - "reference": "8b7e9f124640cb0611624a9383176c3e5f7d8cfb", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/99d2d814a6351461af350ead4d963bd67451236f", + "reference": "99d2d814a6351461af350ead4d963bd67451236f", "shasum": "" }, "require": { @@ -6302,12 +6296,15 @@ "psr/log": "^1|^2|^3", "symfony/var-dumper": "^5.4|^6.0" }, + "conflict": { + "symfony/deprecation-contracts": "<2.5" + }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^5.4|^6.0", "symfony/serializer": "^5.4|^6.0" }, - "time": "2023-04-18T13:46:08+00:00", + "time": "2023-05-10T12:03:13+00:00", "bin": [ "Resources/bin/patch-type-declarations" ], @@ -6338,7 +6335,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.2.10" + "source": "https://github.com/symfony/error-handler/tree/v6.3.0" }, "funding": [ { @@ -6358,25 +6355,26 @@ }, { "name": "symfony/event-dispatcher", - "version": "v6.2.8", - "version_normalized": "6.2.8.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339" + "reference": "3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/04046f35fd7d72f9646e721fc2ecb8f9c67d3339", - "reference": "04046f35fd7d72f9646e721fc2ecb8f9c67d3339", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa", + "reference": "3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", @@ -6389,14 +6387,10 @@ "symfony/error-handler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/stopwatch": "^5.4|^6.0" }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "time": "2023-03-20T16:06:02+00:00", + "time": "2023-04-21T14:41:17+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6424,7 +6418,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.8" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.0" }, "funding": [ { @@ -6444,31 +6438,28 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.2.1", - "version_normalized": "3.2.1.0", + "version": "v3.3.0", + "version_normalized": "3.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd" + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", - "reference": "0ad3b6f1e4e2da5690fefe075cd53a238646d8dd", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "shasum": "" }, "require": { "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "time": "2023-03-01T10:32:47+00:00", + "time": "2023-05-23T14:45:45+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -6506,7 +6497,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" }, "funding": [ { @@ -6526,17 +6517,17 @@ }, { "name": "symfony/filesystem", - "version": "v6.2.10", - "version_normalized": "6.2.10.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "fd588debf7d1bc16a2c84b4b3b71145d9946b894" + "reference": "97b698e1d77d356304def77a8d0cd73090b359ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/fd588debf7d1bc16a2c84b4b3b71145d9946b894", - "reference": "fd588debf7d1bc16a2c84b4b3b71145d9946b894", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/97b698e1d77d356304def77a8d0cd73090b359ea", + "reference": "97b698e1d77d356304def77a8d0cd73090b359ea", "shasum": "" }, "require": { @@ -6544,7 +6535,7 @@ "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, - "time": "2023-04-18T13:46:08+00:00", + "time": "2023-05-30T17:12:32+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6572,7 +6563,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.2.10" + "source": "https://github.com/symfony/filesystem/tree/v6.3.0" }, "funding": [ { @@ -6592,17 +6583,17 @@ }, { "name": "symfony/finder", - "version": "v6.2.7", - "version_normalized": "6.2.7.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" + "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", - "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", + "url": "https://api.github.com/repos/symfony/finder/zipball/d9b01ba073c44cef617c7907ce2419f8d00d75e2", + "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2", "shasum": "" }, "require": { @@ -6611,7 +6602,7 @@ "require-dev": { "symfony/filesystem": "^6.0" }, - "time": "2023-02-16T09:57:23+00:00", + "time": "2023-04-02T01:25:41+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6639,7 +6630,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.2.7" + "source": "https://github.com/symfony/finder/tree/v6.3.0" }, "funding": [ { @@ -6659,29 +6650,31 @@ }, { "name": "symfony/http-foundation", - "version": "v6.2.10", - "version_normalized": "6.2.10.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "49adbb92bcb4e3c2943719d2756271e8b9602acc" + "reference": "718a97ed430d34e5c568ea2c44eab708c6efbefb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/49adbb92bcb4e3c2943719d2756271e8b9602acc", - "reference": "49adbb92bcb4e3c2943719d2756271e8b9602acc", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/718a97ed430d34e5c568ea2c44eab708c6efbefb", + "reference": "718a97ed430d34e5c568ea2c44eab708c6efbefb", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" }, "conflict": { "symfony/cache": "<6.2" }, "require-dev": { - "predis/predis": "~1.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1|^2.0", "symfony/cache": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", @@ -6689,10 +6682,7 @@ "symfony/mime": "^5.4|^6.0", "symfony/rate-limiter": "^5.2|^6.0" }, - "suggest": { - "symfony/mime": "To use the file extension guesser" - }, - "time": "2023-04-18T13:46:08+00:00", + "time": "2023-05-19T12:46:45+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6720,7 +6710,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.2.10" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.0" }, "funding": [ { @@ -6740,26 +6730,26 @@ }, { "name": "symfony/http-kernel", - "version": "v6.2.10", - "version_normalized": "6.2.10.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "81064a65a5496f17d2b6984f6519406f98864215" + "reference": "241973f3dd900620b1ca052fe409144f11aea748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/81064a65a5496f17d2b6984f6519406f98864215", - "reference": "81064a65a5496f17d2b6984f6519406f98864215", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/241973f3dd900620b1ca052fe409144f11aea748", + "reference": "241973f3dd900620b1ca052fe409144f11aea748", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^6.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.3", "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^5.4.21|^6.2.7", + "symfony/http-foundation": "^6.2.7", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -6767,15 +6757,18 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.2", + "symfony/dependency-injection": "<6.3", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", "symfony/mailer": "<5.4", "symfony/messenger": "<5.4", "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", "symfony/twig-bridge": "<5.4", "symfony/validator": "<5.4", + "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, "provide": { @@ -6784,29 +6777,28 @@ "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", "symfony/browser-kit": "^5.4|^6.0", + "symfony/clock": "^6.2", "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.2", + "symfony/dependency-injection": "^6.3", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/http-client-contracts": "^2.5|^3", "symfony/process": "^5.4|^6.0", + "symfony/property-access": "^5.4.5|^6.0.5", "symfony/routing": "^5.4|^6.0", + "symfony/serializer": "^6.3", "symfony/stopwatch": "^5.4|^6.0", "symfony/translation": "^5.4|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/translation-contracts": "^2.5|^3", "symfony/uid": "^5.4|^6.0", + "symfony/validator": "^6.3", + "symfony/var-exporter": "^6.2", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, - "time": "2023-04-28T13:50:28+00:00", + "time": "2023-05-30T19:03:32+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6834,7 +6826,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.2.10" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.0" }, "funding": [ { @@ -6854,17 +6846,17 @@ }, { "name": "symfony/mime", - "version": "v6.2.10", - "version_normalized": "6.2.10.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "b6c137fc53a9f7c4c951cd3f362b3734c7a97723" + "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/b6c137fc53a9f7c4c951cd3f362b3734c7a97723", - "reference": "b6c137fc53a9f7c4c951cd3f362b3734c7a97723", + "url": "https://api.github.com/repos/symfony/mime/zipball/7b5d2121858cd6efbed778abce9cfdd7ab1f62ad", + "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad", "shasum": "" }, "require": { @@ -6888,7 +6880,7 @@ "symfony/property-info": "^5.4|^6.0", "symfony/serializer": "^6.2" }, - "time": "2023-04-19T09:54:16+00:00", + "time": "2023-04-28T15:57:00+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6920,7 +6912,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.2.10" + "source": "https://github.com/symfony/mime/tree/v6.3.0" }, "funding": [ { @@ -7699,25 +7691,105 @@ ], "install-path": "../symfony/polyfill-php81" }, + { + "name": "symfony/polyfill-php83", + "version": "v1.27.0", + "version_normalized": "1.27.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57", + "reference": "508c652ba3ccf69f8c97f251534f229791b52a57", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" + }, + "time": "2022-11-03T14:55:06+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "installation-source": "dist", + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/polyfill-php83" + }, { "name": "symfony/process", - "version": "v6.2.10", - "version_normalized": "6.2.10.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e" + "reference": "8741e3ed7fe2e91ec099e02446fb86667a0f1628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e", - "reference": "b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e", + "url": "https://api.github.com/repos/symfony/process/zipball/8741e3ed7fe2e91ec099e02446fb86667a0f1628", + "reference": "8741e3ed7fe2e91ec099e02446fb86667a0f1628", "shasum": "" }, "require": { "php": ">=8.1" }, - "time": "2023-04-18T13:56:57+00:00", + "time": "2023-05-19T08:06:44+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -7745,7 +7817,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.2.10" + "source": "https://github.com/symfony/process/tree/v6.3.0" }, "funding": [ { @@ -7765,17 +7837,17 @@ }, { "name": "symfony/routing", - "version": "v6.2.8", - "version_normalized": "6.2.8.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "69062e2823f03b82265d73a966999660f0e1e404" + "reference": "827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/69062e2823f03b82265d73a966999660f0e1e404", - "reference": "69062e2823f03b82265d73a966999660f0e1e404", + "url": "https://api.github.com/repos/symfony/routing/zipball/827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b", + "reference": "827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b", "shasum": "" }, "require": { @@ -7796,13 +7868,7 @@ "symfony/http-foundation": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "time": "2023-03-14T15:00:05+00:00", + "time": "2023-04-28T15:57:00+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -7836,7 +7902,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.2.8" + "source": "https://github.com/symfony/routing/tree/v6.3.0" }, "funding": [ { @@ -7856,17 +7922,17 @@ }, { "name": "symfony/service-contracts", - "version": "v3.2.1", - "version_normalized": "3.2.1.0", + "version": "v3.3.0", + "version_normalized": "3.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a" + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/a8c9cedf55f314f3a186041d19537303766df09a", - "reference": "a8c9cedf55f314f3a186041d19537303766df09a", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "shasum": "" }, "require": { @@ -7876,14 +7942,11 @@ "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, - "time": "2023-03-01T10:32:47+00:00", + "time": "2023-05-23T14:45:45+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -7924,7 +7987,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" }, "funding": [ { @@ -7944,17 +8007,17 @@ }, { "name": "symfony/string", - "version": "v6.2.8", - "version_normalized": "6.2.8.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef" + "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/193e83bbd6617d6b2151c37fff10fa7168ebddef", - "reference": "193e83bbd6617d6b2151c37fff10fa7168ebddef", + "url": "https://api.github.com/repos/symfony/string/zipball/f2e190ee75ff0f5eced645ec0be5c66fac81f51f", + "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f", "shasum": "" }, "require": { @@ -7965,16 +8028,16 @@ "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/translation-contracts": "<2.0" + "symfony/translation-contracts": "<2.5" }, "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", "symfony/intl": "^6.2", - "symfony/translation-contracts": "^2.0|^3.0", + "symfony/translation-contracts": "^2.5|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, - "time": "2023-03-20T16:06:02+00:00", + "time": "2023-03-21T21:06:29+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -8013,7 +8076,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.2.8" + "source": "https://github.com/symfony/string/tree/v6.3.0" }, "funding": [ { @@ -8033,29 +8096,31 @@ }, { "name": "symfony/translation", - "version": "v6.2.8", - "version_normalized": "6.2.8.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5" + "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/817535dbb1721df8b3a8f2489dc7e50bcd6209b5", - "reference": "817535dbb1721df8b3a8f2489dc7e50bcd6209b5", + "url": "https://api.github.com/repos/symfony/translation/zipball/f72b2cba8f79dd9d536f534f76874b58ad37876f", + "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f", "shasum": "" }, "require": { "php": ">=8.1", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.0" + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { "symfony/config": "<5.4", "symfony/console": "<5.4", "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", "symfony/twig-bundle": "<5.4", "symfony/yaml": "<5.4" }, @@ -8069,21 +8134,15 @@ "symfony/console": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-client-contracts": "^2.5|^3.0", "symfony/http-kernel": "^5.4|^6.0", "symfony/intl": "^5.4|^6.0", "symfony/polyfill-intl-icu": "^1.21", "symfony/routing": "^5.4|^6.0", - "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^5.4|^6.0" }, - "suggest": { - "nikic/php-parser": "To use PhpAstExtractor", - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "time": "2023-03-31T09:14:44+00:00", + "time": "2023-05-19T12:46:45+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -8114,7 +8173,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.2.8" + "source": "https://github.com/symfony/translation/tree/v6.3.0" }, "funding": [ { @@ -8134,30 +8193,27 @@ }, { "name": "symfony/translation-contracts", - "version": "v3.2.1", - "version_normalized": "3.2.1.0", + "version": "v3.3.0", + "version_normalized": "3.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8" + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dfec258b9dd17a6b24420d464c43bffe347441c8", - "reference": "dfec258b9dd17a6b24420d464c43bffe347441c8", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", + "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", "shasum": "" }, "require": { "php": ">=8.1" }, - "suggest": { - "symfony/translation-implementation": "" - }, - "time": "2023-03-01T10:32:47+00:00", + "time": "2023-05-30T17:17:10+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -8198,7 +8254,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.2.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" }, "funding": [ { @@ -8218,17 +8274,17 @@ }, { "name": "symfony/var-dumper", - "version": "v6.2.10", - "version_normalized": "6.2.10.0", + "version": "v6.3.0", + "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "41a750a23412ca76fdbbf5096943b4134272c1ab" + "reference": "6acdcd5c122074ee9f7b051e4fb177025c277a0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/41a750a23412ca76fdbbf5096943b4134272c1ab", - "reference": "41a750a23412ca76fdbbf5096943b4134272c1ab", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6acdcd5c122074ee9f7b051e4fb177025c277a0e", + "reference": "6acdcd5c122074ee9f7b051e4fb177025c277a0e", "shasum": "" }, "require": { @@ -8236,7 +8292,6 @@ "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<5.4.3", "symfony/console": "<5.4" }, "require-dev": { @@ -8246,12 +8301,7 @@ "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "time": "2023-04-18T13:46:08+00:00", + "time": "2023-05-25T13:09:35+00:00", "bin": [ "Resources/bin/var-dump-server" ], @@ -8289,7 +8339,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.2.10" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.0" }, "funding": [ { diff --git a/core/vendor/composer/installed.php b/core/vendor/composer/installed.php index 533674b927..04c9bf9ada 100644 --- a/core/vendor/composer/installed.php +++ b/core/vendor/composer/installed.php @@ -1,9 +1,9 @@ array( 'name' => 'evolutioncms/core', - 'pretty_version' => '3.2.x-dev', - 'version' => '3.2.9999999.9999999-dev', - 'reference' => '5c99f20b254601efcaad03012f5d5b91611ab42d', + 'pretty_version' => '1.0.0+no-version-set', + 'version' => '1.0.0.0', + 'reference' => NULL, 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -38,9 +38,9 @@ 'dev_requirement' => false, ), 'composer/composer' => array( - 'pretty_version' => '2.5.5', - 'version' => '2.5.5.0', - 'reference' => 'c7cffaad16a60636a776017eac5bd8cd0095c32f', + 'pretty_version' => '2.5.7', + 'version' => '2.5.7.0', + 'reference' => 'd477018d3f2ebd76dede3d3988a0b1a7add4d81e', 'type' => 'library', 'install_path' => __DIR__ . '/./composer', 'aliases' => array(), @@ -119,9 +119,9 @@ 'dev_requirement' => false, ), 'doctrine/deprecations' => array( - 'pretty_version' => 'v1.0.0', - 'version' => '1.0.0.0', - 'reference' => '0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de', + 'pretty_version' => 'v1.1.0', + 'version' => '1.1.0.0', + 'reference' => '8cffffb2218e01f3b370bf763e00e81697725259', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/deprecations', 'aliases' => array(), @@ -182,9 +182,9 @@ 'dev_requirement' => false, ), 'evolutioncms/core' => array( - 'pretty_version' => '3.2.x-dev', - 'version' => '3.2.9999999.9999999-dev', - 'reference' => '5c99f20b254601efcaad03012f5d5b91611ab42d', + 'pretty_version' => '1.0.0+no-version-set', + 'version' => '1.0.0.0', + 'reference' => NULL, 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -256,8 +256,8 @@ 'dev_requirement' => false, ), 'illuminate/bus' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => 'ec2250684df1ff5cddc4ae639ec913996a4bd0be', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/bus', @@ -265,26 +265,26 @@ 'dev_requirement' => false, ), 'illuminate/cache' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', - 'reference' => 'f53cc686722653a409e2f12ca37a45166999d40f', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', + 'reference' => '8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/cache', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/collections' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', - 'reference' => '4f3810082e70780547c48d803c2d315e566df6a5', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', + 'reference' => '73652e915e56531e08c06bd356d8fa8bc346812e', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/collections', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/conditionable' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => 'd0958e4741fc9d6f516a552060fd1b829a85e009', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/conditionable', @@ -301,17 +301,17 @@ 'dev_requirement' => false, ), 'illuminate/console' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', - 'reference' => '6459d31a841fbc71033b1c6af97871085a45c8b0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', + 'reference' => 'ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/console', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/container' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => 'f85a85791c75a754190d6495e6ca611faaa64f61', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/container', @@ -319,8 +319,8 @@ 'dev_requirement' => false, ), 'illuminate/contracts' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => '0f8b766d66df7e0784ea73cfe4caf7a48b623f53', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/contracts', @@ -328,17 +328,17 @@ 'dev_requirement' => false, ), 'illuminate/database' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', - 'reference' => 'cd8e990181f3f2df752c6419f90588f65f010004', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', + 'reference' => '5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/database', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/events' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => 'c68138ea57360c19a145e5912fb474cfd1845366', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/events', @@ -346,8 +346,8 @@ 'dev_requirement' => false, ), 'illuminate/filesystem' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => '53a46fed9b31617ce3a786690b2294f0a54559ea', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/filesystem', @@ -355,8 +355,8 @@ 'dev_requirement' => false, ), 'illuminate/http' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => 'e08bf43e2ca73d06d0082a4e993878f8a4620ae4', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/http', @@ -364,8 +364,8 @@ 'dev_requirement' => false, ), 'illuminate/log' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => '65ed49152b121fc82116223f092b68fe8a3b4ba0', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/log', @@ -373,8 +373,8 @@ 'dev_requirement' => false, ), 'illuminate/macroable' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => '6b80109438161d45a5f2bdf7ecdd56cbd0096c3d', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/macroable', @@ -382,8 +382,8 @@ 'dev_requirement' => false, ), 'illuminate/pagination' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => '2af69e712297cc38377593a72f00d430867e8bdc', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/pagination', @@ -391,8 +391,8 @@ 'dev_requirement' => false, ), 'illuminate/pipeline' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => 'f2119ae9a26e420bf0ed9d5e7e7aa4548547e7b1', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/pipeline', @@ -400,8 +400,8 @@ 'dev_requirement' => false, ), 'illuminate/redis' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => 'a86771f93c92b827e19f007347d65d1197202793', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/redis', @@ -409,17 +409,17 @@ 'dev_requirement' => false, ), 'illuminate/routing' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', - 'reference' => 'd563283c8f10d326804dcc701f9de70fd9ab4e3e', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', + 'reference' => '62e17faf9f9f4bb80f00c32599b630f5fcd257d7', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/routing', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/session' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => 'f39be6b679781d5a7089c76965ed635491b4b5dd', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/session', @@ -427,17 +427,17 @@ 'dev_requirement' => false, ), 'illuminate/support' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', - 'reference' => '2ec8978cc9eda6848389fa623018603ef920067b', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', + 'reference' => '679edd76b4ba656c3d4ee2dbf53e99e31a73448b', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/support', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/translation' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', 'reference' => '6c61b26735d57797753b5970029505d3854be127', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/translation', @@ -445,18 +445,18 @@ 'dev_requirement' => false, ), 'illuminate/validation' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', - 'reference' => '9e62010e23c66f1239e9331d1a10b063b8e88527', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', + 'reference' => '86e252487c170fb88cdb72f74aee1a8d187d377a', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/validation', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/view' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', - 'reference' => 'aebc2fa44b2366e87652d550ceb9871183dd7422', + 'pretty_version' => 'v10.13.0', + 'version' => '10.13.0.0', + 'reference' => 'acf034c30db23debb797a94641a43780aeecd6c1', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/view', 'aliases' => array(), @@ -508,9 +508,9 @@ 'dev_requirement' => false, ), 'nesbot/carbon' => array( - 'pretty_version' => '2.66.0', - 'version' => '2.66.0.0', - 'reference' => '496712849902241f04902033b0441b269effe001', + 'pretty_version' => '2.67.0', + 'version' => '2.67.0.0', + 'reference' => 'c1001b3bc75039b07f38a79db5237c4c529e04c8', 'type' => 'library', 'install_path' => __DIR__ . '/../nesbot/carbon', 'aliases' => array(), @@ -648,8 +648,8 @@ 'psr/log-implementation' => array( 'dev_requirement' => false, 'provided' => array( - 0 => '3.0.0', - 1 => '1.0|2.0|3.0', + 0 => '1.0|2.0|3.0', + 1 => '3.0.0', ), ), 'psr/simple-cache' => array( @@ -688,7 +688,7 @@ 'roave/security-advisories' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => '2d9146bd69addfbd99652930a825c8ba7b8ea13c', + 'reference' => 'd40baa1c4204055d04a5a9b5ad39c95b189ef889', 'type' => 'metapackage', 'install_path' => NULL, 'aliases' => array(), @@ -785,45 +785,45 @@ 'dev_requirement' => false, ), 'symfony/console' => array( - 'pretty_version' => 'v6.2.10', - 'version' => '6.2.10.0', - 'reference' => '12288d9f4500f84a4d02254d4aa968b15488476f', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => '8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/deprecation-contracts' => array( - 'pretty_version' => 'v3.2.1', - 'version' => '3.2.1.0', - 'reference' => 'e2d1534420bd723d0ef5aec58a22c5fe60ce6f5e', + 'pretty_version' => 'v3.3.0', + 'version' => '3.3.0.0', + 'reference' => '7c3aff79d10325257a001fcf92d991f24fc967cf', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/error-handler' => array( - 'pretty_version' => 'v6.2.10', - 'version' => '6.2.10.0', - 'reference' => '8b7e9f124640cb0611624a9383176c3e5f7d8cfb', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => '99d2d814a6351461af350ead4d963bd67451236f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/error-handler', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/event-dispatcher' => array( - 'pretty_version' => 'v6.2.8', - 'version' => '6.2.8.0', - 'reference' => '04046f35fd7d72f9646e721fc2ecb8f9c67d3339', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => '3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/event-dispatcher', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/event-dispatcher-contracts' => array( - 'pretty_version' => 'v3.2.1', - 'version' => '3.2.1.0', - 'reference' => '0ad3b6f1e4e2da5690fefe075cd53a238646d8dd', + 'pretty_version' => 'v3.3.0', + 'version' => '3.3.0.0', + 'reference' => 'a76aed96a42d2b521153fb382d418e30d18b59df', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts', 'aliases' => array(), @@ -836,45 +836,45 @@ ), ), 'symfony/filesystem' => array( - 'pretty_version' => 'v6.2.10', - 'version' => '6.2.10.0', - 'reference' => 'fd588debf7d1bc16a2c84b4b3b71145d9946b894', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => '97b698e1d77d356304def77a8d0cd73090b359ea', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/finder' => array( - 'pretty_version' => 'v6.2.7', - 'version' => '6.2.7.0', - 'reference' => '20808dc6631aecafbe67c186af5dcb370be3a0eb', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => 'd9b01ba073c44cef617c7907ce2419f8d00d75e2', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/finder', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/http-foundation' => array( - 'pretty_version' => 'v6.2.10', - 'version' => '6.2.10.0', - 'reference' => '49adbb92bcb4e3c2943719d2756271e8b9602acc', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => '718a97ed430d34e5c568ea2c44eab708c6efbefb', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/http-foundation', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/http-kernel' => array( - 'pretty_version' => 'v6.2.10', - 'version' => '6.2.10.0', - 'reference' => '81064a65a5496f17d2b6984f6519406f98864215', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => '241973f3dd900620b1ca052fe409144f11aea748', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/http-kernel', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/mime' => array( - 'pretty_version' => 'v6.2.10', - 'version' => '6.2.10.0', - 'reference' => 'b6c137fc53a9f7c4c951cd3f362b3734c7a97723', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => '7b5d2121858cd6efbed778abce9cfdd7ab1f62ad', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/mime', 'aliases' => array(), @@ -961,55 +961,64 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'symfony/polyfill-php83' => array( + 'pretty_version' => 'v1.27.0', + 'version' => '1.27.0.0', + 'reference' => '508c652ba3ccf69f8c97f251534f229791b52a57', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/polyfill-php83', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'symfony/process' => array( - 'pretty_version' => 'v6.2.10', - 'version' => '6.2.10.0', - 'reference' => 'b34cdbc9c5e75d45a3703e63a48ad07aafa8bf2e', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => '8741e3ed7fe2e91ec099e02446fb86667a0f1628', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/process', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/routing' => array( - 'pretty_version' => 'v6.2.8', - 'version' => '6.2.8.0', - 'reference' => '69062e2823f03b82265d73a966999660f0e1e404', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => '827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/routing', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/service-contracts' => array( - 'pretty_version' => 'v3.2.1', - 'version' => '3.2.1.0', - 'reference' => 'a8c9cedf55f314f3a186041d19537303766df09a', + 'pretty_version' => 'v3.3.0', + 'version' => '3.3.0.0', + 'reference' => '40da9cc13ec349d9e4966ce18b5fbcd724ab10a4', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/string' => array( - 'pretty_version' => 'v6.2.8', - 'version' => '6.2.8.0', - 'reference' => '193e83bbd6617d6b2151c37fff10fa7168ebddef', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => 'f2e190ee75ff0f5eced645ec0be5c66fac81f51f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/string', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/translation' => array( - 'pretty_version' => 'v6.2.8', - 'version' => '6.2.8.0', - 'reference' => '817535dbb1721df8b3a8f2489dc7e50bcd6209b5', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => 'f72b2cba8f79dd9d536f534f76874b58ad37876f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/translation-contracts' => array( - 'pretty_version' => 'v3.2.1', - 'version' => '3.2.1.0', - 'reference' => 'dfec258b9dd17a6b24420d464c43bffe347441c8', + 'pretty_version' => 'v3.3.0', + 'version' => '3.3.0.0', + 'reference' => '02c24deb352fb0d79db5486c0c79905a85e37e86', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation-contracts', 'aliases' => array(), @@ -1022,9 +1031,9 @@ ), ), 'symfony/var-dumper' => array( - 'pretty_version' => 'v6.2.10', - 'version' => '6.2.10.0', - 'reference' => '41a750a23412ca76fdbbf5096943b4134272c1ab', + 'pretty_version' => 'v6.3.0', + 'version' => '6.3.0.0', + 'reference' => '6acdcd5c122074ee9f7b051e4fb177025c277a0e', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/var-dumper', 'aliases' => array(), diff --git a/core/vendor/composer/pcre/phpstan-baseline.neon b/core/vendor/composer/pcre/phpstan-baseline.neon deleted file mode 100644 index df994246ba..0000000000 --- a/core/vendor/composer/pcre/phpstan-baseline.neon +++ /dev/null @@ -1,17 +0,0 @@ -parameters: - ignoreErrors: - - - message: "#^Method Composer\\\\Pcre\\\\Preg\\:\\:matchAll\\(\\) should return int\\<0, max\\> but returns int\\.$#" - count: 1 - path: src/Preg.php - - - - message: "#^Method Composer\\\\Pcre\\\\Preg\\:\\:matchAllWithOffsets\\(\\) should return int\\<0, max\\> but returns int\\.$#" - count: 1 - path: src/Preg.php - - - - message: "#^Strict comparison using \\=\\=\\= between int and null will always evaluate to false\\.$#" - count: 2 - path: src/Preg.php - diff --git a/core/vendor/dmitry-suffi/redis-session-handler/.gitignore b/core/vendor/dmitry-suffi/redis-session-handler/.gitignore new file mode 100644 index 0000000000..c6ef2182bd --- /dev/null +++ b/core/vendor/dmitry-suffi/redis-session-handler/.gitignore @@ -0,0 +1,2 @@ +.idea + diff --git a/core/vendor/doctrine/deprecations/README.md b/core/vendor/doctrine/deprecations/README.md index 22f0cced3e..93caf83f82 100644 --- a/core/vendor/doctrine/deprecations/README.md +++ b/core/vendor/doctrine/deprecations/README.md @@ -19,13 +19,16 @@ Enable Doctrine deprecations to be sent to a PSR3 logger: ``` Enable Doctrine deprecations to be sent as `@trigger_error($message, E_USER_DEPRECATED)` -messages. +messages by setting the `DOCTRINE_DEPRECATIONS` environment variable to `trigger`. +Alternatively, call: ```php \Doctrine\Deprecations\Deprecation::enableWithTriggerError(); ``` -If you only want to enable deprecation tracking, without logging or calling `trigger_error` then call: +If you only want to enable deprecation tracking, without logging or calling `trigger_error` +then set the `DOCTRINE_DEPRECATIONS` environment variable to `track`. +Alternatively, call: ```php \Doctrine\Deprecations\Deprecation::enableTrackingDeprecations(); diff --git a/core/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php b/core/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php index 1029372faa..6c76d98417 100644 --- a/core/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php +++ b/core/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php @@ -46,8 +46,8 @@ class Deprecation private const TYPE_TRIGGER_ERROR = 2; private const TYPE_PSR_LOGGER = 4; - /** @var int */ - private static $type = self::TYPE_NONE; + /** @var self::TYPE_*|null */ + private static $type; /** @var LoggerInterface|null */ private static $logger; @@ -72,7 +72,9 @@ class Deprecation */ public static function trigger(string $package, string $link, string $message, ...$args): void { - if (self::$type === self::TYPE_NONE) { + $type = self::$type ?? self::getTypeFromEnv(); + + if ($type === self::TYPE_NONE) { return; } @@ -118,7 +120,9 @@ public static function trigger(string $package, string $link, string $message, . */ public static function triggerIfCalledFromOutside(string $package, string $link, string $message, ...$args): void { - if (self::$type === self::TYPE_NONE) { + $type = self::$type ?? self::getTypeFromEnv(); + + if ($type === self::TYPE_NONE) { return; } @@ -161,7 +165,9 @@ public static function triggerIfCalledFromOutside(string $package, string $link, */ private static function delegateTriggerToBackend(string $message, array $backtrace, string $link, string $package): void { - if ((self::$type & self::TYPE_PSR_LOGGER) > 0) { + $type = self::$type ?? self::getTypeFromEnv(); + + if (($type & self::TYPE_PSR_LOGGER) > 0) { $context = [ 'file' => $backtrace[0]['file'], 'line' => $backtrace[0]['line'], @@ -172,7 +178,7 @@ private static function delegateTriggerToBackend(string $message, array $backtra self::$logger->notice($message, $context); } - if (! ((self::$type & self::TYPE_TRIGGER_ERROR) > 0)) { + if (! (($type & self::TYPE_TRIGGER_ERROR) > 0)) { return; } @@ -263,4 +269,26 @@ public static function getTriggeredDeprecations(): array { return self::$ignoredLinks; } + + /** + * @return self::TYPE_* + */ + private static function getTypeFromEnv(): int + { + switch ($_SERVER['DOCTRINE_DEPRECATIONS'] ?? $_ENV['DOCTRINE_DEPRECATIONS'] ?? null) { + case 'trigger': + self::$type = self::TYPE_TRIGGER_ERROR; + break; + + case 'track': + self::$type = self::TYPE_TRACK_DEPRECATIONS; + break; + + default: + self::$type = self::TYPE_NONE; + break; + } + + return self::$type; + } } diff --git a/core/vendor/dragonmantank/cron-expression/CHANGELOG.md b/core/vendor/dragonmantank/cron-expression/CHANGELOG.md deleted file mode 100644 index 7b6df4b1cb..0000000000 --- a/core/vendor/dragonmantank/cron-expression/CHANGELOG.md +++ /dev/null @@ -1,228 +0,0 @@ -# Change Log - -## [3.3.2] - 2022-09-19 - -### Added -- N/A - -### Changed -- Skip some daylight savings time tests for PHP 8.1 daylight savings time weirdness (#146) - -### Fixed -- Changed string interpolations to work better with PHP 8.2 (#142) - -## [3.3.1] - 2022-01-18 - -### Added -- N/A - -### Changed -- N/A - -### Fixed -- Fixed issue when timezones had no transition, which can occur over very short timespans (#134) - -## [3.3.0] - 2022-01-13 - -### Added -- Added ability to register your own expression aliases (#132) - -### Changed -- Changed how Day of Week and Day of Month resolve when one or the other is `*` or `?` - -### Fixed -- PHPStan should no longer error out - -## [3.2.4] - 2022-01-12 - -### Added -- N/A - -### Changed -- Changed how Day of Week increment/decrement to help with DST changes (#131) - -### Fixed -- N/A - -## [3.2.3] - 2022-01-05 - -### Added -- N/A - -### Changed -- Changed how minutes and hours increment/decrement to help with DST changes (#131) - -### Fixed -- N/A - -## [3.2.2] - 2022-01-05 - -### Added -- N/A - -### Changed -- Marked some methods `@internal` (#124) - -### Fixed -- Fixed issue with small ranges and large steps that caused an error with `range()` (#88) -- Fixed issue where wraparound logic incorrectly considered high bound on range (#89) - -## [3.2.1] - 2022-01-04 - -### Added -- N/A - -### Changed -- Added PHP 8.1 to testing (#125) - -### Fixed -- Allow better mixture of ranges, steps, and lists (#122) -- Fixed return order when multiple dates are requested and inverted (#121) -- Better handling over DST (#115) -- Fixed PHPStan tests (#130) - -## [3.2.0] - 2022-01-04 - -### Added -- Added alias for `@midnight` (#117) - -### Changed -- Improved testing for instance of field in tests (#105) -- Optimization for determining multiple run dates (#75) -- `CronExpression` properties changed from private to protected (#106) - -### Fixed -- N/A - -## [3.1.0] - 2020-11-24 - -### Added -- Added `CronExpression::getParts()` method to get parts of the expression as an array (#83) - -### Changed -- Changed to Interfaces for some type hints (#97, #86) -- Dropped minimum PHP version to 7.2 -- Few syntax changes for phpstan compatibility (#93) - -### Fixed -- N/A - -### Deprecated -- Deprecated `CronExpression::factory` in favor of the constructor (#56) -- Deprecated `CronExpression::YEAR` as a formality, the functionality is already removed (#87) - -## [3.0.1] - 2020-10-12 -### Added -- Added support for PHP 8 (#92) -### Changed -- N/A -### Fixed -- N/A - -## [3.0.0] - 2020-03-25 - -**MAJOR CHANGE** - In previous versions of this library, setting both a "Day of Month" and a "Day of Week" would be interpreted as an `AND` statement, not an `OR` statement. For example: - -`30 0 1 * 1` - -would evaluate to "Run 30 minutes after the 0 hour when the Day Of Month is 1 AND a Monday" instead of "Run 30 minutes after the 0 hour on Day Of Month 1 OR a Monday", where the latter is more inline with most cron systems. This means that if your cron expression has both of these fields set, you may see your expression fire more often starting with v3.0.0. - -### Added -- Additional docblocks for IDE and documentation -- Added phpstan as a development dependency -- Added a `Cron\FieldFactoryInterface` to make migrations easier (#38) -### Changed -- Changed some DI testing during TravisCI runs -- `\Cron\CronExpression::determineTimezone()` now checks for `\DateTimeInterface` instead of just `\DateTime` -- Errors with fields now report a more human-understandable error and are 1-based instead of 0-based -- Better support for `\DateTimeImmutable` across the library by typehinting for `\DateTimeInterface` now -- Literals should now be less case-sensative across the board -- Changed logic for when both a Day of Week and a Day of Month are supplied to now be an OR statement, not an AND -### Fixed -- Fixed infinite loop when determining last day of week from literals -- Fixed bug where single number ranges were allowed (ex: `1/10`) -- Fixed nullable FieldFactory in CronExpression where no factory could be supplied -- Fixed issue where logic for dropping seconds to 0 could lead to a timezone change - -## [2.3.1] - 2020-10-12 -### Added -- Added support for PHP 8 (#92) -### Changed -- N/A -### Fixed -- N/A - -## [2.3.0] - 2019-03-30 -### Added -- Added support for DateTimeImmutable via DateTimeInterface -- Added support for PHP 7.3 -- Started listing projects that use the library -### Changed -- Errors should now report a human readable position in the cron expression, instead of starting at 0 -### Fixed -- N/A - -## [2.2.0] - 2018-06-05 -### Added -- Added support for steps larger than field ranges (#6) -## Changed -- N/A -### Fixed -- Fixed validation for numbers with leading 0s (#12) - -## [2.1.0] - 2018-04-06 -### Added -- N/A -### Changed -- Upgraded to PHPUnit 6 (#2) -### Fixed -- Refactored timezones to deal with some inconsistent behavior (#3) -- Allow ranges and lists in same expression (#5) -- Fixed regression where literals were not converted to their numerical counterpart (#) - -## [2.0.0] - 2017-10-12 -### Added -- N/A - -### Changed -- Dropped support for PHP 5.x -- Dropped support for the YEAR field, as it was not part of the cron standard - -### Fixed -- Reworked validation for all the field types -- Stepping should now work for 1-indexed fields like Month (#153) - -## [1.2.0] - 2017-01-22 -### Added -- Added IDE, CodeSniffer, and StyleCI.IO support - -### Changed -- Switched to PSR-4 Autoloading - -### Fixed -- 0 step expressions are handled better -- Fixed `DayOfMonth` validation to be more strict -- Typos - -## [1.1.0] - 2016-01-26 -### Added -- Support for non-hourly offset timezones -- Checks for valid expressions - -### Changed -- Max Iterations no longer hardcoded for `getRunDate()` -- Supports DateTimeImmutable for newer PHP verions - -### Fixed -- Fixed looping bug for PHP 7 when determining the last specified weekday of a month - -## [1.0.3] - 2013-11-23 -### Added -- Now supports expressions with any number of extra spaces, tabs, or newlines - -### Changed -- Using static instead of self in `CronExpression::factory` - -### Fixed -- Fixes issue [#28](https://github.com/mtdowling/cron-expression/issues/28) where PHP increments of ranges were failing due to PHP casting hyphens to 0 -- Only set default timezone if the given $currentTime is not a DateTime instance ([#34](https://github.com/mtdowling/cron-expression/issues/34)) diff --git a/core/vendor/dragonmantank/cron-expression/README.md b/core/vendor/dragonmantank/cron-expression/README.md deleted file mode 100644 index e853ad4555..0000000000 --- a/core/vendor/dragonmantank/cron-expression/README.md +++ /dev/null @@ -1,87 +0,0 @@ -PHP Cron Expression Parser -========================== - -[![Latest Stable Version](https://poser.pugx.org/dragonmantank/cron-expression/v/stable.png)](https://packagist.org/packages/dragonmantank/cron-expression) [![Total Downloads](https://poser.pugx.org/dragonmantank/cron-expression/downloads.png)](https://packagist.org/packages/dragonmantank/cron-expression) [![Build Status](https://secure.travis-ci.org/dragonmantank/cron-expression.png)](http://travis-ci.org/dragonmantank/cron-expression) [![StyleCI](https://github.styleci.io/repos/103715337/shield?branch=master)](https://github.styleci.io/repos/103715337) - -The PHP cron expression parser can parse a CRON expression, determine if it is -due to run, calculate the next run date of the expression, and calculate the previous -run date of the expression. You can calculate dates far into the future or past by -skipping **n** number of matching dates. - -The parser can handle increments of ranges (e.g. */12, 2-59/3), intervals (e.g. 0-9), -lists (e.g. 1,2,3), **W** to find the nearest weekday for a given day of the month, **L** to -find the last day of the month, **L** to find the last given weekday of a month, and hash -(#) to find the nth weekday of a given month. - -More information about this fork can be found in the blog post [here](http://ctankersley.com/2017/10/12/cron-expression-update/). tl;dr - v2.0.0 is a major breaking change, and @dragonmantank can better take care of the project in a separate fork. - -Installing -========== - -Add the dependency to your project: - -```bash -composer require dragonmantank/cron-expression -``` - -Usage -===== -```php -isDue(); -echo $cron->getNextRunDate()->format('Y-m-d H:i:s'); -echo $cron->getPreviousRunDate()->format('Y-m-d H:i:s'); - -// Works with complex expressions -$cron = new Cron\CronExpression('3-59/15 6-12 */15 1 2-5'); -echo $cron->getNextRunDate()->format('Y-m-d H:i:s'); - -// Calculate a run date two iterations into the future -$cron = new Cron\CronExpression('@daily'); -echo $cron->getNextRunDate(null, 2)->format('Y-m-d H:i:s'); - -// Calculate a run date relative to a specific time -$cron = new Cron\CronExpression('@monthly'); -echo $cron->getNextRunDate('2010-01-12 00:00:00')->format('Y-m-d H:i:s'); -``` - -CRON Expressions -================ - -A CRON expression is a string representing the schedule for a particular command to execute. The parts of a CRON schedule are as follows: - - * * * * * - - - - - - - | | | | | - | | | | | - | | | | +----- day of week (0 - 7) (Sunday=0 or 7) - | | | +---------- month (1 - 12) - | | +--------------- day of month (1 - 31) - | +-------------------- hour (0 - 23) - +------------------------- min (0 - 59) - -This library also supports a few macros: - -* `@yearly`, `@annually` - Run once a year, midnight, Jan. 1 - `0 0 1 1 *` -* `@monthly` - Run once a month, midnight, first of month - `0 0 1 * *` -* `@weekly` - Run once a week, midnight on Sun - `0 0 * * 0` -* `@daily`, `@midnight` - Run once a day, midnight - `0 0 * * *` -* `@hourly` - Run once an hour, first minute - `0 * * * *` - -Requirements -============ - -- PHP 7.2+ -- PHPUnit is required to run the unit tests -- Composer is required to run the unit tests - -Projects that Use cron-expression -================================= -* Part of the [Laravel Framework](https://github.com/laravel/framework/) -* Available as a [Symfony Bundle - setono/cron-expression-bundle](https://github.com/Setono/CronExpressionBundle) -* Framework agnostic, PHP-based job scheduler - [Crunz](https://github.com/lavary/crunz) diff --git a/core/vendor/dragonmantank/cron-expression/composer.json b/core/vendor/dragonmantank/cron-expression/composer.json deleted file mode 100644 index 657a5b47cd..0000000000 --- a/core/vendor/dragonmantank/cron-expression/composer.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "dragonmantank/cron-expression", - "type": "library", - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": ["cron", "schedule"], - "license": "MIT", - "authors": [ - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "phpstan/phpstan-webmozart-assert": "^1.0", - "phpstan/extension-installer": "^1.0" - }, - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "autoload-dev": { - "psr-4": { - "Cron\\Tests\\": "tests/Cron/" - } - }, - "replace": { - "mtdowling/cron-expression": "^1.0" - }, - "scripts": { - "phpstan": "./vendor/bin/phpstan analyze", - "test": "phpunit" - }, - "config": { - "allow-plugins": { - "ocramius/package-versions": true, - "phpstan/extension-installer": true - } - } -} diff --git a/core/vendor/dragonmantank/cron-expression/phpstan.neon b/core/vendor/dragonmantank/cron-expression/phpstan.neon deleted file mode 100644 index bea9cb0dad..0000000000 --- a/core/vendor/dragonmantank/cron-expression/phpstan.neon +++ /dev/null @@ -1,15 +0,0 @@ -parameters: - checkMissingIterableValueType: false - - ignoreErrors: - - '#Call to an undefined method DateTimeInterface::add\(\)#' - - '#Call to an undefined method DateTimeInterface::modify\(\)#' - - '#Call to an undefined method DateTimeInterface::setDate\(\)#' - - '#Call to an undefined method DateTimeInterface::setTime\(\)#' - - '#Call to an undefined method DateTimeInterface::setTimezone\(\)#' - - '#Call to an undefined method DateTimeInterface::sub\(\)#' - - level: max - - paths: - - src/ diff --git a/core/vendor/dragonmantank/cron-expression/src/Cron/AbstractField.php b/core/vendor/dragonmantank/cron-expression/src/Cron/AbstractField.php deleted file mode 100644 index df2848df4b..0000000000 --- a/core/vendor/dragonmantank/cron-expression/src/Cron/AbstractField.php +++ /dev/null @@ -1,346 +0,0 @@ -fullRange = range($this->rangeStart, $this->rangeEnd); - } - - /** - * Check to see if a field is satisfied by a value. - * - * @internal - * @param int $dateValue Date value to check - * @param string $value Value to test - * - * @return bool - */ - public function isSatisfied(int $dateValue, string $value): bool - { - if ($this->isIncrementsOfRanges($value)) { - return $this->isInIncrementsOfRanges($dateValue, $value); - } - - if ($this->isRange($value)) { - return $this->isInRange($dateValue, $value); - } - - return '*' === $value || $dateValue === (int) $value; - } - - /** - * Check if a value is a range. - * - * @internal - * @param string $value Value to test - * - * @return bool - */ - public function isRange(string $value): bool - { - return false !== strpos($value, '-'); - } - - /** - * Check if a value is an increments of ranges. - * - * @internal - * @param string $value Value to test - * - * @return bool - */ - public function isIncrementsOfRanges(string $value): bool - { - return false !== strpos($value, '/'); - } - - /** - * Test if a value is within a range. - * - * @internal - * @param int $dateValue Set date value - * @param string $value Value to test - * - * @return bool - */ - public function isInRange(int $dateValue, $value): bool - { - $parts = array_map( - function ($value) { - $value = trim($value); - - return $this->convertLiterals($value); - }, - explode('-', $value, 2) - ); - - return $dateValue >= $parts[0] && $dateValue <= $parts[1]; - } - - /** - * Test if a value is within an increments of ranges (offset[-to]/step size). - * - * @internal - * @param int $dateValue Set date value - * @param string $value Value to test - * - * @return bool - */ - public function isInIncrementsOfRanges(int $dateValue, string $value): bool - { - $chunks = array_map('trim', explode('/', $value, 2)); - $range = $chunks[0]; - $step = $chunks[1] ?? 0; - - // No step or 0 steps aren't cool - /** @phpstan-ignore-next-line */ - if (null === $step || '0' === $step || 0 === $step) { - return false; - } - - // Expand the * to a full range - if ('*' === $range) { - $range = $this->rangeStart . '-' . $this->rangeEnd; - } - - // Generate the requested small range - $rangeChunks = explode('-', $range, 2); - $rangeStart = (int) $rangeChunks[0]; - $rangeEnd = $rangeChunks[1] ?? $rangeStart; - $rangeEnd = (int) $rangeEnd; - - if ($rangeStart < $this->rangeStart || $rangeStart > $this->rangeEnd || $rangeStart > $rangeEnd) { - throw new \OutOfRangeException('Invalid range start requested'); - } - - if ($rangeEnd < $this->rangeStart || $rangeEnd > $this->rangeEnd || $rangeEnd < $rangeStart) { - throw new \OutOfRangeException('Invalid range end requested'); - } - - // Steps larger than the range need to wrap around and be handled - // slightly differently than smaller steps - - // UPDATE - This is actually false. The C implementation will allow a - // larger step as valid syntax, it never wraps around. It will stop - // once it hits the end. Unfortunately this means in future versions - // we will not wrap around. However, because the logic exists today - // per the above documentation, fixing the bug from #89 - if ($step > $this->rangeEnd) { - $thisRange = [$this->fullRange[$step % \count($this->fullRange)]]; - } else { - if ($step > ($rangeEnd - $rangeStart)) { - $thisRange[$rangeStart] = (int) $rangeStart; - } else { - $thisRange = range($rangeStart, $rangeEnd, (int) $step); - } - } - - return \in_array($dateValue, $thisRange, true); - } - - /** - * Returns a range of values for the given cron expression. - * - * @param string $expression The expression to evaluate - * @param int $max Maximum offset for range - * - * @return array - */ - public function getRangeForExpression(string $expression, int $max): array - { - $values = []; - $expression = $this->convertLiterals($expression); - - if (false !== strpos($expression, ',')) { - $ranges = explode(',', $expression); - $values = []; - foreach ($ranges as $range) { - $expanded = $this->getRangeForExpression($range, $this->rangeEnd); - $values = array_merge($values, $expanded); - } - - return $values; - } - - if ($this->isRange($expression) || $this->isIncrementsOfRanges($expression)) { - if (!$this->isIncrementsOfRanges($expression)) { - [$offset, $to] = explode('-', $expression); - $offset = $this->convertLiterals($offset); - $to = $this->convertLiterals($to); - $stepSize = 1; - } else { - $range = array_map('trim', explode('/', $expression, 2)); - $stepSize = $range[1] ?? 0; - $range = $range[0]; - $range = explode('-', $range, 2); - $offset = $range[0]; - $to = $range[1] ?? $max; - } - $offset = '*' === $offset ? $this->rangeStart : $offset; - if ($stepSize >= $this->rangeEnd) { - $values = [$this->fullRange[$stepSize % \count($this->fullRange)]]; - } else { - for ($i = $offset; $i <= $to; $i += $stepSize) { - $values[] = (int) $i; - } - } - sort($values); - } else { - $values = [$expression]; - } - - return $values; - } - - /** - * Convert literal. - * - * @param string $value - * - * @return string - */ - protected function convertLiterals(string $value): string - { - if (\count($this->literals)) { - $key = array_search(strtoupper($value), $this->literals, true); - if (false !== $key) { - return (string) $key; - } - } - - return $value; - } - - /** - * Checks to see if a value is valid for the field. - * - * @param string $value - * - * @return bool - */ - public function validate(string $value): bool - { - $value = $this->convertLiterals($value); - - // All fields allow * as a valid value - if ('*' === $value) { - return true; - } - - // Validate each chunk of a list individually - if (false !== strpos($value, ',')) { - foreach (explode(',', $value) as $listItem) { - if (!$this->validate($listItem)) { - return false; - } - } - - return true; - } - - if (false !== strpos($value, '/')) { - [$range, $step] = explode('/', $value); - - // Don't allow numeric ranges - if (is_numeric($range)) { - return false; - } - - return $this->validate($range) && filter_var($step, FILTER_VALIDATE_INT); - } - - if (false !== strpos($value, '-')) { - if (substr_count($value, '-') > 1) { - return false; - } - - $chunks = explode('-', $value); - $chunks[0] = $this->convertLiterals($chunks[0]); - $chunks[1] = $this->convertLiterals($chunks[1]); - - if ('*' === $chunks[0] || '*' === $chunks[1]) { - return false; - } - - return $this->validate($chunks[0]) && $this->validate($chunks[1]); - } - - if (!is_numeric($value)) { - return false; - } - - if (false !== strpos($value, '.')) { - return false; - } - - // We should have a numeric by now, so coerce this into an integer - $value = (int) $value; - - return \in_array($value, $this->fullRange, true); - } - - protected function timezoneSafeModify(DateTimeInterface $dt, string $modification): DateTimeInterface - { - $timezone = $dt->getTimezone(); - $dt = $dt->setTimezone(new \DateTimeZone("UTC")); - $dt = $dt->modify($modification); - $dt = $dt->setTimezone($timezone); - return $dt; - } - - protected function setTimeHour(DateTimeInterface $date, bool $invert, int $originalTimestamp): DateTimeInterface - { - $date = $date->setTime((int)$date->format('H'), ($invert ? 59 : 0)); - - // setTime caused the offset to change, moving time in the wrong direction - $actualTimestamp = $date->format('U'); - if ((! $invert) && ($actualTimestamp <= $originalTimestamp)) { - $date = $this->timezoneSafeModify($date, "+1 hour"); - } elseif ($invert && ($actualTimestamp >= $originalTimestamp)) { - $date = $this->timezoneSafeModify($date, "-1 hour"); - } - - return $date; - } -} diff --git a/core/vendor/dragonmantank/cron-expression/src/Cron/CronExpression.php b/core/vendor/dragonmantank/cron-expression/src/Cron/CronExpression.php deleted file mode 100644 index d5337cc57f..0000000000 --- a/core/vendor/dragonmantank/cron-expression/src/Cron/CronExpression.php +++ /dev/null @@ -1,568 +0,0 @@ - '0 0 1 1 *', - '@annually' => '0 0 1 1 *', - '@monthly' => '0 0 1 * *', - '@weekly' => '0 0 * * 0', - '@daily' => '0 0 * * *', - '@midnight' => '0 0 * * *', - '@hourly' => '0 * * * *', - ]; - - /** - * @var array CRON expression parts - */ - protected $cronParts; - - /** - * @var FieldFactoryInterface CRON field factory - */ - protected $fieldFactory; - - /** - * @var int Max iteration count when searching for next run date - */ - protected $maxIterationCount = 1000; - - /** - * @var array Order in which to test of cron parts - */ - protected static $order = [ - self::YEAR, - self::MONTH, - self::DAY, - self::WEEKDAY, - self::HOUR, - self::MINUTE, - ]; - - /** - * @var array - */ - private static $registeredAliases = self::MAPPINGS; - - /** - * Registered a user defined CRON Expression Alias. - * - * @throws LogicException If the expression or the alias name are invalid - * or if the alias is already registered. - */ - public static function registerAlias(string $alias, string $expression): void - { - try { - new self($expression); - } catch (InvalidArgumentException $exception) { - throw new LogicException("The expression `$expression` is invalid", 0, $exception); - } - - $shortcut = strtolower($alias); - if (1 !== preg_match('/^@\w+$/', $shortcut)) { - throw new LogicException("The alias `$alias` is invalid. It must start with an `@` character and contain alphanumeric (letters, numbers, regardless of case) plus underscore (_)."); - } - - if (isset(self::$registeredAliases[$shortcut])) { - throw new LogicException("The alias `$alias` is already registered."); - } - - self::$registeredAliases[$shortcut] = $expression; - } - - /** - * Unregistered a user defined CRON Expression Alias. - * - * @throws LogicException If the user tries to unregister a built-in alias - */ - public static function unregisterAlias(string $alias): bool - { - $shortcut = strtolower($alias); - if (isset(self::MAPPINGS[$shortcut])) { - throw new LogicException("The alias `$alias` is a built-in alias; it can not be unregistered."); - } - - if (!isset(self::$registeredAliases[$shortcut])) { - return false; - } - - unset(self::$registeredAliases[$shortcut]); - - return true; - } - - /** - * Tells whether a CRON Expression alias is registered. - */ - public static function supportsAlias(string $alias): bool - { - return isset(self::$registeredAliases[strtolower($alias)]); - } - - /** - * Returns all registered aliases as an associated array where the aliases are the key - * and their associated expressions are the values. - * - * @return array - */ - public static function getAliases(): array - { - return self::$registeredAliases; - } - - /** - * @deprecated since version 3.0.2, use __construct instead. - */ - public static function factory(string $expression, FieldFactoryInterface $fieldFactory = null): CronExpression - { - /** @phpstan-ignore-next-line */ - return new static($expression, $fieldFactory); - } - - /** - * Validate a CronExpression. - * - * @param string $expression the CRON expression to validate - * - * @return bool True if a valid CRON expression was passed. False if not. - */ - public static function isValidExpression(string $expression): bool - { - try { - new CronExpression($expression); - } catch (InvalidArgumentException $e) { - return false; - } - - return true; - } - - /** - * Parse a CRON expression. - * - * @param string $expression CRON expression (e.g. '8 * * * *') - * @param null|FieldFactoryInterface $fieldFactory Factory to create cron fields - */ - public function __construct(string $expression, FieldFactoryInterface $fieldFactory = null) - { - $shortcut = strtolower($expression); - $expression = self::$registeredAliases[$shortcut] ?? $expression; - - $this->fieldFactory = $fieldFactory ?: new FieldFactory(); - $this->setExpression($expression); - } - - /** - * Set or change the CRON expression. - * - * @param string $value CRON expression (e.g. 8 * * * *) - * - * @throws \InvalidArgumentException if not a valid CRON expression - * - * @return CronExpression - */ - public function setExpression(string $value): CronExpression - { - $split = preg_split('/\s/', $value, -1, PREG_SPLIT_NO_EMPTY); - Assert::isArray($split); - - $this->cronParts = $split; - if (\count($this->cronParts) < 5) { - throw new InvalidArgumentException( - $value . ' is not a valid CRON expression' - ); - } - - foreach ($this->cronParts as $position => $part) { - $this->setPart($position, $part); - } - - return $this; - } - - /** - * Set part of the CRON expression. - * - * @param int $position The position of the CRON expression to set - * @param string $value The value to set - * - * @throws \InvalidArgumentException if the value is not valid for the part - * - * @return CronExpression - */ - public function setPart(int $position, string $value): CronExpression - { - if (!$this->fieldFactory->getField($position)->validate($value)) { - throw new InvalidArgumentException( - 'Invalid CRON field value ' . $value . ' at position ' . $position - ); - } - - $this->cronParts[$position] = $value; - - return $this; - } - - /** - * Set max iteration count for searching next run dates. - * - * @param int $maxIterationCount Max iteration count when searching for next run date - * - * @return CronExpression - */ - public function setMaxIterationCount(int $maxIterationCount): CronExpression - { - $this->maxIterationCount = $maxIterationCount; - - return $this; - } - - /** - * Get a next run date relative to the current date or a specific date - * - * @param string|\DateTimeInterface $currentTime Relative calculation date - * @param int $nth Number of matches to skip before returning a - * matching next run date. 0, the default, will return the - * current date and time if the next run date falls on the - * current date and time. Setting this value to 1 will - * skip the first match and go to the second match. - * Setting this value to 2 will skip the first 2 - * matches and so on. - * @param bool $allowCurrentDate Set to TRUE to return the current date if - * it matches the cron expression. - * @param null|string $timeZone TimeZone to use instead of the system default - * - * @throws \RuntimeException on too many iterations - * @throws \Exception - * - * @return \DateTime - */ - public function getNextRunDate($currentTime = 'now', int $nth = 0, bool $allowCurrentDate = false, $timeZone = null): DateTime - { - return $this->getRunDate($currentTime, $nth, false, $allowCurrentDate, $timeZone); - } - - /** - * Get a previous run date relative to the current date or a specific date. - * - * @param string|\DateTimeInterface $currentTime Relative calculation date - * @param int $nth Number of matches to skip before returning - * @param bool $allowCurrentDate Set to TRUE to return the - * current date if it matches the cron expression - * @param null|string $timeZone TimeZone to use instead of the system default - * - * @throws \RuntimeException on too many iterations - * @throws \Exception - * - * @return \DateTime - * - * @see \Cron\CronExpression::getNextRunDate - */ - public function getPreviousRunDate($currentTime = 'now', int $nth = 0, bool $allowCurrentDate = false, $timeZone = null): DateTime - { - return $this->getRunDate($currentTime, $nth, true, $allowCurrentDate, $timeZone); - } - - /** - * Get multiple run dates starting at the current date or a specific date. - * - * @param int $total Set the total number of dates to calculate - * @param string|\DateTimeInterface|null $currentTime Relative calculation date - * @param bool $invert Set to TRUE to retrieve previous dates - * @param bool $allowCurrentDate Set to TRUE to return the - * current date if it matches the cron expression - * @param null|string $timeZone TimeZone to use instead of the system default - * - * @return \DateTime[] Returns an array of run dates - */ - public function getMultipleRunDates(int $total, $currentTime = 'now', bool $invert = false, bool $allowCurrentDate = false, $timeZone = null): array - { - $timeZone = $this->determineTimeZone($currentTime, $timeZone); - - if ('now' === $currentTime) { - $currentTime = new DateTime(); - } elseif ($currentTime instanceof DateTime) { - $currentTime = clone $currentTime; - } elseif ($currentTime instanceof DateTimeImmutable) { - $currentTime = DateTime::createFromFormat('U', $currentTime->format('U')); - } elseif (\is_string($currentTime)) { - $currentTime = new DateTime($currentTime); - } - - Assert::isInstanceOf($currentTime, DateTime::class); - $currentTime->setTimezone(new DateTimeZone($timeZone)); - - $matches = []; - for ($i = 0; $i < $total; ++$i) { - try { - $result = $this->getRunDate($currentTime, 0, $invert, $allowCurrentDate, $timeZone); - } catch (RuntimeException $e) { - break; - } - - $allowCurrentDate = false; - $currentTime = clone $result; - $matches[] = $result; - } - - return $matches; - } - - /** - * Get all or part of the CRON expression. - * - * @param int|string|null $part specify the part to retrieve or NULL to get the full - * cron schedule string - * - * @return null|string Returns the CRON expression, a part of the - * CRON expression, or NULL if the part was specified but not found - */ - public function getExpression($part = null): ?string - { - if (null === $part) { - return implode(' ', $this->cronParts); - } - - if (array_key_exists($part, $this->cronParts)) { - return $this->cronParts[$part]; - } - - return null; - } - - /** - * Gets the parts of the cron expression as an array. - * - * @return string[] - * The array of parts that make up this expression. - */ - public function getParts() - { - return $this->cronParts; - } - - /** - * Helper method to output the full expression. - * - * @return string Full CRON expression - */ - public function __toString(): string - { - return (string) $this->getExpression(); - } - - /** - * Determine if the cron is due to run based on the current date or a - * specific date. This method assumes that the current number of - * seconds are irrelevant, and should be called once per minute. - * - * @param string|\DateTimeInterface $currentTime Relative calculation date - * @param null|string $timeZone TimeZone to use instead of the system default - * - * @return bool Returns TRUE if the cron is due to run or FALSE if not - */ - public function isDue($currentTime = 'now', $timeZone = null): bool - { - $timeZone = $this->determineTimeZone($currentTime, $timeZone); - - if ('now' === $currentTime) { - $currentTime = new DateTime(); - } elseif ($currentTime instanceof DateTime) { - $currentTime = clone $currentTime; - } elseif ($currentTime instanceof DateTimeImmutable) { - $currentTime = DateTime::createFromFormat('U', $currentTime->format('U')); - } elseif (\is_string($currentTime)) { - $currentTime = new DateTime($currentTime); - } - - Assert::isInstanceOf($currentTime, DateTime::class); - $currentTime->setTimezone(new DateTimeZone($timeZone)); - - // drop the seconds to 0 - $currentTime->setTime((int) $currentTime->format('H'), (int) $currentTime->format('i'), 0); - - try { - return $this->getNextRunDate($currentTime, 0, true)->getTimestamp() === $currentTime->getTimestamp(); - } catch (Exception $e) { - return false; - } - } - - /** - * Get the next or previous run date of the expression relative to a date. - * - * @param string|\DateTimeInterface|null $currentTime Relative calculation date - * @param int $nth Number of matches to skip before returning - * @param bool $invert Set to TRUE to go backwards in time - * @param bool $allowCurrentDate Set to TRUE to return the - * current date if it matches the cron expression - * @param string|null $timeZone TimeZone to use instead of the system default - * - * @throws \RuntimeException on too many iterations - * @throws Exception - * - * @return \DateTime - */ - protected function getRunDate($currentTime = null, int $nth = 0, bool $invert = false, bool $allowCurrentDate = false, $timeZone = null): DateTime - { - $timeZone = $this->determineTimeZone($currentTime, $timeZone); - - if ($currentTime instanceof DateTime) { - $currentDate = clone $currentTime; - } elseif ($currentTime instanceof DateTimeImmutable) { - $currentDate = DateTime::createFromFormat('U', $currentTime->format('U')); - } elseif (\is_string($currentTime)) { - $currentDate = new DateTime($currentTime); - } else { - $currentDate = new DateTime('now'); - } - - Assert::isInstanceOf($currentDate, DateTime::class); - $currentDate->setTimezone(new DateTimeZone($timeZone)); - // Workaround for setTime causing an offset change: https://bugs.php.net/bug.php?id=81074 - $currentDate = DateTime::createFromFormat("!Y-m-d H:iO", $currentDate->format("Y-m-d H:iP"), $currentDate->getTimezone()); - if ($currentDate === false) { - throw new \RuntimeException('Unable to create date from format'); - } - $currentDate->setTimezone(new DateTimeZone($timeZone)); - - $nextRun = clone $currentDate; - - // We don't have to satisfy * or null fields - $parts = []; - $fields = []; - foreach (self::$order as $position) { - $part = $this->getExpression($position); - if (null === $part || '*' === $part) { - continue; - } - $parts[$position] = $part; - $fields[$position] = $this->fieldFactory->getField($position); - } - - if (isset($parts[self::DAY]) && isset($parts[self::WEEKDAY])) { - $domExpression = sprintf('%s %s %s %s *', $this->getExpression(0), $this->getExpression(1), $this->getExpression(2), $this->getExpression(3)); - $dowExpression = sprintf('%s %s * %s %s', $this->getExpression(0), $this->getExpression(1), $this->getExpression(3), $this->getExpression(4)); - - $domExpression = new self($domExpression); - $dowExpression = new self($dowExpression); - - $domRunDates = $domExpression->getMultipleRunDates($nth + 1, $currentTime, $invert, $allowCurrentDate, $timeZone); - $dowRunDates = $dowExpression->getMultipleRunDates($nth + 1, $currentTime, $invert, $allowCurrentDate, $timeZone); - - if ($parts[self::DAY] === '?' || $parts[self::DAY] === '*') { - $domRunDates = []; - } - - if ($parts[self::WEEKDAY] === '?' || $parts[self::WEEKDAY] === '*') { - $dowRunDates = []; - } - - $combined = array_merge($domRunDates, $dowRunDates); - usort($combined, function ($a, $b) { - return $a->format('Y-m-d H:i:s') <=> $b->format('Y-m-d H:i:s'); - }); - if ($invert) { - $combined = array_reverse($combined); - } - - return $combined[$nth]; - } - - // Set a hard limit to bail on an impossible date - for ($i = 0; $i < $this->maxIterationCount; ++$i) { - foreach ($parts as $position => $part) { - $satisfied = false; - // Get the field object used to validate this part - $field = $fields[$position]; - // Check if this is singular or a list - if (false === strpos($part, ',')) { - $satisfied = $field->isSatisfiedBy($nextRun, $part, $invert); - } else { - foreach (array_map('trim', explode(',', $part)) as $listPart) { - if ($field->isSatisfiedBy($nextRun, $listPart, $invert)) { - $satisfied = true; - - break; - } - } - } - - // If the field is not satisfied, then start over - if (!$satisfied) { - $field->increment($nextRun, $invert, $part); - - continue 2; - } - } - - // Skip this match if needed - if ((!$allowCurrentDate && $nextRun == $currentDate) || --$nth > -1) { - $this->fieldFactory->getField(self::MINUTE)->increment($nextRun, $invert, $parts[self::MINUTE] ?? null); - continue; - } - - return $nextRun; - } - - // @codeCoverageIgnoreStart - throw new RuntimeException('Impossible CRON expression'); - // @codeCoverageIgnoreEnd - } - - /** - * Workout what timeZone should be used. - * - * @param string|\DateTimeInterface|null $currentTime Relative calculation date - * @param string|null $timeZone TimeZone to use instead of the system default - * - * @return string - */ - protected function determineTimeZone($currentTime, ?string $timeZone): string - { - if (null !== $timeZone) { - return $timeZone; - } - - if ($currentTime instanceof DateTimeInterface) { - return $currentTime->getTimezone()->getName(); - } - - return date_default_timezone_get(); - } -} diff --git a/core/vendor/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php b/core/vendor/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php deleted file mode 100644 index 39ff597830..0000000000 --- a/core/vendor/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php +++ /dev/null @@ -1,164 +0,0 @@ - - */ -class DayOfMonthField extends AbstractField -{ - /** - * {@inheritdoc} - */ - protected $rangeStart = 1; - - /** - * {@inheritdoc} - */ - protected $rangeEnd = 31; - - /** - * Get the nearest day of the week for a given day in a month. - * - * @param int $currentYear Current year - * @param int $currentMonth Current month - * @param int $targetDay Target day of the month - * - * @return \DateTime|null Returns the nearest date - */ - private static function getNearestWeekday(int $currentYear, int $currentMonth, int $targetDay): ?DateTime - { - $tday = str_pad((string) $targetDay, 2, '0', STR_PAD_LEFT); - $target = DateTime::createFromFormat('Y-m-d', "{$currentYear}-{$currentMonth}-{$tday}"); - - if ($target === false) { - return null; - } - - $currentWeekday = (int) $target->format('N'); - - if ($currentWeekday < 6) { - return $target; - } - - $lastDayOfMonth = $target->format('t'); - foreach ([-1, 1, -2, 2] as $i) { - $adjusted = $targetDay + $i; - if ($adjusted > 0 && $adjusted <= $lastDayOfMonth) { - $target->setDate($currentYear, $currentMonth, $adjusted); - - if ((int) $target->format('N') < 6 && (int) $target->format('m') === $currentMonth) { - return $target; - } - } - } - - return null; - } - - /** - * {@inheritdoc} - */ - public function isSatisfiedBy(DateTimeInterface $date, $value, bool $invert): bool - { - // ? states that the field value is to be skipped - if ('?' === $value) { - return true; - } - - $fieldValue = $date->format('d'); - - // Check to see if this is the last day of the month - if ('L' === $value) { - return $fieldValue === $date->format('t'); - } - - // Check to see if this is the nearest weekday to a particular value - if ($wPosition = strpos($value, 'W')) { - // Parse the target day - $targetDay = (int) substr($value, 0, $wPosition); - // Find out if the current day is the nearest day of the week - $nearest = self::getNearestWeekday( - (int) $date->format('Y'), - (int) $date->format('m'), - $targetDay - ); - if ($nearest) { - return $date->format('j') === $nearest->format('j'); - } - - throw new \RuntimeException('Unable to return nearest weekday'); - } - - return $this->isSatisfied((int) $date->format('d'), $value); - } - - /** - * @inheritDoc - * - * @param \DateTime|\DateTimeImmutable $date - */ - public function increment(DateTimeInterface &$date, $invert = false, $parts = null): FieldInterface - { - if (! $invert) { - $date = $date->add(new \DateInterval('P1D')); - $date = $date->setTime(0, 0); - } else { - $date = $date->sub(new \DateInterval('P1D')); - $date = $date->setTime(23, 59); - } - - return $this; - } - - /** - * {@inheritdoc} - */ - public function validate(string $value): bool - { - $basicChecks = parent::validate($value); - - // Validate that a list don't have W or L - if (false !== strpos($value, ',') && (false !== strpos($value, 'W') || false !== strpos($value, 'L'))) { - return false; - } - - if (!$basicChecks) { - if ('?' === $value) { - return true; - } - - if ('L' === $value) { - return true; - } - - if (preg_match('/^(.*)W$/', $value, $matches)) { - return $this->validate($matches[1]); - } - - return false; - } - - return $basicChecks; - } -} diff --git a/core/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php b/core/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php deleted file mode 100644 index b9bbf48b68..0000000000 --- a/core/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php +++ /dev/null @@ -1,194 +0,0 @@ - 'MON', 2 => 'TUE', 3 => 'WED', 4 => 'THU', 5 => 'FRI', 6 => 'SAT', 7 => 'SUN']; - - /** - * Constructor - */ - public function __construct() - { - $this->nthRange = range(1, 5); - parent::__construct(); - } - - /** - * @inheritDoc - */ - public function isSatisfiedBy(DateTimeInterface $date, $value, bool $invert): bool - { - if ('?' === $value) { - return true; - } - - // Convert text day of the week values to integers - $value = $this->convertLiterals($value); - - $currentYear = (int) $date->format('Y'); - $currentMonth = (int) $date->format('m'); - $lastDayOfMonth = (int) $date->format('t'); - - // Find out if this is the last specific weekday of the month - if ($lPosition = strpos($value, 'L')) { - $weekday = $this->convertLiterals(substr($value, 0, $lPosition)); - $weekday %= 7; - - $daysInMonth = (int) $date->format('t'); - $remainingDaysInMonth = $daysInMonth - (int) $date->format('d'); - return (($weekday === (int) $date->format('w')) && ($remainingDaysInMonth < 7)); - } - - // Handle # hash tokens - if (strpos($value, '#')) { - [$weekday, $nth] = explode('#', $value); - - if (!is_numeric($nth)) { - throw new InvalidArgumentException("Hashed weekdays must be numeric, {$nth} given"); - } else { - $nth = (int) $nth; - } - - // 0 and 7 are both Sunday, however 7 matches date('N') format ISO-8601 - if ('0' === $weekday) { - $weekday = 7; - } - - $weekday = (int) $this->convertLiterals((string) $weekday); - - // Validate the hash fields - if ($weekday < 0 || $weekday > 7) { - throw new InvalidArgumentException("Weekday must be a value between 0 and 7. {$weekday} given"); - } - - if (!\in_array($nth, $this->nthRange, true)) { - throw new InvalidArgumentException("There are never more than 5 or less than 1 of a given weekday in a month, {$nth} given"); - } - - // The current weekday must match the targeted weekday to proceed - if ((int) $date->format('N') !== $weekday) { - return false; - } - - $tdate = clone $date; - $tdate = $tdate->setDate($currentYear, $currentMonth, 1); - $dayCount = 0; - $currentDay = 1; - while ($currentDay < $lastDayOfMonth + 1) { - if ((int) $tdate->format('N') === $weekday) { - if (++$dayCount >= $nth) { - break; - } - } - $tdate = $tdate->setDate($currentYear, $currentMonth, ++$currentDay); - } - - return (int) $date->format('j') === $currentDay; - } - - // Handle day of the week values - if (false !== strpos($value, '-')) { - $parts = explode('-', $value); - if ('7' === $parts[0]) { - $parts[0] = 0; - } elseif ('0' === $parts[1]) { - $parts[1] = 7; - } - $value = implode('-', $parts); - } - - // Test to see which Sunday to use -- 0 == 7 == Sunday - $format = \in_array(7, array_map(function ($value) { - return (int) $value; - }, str_split($value)), true) ? 'N' : 'w'; - $fieldValue = (int) $date->format($format); - - return $this->isSatisfied($fieldValue, $value); - } - - /** - * @inheritDoc - */ - public function increment(DateTimeInterface &$date, $invert = false, $parts = null): FieldInterface - { - if (! $invert) { - $date = $date->add(new \DateInterval('P1D')); - $date = $date->setTime(0, 0); - } else { - $date = $date->sub(new \DateInterval('P1D')); - $date = $date->setTime(23, 59); - } - - return $this; - } - - /** - * {@inheritdoc} - */ - public function validate(string $value): bool - { - $basicChecks = parent::validate($value); - - if (!$basicChecks) { - if ('?' === $value) { - return true; - } - - // Handle the # value - if (false !== strpos($value, '#')) { - $chunks = explode('#', $value); - $chunks[0] = $this->convertLiterals($chunks[0]); - - if (parent::validate($chunks[0]) && is_numeric($chunks[1]) && \in_array((int) $chunks[1], $this->nthRange, true)) { - return true; - } - } - - if (preg_match('/^(.*)L$/', $value, $matches)) { - return $this->validate($matches[1]); - } - - return false; - } - - return $basicChecks; - } -} diff --git a/core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactory.php b/core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactory.php deleted file mode 100644 index 839b2757dc..0000000000 --- a/core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactory.php +++ /dev/null @@ -1,52 +0,0 @@ -fields[$position] ?? $this->fields[$position] = $this->instantiateField($position); - } - - private function instantiateField(int $position): FieldInterface - { - switch ($position) { - case CronExpression::MINUTE: - return new MinutesField(); - case CronExpression::HOUR: - return new HoursField(); - case CronExpression::DAY: - return new DayOfMonthField(); - case CronExpression::MONTH: - return new MonthField(); - case CronExpression::WEEKDAY: - return new DayOfWeekField(); - } - - throw new InvalidArgumentException( - ($position + 1) . ' is not a valid position' - ); - } -} diff --git a/core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactoryInterface.php b/core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactoryInterface.php deleted file mode 100644 index 8bd3c6581c..0000000000 --- a/core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactoryInterface.php +++ /dev/null @@ -1,8 +0,0 @@ -format('H'); - $retval = $this->isSatisfied($checkValue, $value); - if ($retval) { - return $retval; - } - - // Are we on the edge of a transition - $lastTransition = $this->getPastTransition($date); - if (($lastTransition !== null) && ($lastTransition["ts"] > ((int) $date->format('U') - 3600))) { - $dtLastOffset = clone $date; - $this->timezoneSafeModify($dtLastOffset, "-1 hour"); - $lastOffset = $dtLastOffset->getOffset(); - - $dtNextOffset = clone $date; - $this->timezoneSafeModify($dtNextOffset, "+1 hour"); - $nextOffset = $dtNextOffset->getOffset(); - - $offsetChange = $nextOffset - $lastOffset; - if ($offsetChange >= 3600) { - $checkValue -= 1; - return $this->isSatisfied($checkValue, $value); - } - if ((! $invert) && ($offsetChange <= -3600)) { - $checkValue += 1; - return $this->isSatisfied($checkValue, $value); - } - } - - return $retval; - } - - public function getPastTransition(DateTimeInterface $date): ?array - { - $currentTimestamp = (int) $date->format('U'); - if ( - ($this->transitions === null) - || ($this->transitionsStart < ($currentTimestamp + 86400)) - || ($this->transitionsEnd > ($currentTimestamp - 86400)) - ) { - // We start a day before current time so we can differentiate between the first transition entry - // and a change that happens now - $dtLimitStart = clone $date; - $dtLimitStart = $dtLimitStart->modify("-12 months"); - $dtLimitEnd = clone $date; - $dtLimitEnd = $dtLimitEnd->modify('+12 months'); - - $this->transitions = $date->getTimezone()->getTransitions( - $dtLimitStart->getTimestamp(), - $dtLimitEnd->getTimestamp() - ); - if (empty($this->transitions)) { - return null; - } - $this->transitionsStart = $dtLimitStart->getTimestamp(); - $this->transitionsEnd = $dtLimitEnd->getTimestamp(); - } - - $nextTransition = null; - foreach ($this->transitions as $transition) { - if ($transition["ts"] > $currentTimestamp) { - continue; - } - - if (($nextTransition !== null) && ($transition["ts"] < $nextTransition["ts"])) { - continue; - } - - $nextTransition = $transition; - } - - return ($nextTransition ?? null); - } - - /** - * {@inheritdoc} - * - * @param string|null $parts - */ - public function increment(DateTimeInterface &$date, $invert = false, $parts = null): FieldInterface - { - $originalTimestamp = (int) $date->format('U'); - - // Change timezone to UTC temporarily. This will - // allow us to go back or forwards and hour even - // if DST will be changed between the hours. - if (null === $parts || '*' === $parts) { - if ($invert) { - $date = $date->sub(new \DateInterval('PT1H')); - } else { - $date = $date->add(new \DateInterval('PT1H')); - } - - $date = $this->setTimeHour($date, $invert, $originalTimestamp); - return $this; - } - - $parts = false !== strpos($parts, ',') ? explode(',', $parts) : [$parts]; - $hours = []; - foreach ($parts as $part) { - $hours = array_merge($hours, $this->getRangeForExpression($part, 23)); - } - - $current_hour = (int) $date->format('H'); - $position = $invert ? \count($hours) - 1 : 0; - $countHours = \count($hours); - if ($countHours > 1) { - for ($i = 0; $i < $countHours - 1; ++$i) { - if ((!$invert && $current_hour >= $hours[$i] && $current_hour < $hours[$i + 1]) || - ($invert && $current_hour > $hours[$i] && $current_hour <= $hours[$i + 1])) { - $position = $invert ? $i : $i + 1; - - break; - } - } - } - - $target = (int) $hours[$position]; - $originalHour = (int)$date->format('H'); - - $originalDay = (int)$date->format('d'); - $previousOffset = $date->getOffset(); - - if (! $invert) { - if ($originalHour >= $target) { - $distance = 24 - $originalHour; - $date = $this->timezoneSafeModify($date, "+{$distance} hours"); - - $actualDay = (int)$date->format('d'); - $actualHour = (int)$date->format('H'); - if (($actualDay !== ($originalDay + 1)) && ($actualHour !== 0)) { - $offsetChange = ($previousOffset - $date->getOffset()); - $date = $this->timezoneSafeModify($date, "+{$offsetChange} seconds"); - } - - $originalHour = (int)$date->format('H'); - } - - $distance = $target - $originalHour; - $date = $this->timezoneSafeModify($date, "+{$distance} hours"); - } else { - if ($originalHour <= $target) { - $distance = ($originalHour + 1); - $date = $this->timezoneSafeModify($date, "-" . $distance . " hours"); - - $actualDay = (int)$date->format('d'); - $actualHour = (int)$date->format('H'); - if (($actualDay !== ($originalDay - 1)) && ($actualHour !== 23)) { - $offsetChange = ($previousOffset - $date->getOffset()); - $date = $this->timezoneSafeModify($date, "+{$offsetChange} seconds"); - } - - $originalHour = (int)$date->format('H'); - } - - $distance = $originalHour - $target; - $date = $this->timezoneSafeModify($date, "-{$distance} hours"); - } - - $date = $this->setTimeHour($date, $invert, $originalTimestamp); - - $actualHour = (int)$date->format('H'); - if ($invert && ($actualHour === ($target - 1) || (($actualHour === 23) && ($target === 0)))) { - $date = $this->timezoneSafeModify($date, "+1 hour"); - } - - return $this; - } -} diff --git a/core/vendor/dragonmantank/cron-expression/src/Cron/MinutesField.php b/core/vendor/dragonmantank/cron-expression/src/Cron/MinutesField.php deleted file mode 100644 index eda91098e8..0000000000 --- a/core/vendor/dragonmantank/cron-expression/src/Cron/MinutesField.php +++ /dev/null @@ -1,96 +0,0 @@ -isSatisfied((int)$date->format('i'), $value); - } - - /** - * {@inheritdoc} - * {@inheritDoc} - * - * @param string|null $parts - */ - public function increment(DateTimeInterface &$date, $invert = false, $parts = null): FieldInterface - { - if (is_null($parts)) { - $date = $this->timezoneSafeModify($date, ($invert ? "-" : "+") ."1 minute"); - return $this; - } - - $current_minute = (int) $date->format('i'); - - $parts = false !== strpos($parts, ',') ? explode(',', $parts) : [$parts]; - $minutes = []; - foreach ($parts as $part) { - $minutes = array_merge($minutes, $this->getRangeForExpression($part, 59)); - } - - $position = $invert ? \count($minutes) - 1 : 0; - if (\count($minutes) > 1) { - for ($i = 0; $i < \count($minutes) - 1; ++$i) { - if ((!$invert && $current_minute >= $minutes[$i] && $current_minute < $minutes[$i + 1]) || - ($invert && $current_minute > $minutes[$i] && $current_minute <= $minutes[$i + 1])) { - $position = $invert ? $i : $i + 1; - - break; - } - } - } - - $target = (int) $minutes[$position]; - $originalMinute = (int) $date->format("i"); - - if (! $invert) { - if ($originalMinute >= $target) { - $distance = 60 - $originalMinute; - $date = $this->timezoneSafeModify($date, "+{$distance} minutes"); - - $originalMinute = (int) $date->format("i"); - } - - $distance = $target - $originalMinute; - $date = $this->timezoneSafeModify($date, "+{$distance} minutes"); - } else { - if ($originalMinute <= $target) { - $distance = ($originalMinute + 1); - $date = $this->timezoneSafeModify($date, "-{$distance} minutes"); - - $originalMinute = (int) $date->format("i"); - } - - $distance = $originalMinute - $target; - $date = $this->timezoneSafeModify($date, "-{$distance} minutes"); - } - - return $this; - } -} diff --git a/core/vendor/dragonmantank/cron-expression/src/Cron/MonthField.php b/core/vendor/dragonmantank/cron-expression/src/Cron/MonthField.php deleted file mode 100644 index 5a15fbb8ba..0000000000 --- a/core/vendor/dragonmantank/cron-expression/src/Cron/MonthField.php +++ /dev/null @@ -1,61 +0,0 @@ - 'JAN', 2 => 'FEB', 3 => 'MAR', 4 => 'APR', 5 => 'MAY', 6 => 'JUN', 7 => 'JUL', - 8 => 'AUG', 9 => 'SEP', 10 => 'OCT', 11 => 'NOV', 12 => 'DEC', ]; - - /** - * {@inheritdoc} - */ - public function isSatisfiedBy(DateTimeInterface $date, $value, bool $invert): bool - { - if ($value === '?') { - return true; - } - - $value = $this->convertLiterals($value); - - return $this->isSatisfied((int) $date->format('m'), $value); - } - - /** - * @inheritDoc - * - * @param \DateTime|\DateTimeImmutable $date - */ - public function increment(DateTimeInterface &$date, $invert = false, $parts = null): FieldInterface - { - if (! $invert) { - $date = $date->modify('first day of next month'); - $date = $date->setTime(0, 0); - } else { - $date = $date->modify('last day of previous month'); - $date = $date->setTime(23, 59); - } - - return $this; - } -} diff --git a/core/vendor/egulias/email-validator/src/EmailValidator.php b/core/vendor/egulias/email-validator/src/EmailValidator.php index a30f21dcd3..5a2e5c822e 100644 --- a/core/vendor/egulias/email-validator/src/EmailValidator.php +++ b/core/vendor/egulias/email-validator/src/EmailValidator.php @@ -2,7 +2,7 @@ namespace Egulias\EmailValidator; -use Egulias\EmailValidator\Exception\InvalidEmail; +use Egulias\EmailValidator\Result\InvalidEmail; use Egulias\EmailValidator\Validation\EmailValidation; class EmailValidator @@ -15,12 +15,12 @@ class EmailValidator /** * @var Warning\Warning[] */ - protected $warnings = []; + private $warnings = []; /** - * @var InvalidEmail|null + * @var ?InvalidEmail */ - protected $error; + private $error; public function __construct() { @@ -32,7 +32,7 @@ public function __construct() * @param EmailValidation $emailValidation * @return bool */ - public function isValid($email, EmailValidation $emailValidation) + public function isValid(string $email, EmailValidation $emailValidation) { $isValid = $emailValidation->isValid($email, $this->lexer); $this->warnings = $emailValidation->getWarnings(); diff --git a/core/vendor/egulias/email-validator/src/Exception/AtextAfterCFWS.php b/core/vendor/egulias/email-validator/src/Exception/AtextAfterCFWS.php deleted file mode 100644 index 97f41a2caa..0000000000 --- a/core/vendor/egulias/email-validator/src/Exception/AtextAfterCFWS.php +++ /dev/null @@ -1,9 +0,0 @@ -lexer = $lexer; - } - - /** - * @return \Egulias\EmailValidator\Warning\Warning[] - */ - public function getWarnings() - { - return $this->warnings; - } - - /** - * @param string $str - */ - abstract public function parse($str); - - /** @return int */ - public function getOpenedParenthesis() - { - return $this->openedParenthesis; - } - - /** - * validateQuotedPair - */ - protected function validateQuotedPair() - { - if (!($this->lexer->token['type'] === EmailLexer::INVALID - || $this->lexer->token['type'] === EmailLexer::C_DEL)) { - throw new ExpectingQPair(); - } - - $this->warnings[QuotedPart::CODE] = - new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); - } - - protected function parseComments() - { - $this->openedParenthesis = 1; - $this->isUnclosedComment(); - $this->warnings[Comment::CODE] = new Comment(); - while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { - if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) { - $this->openedParenthesis++; - } - $this->warnEscaping(); - $this->lexer->moveNext(); - } - - $this->lexer->moveNext(); - if ($this->lexer->isNextTokenAny(array(EmailLexer::GENERIC, EmailLexer::S_EMPTY))) { - throw new ExpectingATEXT(); - } - - if ($this->lexer->isNextToken(EmailLexer::S_AT)) { - $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); - } - } - - /** - * @return bool - */ - protected function isUnclosedComment() - { - try { - $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS); - return true; - } catch (\RuntimeException $e) { - throw new UnclosedComment(); - } - } - - protected function parseFWS() - { - $previous = $this->lexer->getPrevious(); - - $this->checkCRLFInFWS(); - - if ($this->lexer->token['type'] === EmailLexer::S_CR) { - throw new CRNoLF(); - } - - if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] !== EmailLexer::S_AT) { - throw new AtextAfterCFWS(); - } - - if ($this->lexer->token['type'] === EmailLexer::S_LF || $this->lexer->token['type'] === EmailLexer::C_NUL) { - throw new ExpectingCTEXT(); - } - - if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous['type'] === EmailLexer::S_AT) { - $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); - } else { - $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); - } - } - - protected function checkConsecutiveDots() - { - if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::S_DOT)) { - throw new ConsecutiveDot(); - } - } - - /** - * @return bool - */ - protected function isFWS() - { - if ($this->escaped()) { - return false; - } - - if ($this->lexer->token['type'] === EmailLexer::S_SP || - $this->lexer->token['type'] === EmailLexer::S_HTAB || - $this->lexer->token['type'] === EmailLexer::S_CR || - $this->lexer->token['type'] === EmailLexer::S_LF || - $this->lexer->token['type'] === EmailLexer::CRLF - ) { - return true; - } - - return false; - } - - /** - * @return bool - */ - protected function escaped() - { - $previous = $this->lexer->getPrevious(); - - if ($previous && $previous['type'] === EmailLexer::S_BACKSLASH - && - $this->lexer->token['type'] !== EmailLexer::GENERIC - ) { - return true; - } - - return false; - } - - /** - * @return bool - */ - protected function warnEscaping() - { - if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) { - return false; - } - - if ($this->lexer->isNextToken(EmailLexer::GENERIC)) { - throw new ExpectingATEXT(); - } - - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) { - return false; - } - - $this->warnings[QuotedPart::CODE] = - new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); - return true; - - } - - /** - * @param bool $hasClosingQuote - * - * @return bool - */ - protected function checkDQUOTE($hasClosingQuote) - { - if ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE) { - return $hasClosingQuote; - } - if ($hasClosingQuote) { - return $hasClosingQuote; - } - $previous = $this->lexer->getPrevious(); - if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] === EmailLexer::GENERIC) { - throw new ExpectingATEXT(); - } - - try { - $this->lexer->find(EmailLexer::S_DQUOTE); - $hasClosingQuote = true; - } catch (\Exception $e) { - throw new UnclosedQuotedString(); - } - $this->warnings[QuotedString::CODE] = new QuotedString($previous['value'], $this->lexer->token['value']); - - return $hasClosingQuote; - } - - protected function checkCRLFInFWS() - { - if ($this->lexer->token['type'] !== EmailLexer::CRLF) { - return; - } - - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { - throw new CRLFX2(); - } - - if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { - throw new CRLFAtTheEnd(); - } - } -} diff --git a/core/vendor/egulias/email-validator/src/Result/MultipleErrors.php b/core/vendor/egulias/email-validator/src/Result/MultipleErrors.php new file mode 100644 index 0000000000..5fa85afc9e --- /dev/null +++ b/core/vendor/egulias/email-validator/src/Result/MultipleErrors.php @@ -0,0 +1,56 @@ +reasons[$reason->code()] = $reason; + } + + /** + * @return Reason[] + */ + public function getReasons() : array + { + return $this->reasons; + } + + public function reason() : Reason + { + return 0 !== count($this->reasons) + ? current($this->reasons) + : new EmptyReason(); + } + + public function description() : string + { + $description = ''; + foreach($this->reasons as $reason) { + $description .= $reason->description() . PHP_EOL; + } + + return $description; + } + + public function code() : int + { + return 0; + } +} diff --git a/core/vendor/egulias/email-validator/src/Result/Reason/CRLFX2.php b/core/vendor/egulias/email-validator/src/Result/Reason/CRLFX2.php new file mode 100644 index 0000000000..6123564909 --- /dev/null +++ b/core/vendor/egulias/email-validator/src/Result/Reason/CRLFX2.php @@ -0,0 +1,16 @@ +detailedDescription; + } +} diff --git a/core/vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php b/core/vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php new file mode 100644 index 0000000000..64f5f7c3e8 --- /dev/null +++ b/core/vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php @@ -0,0 +1,16 @@ +setChecks(Spoofchecker::SINGLE_SCRIPT); @@ -37,14 +38,14 @@ public function isValid($email, EmailLexer $emailLexer) } /** - * @return InvalidEmail|null + * @return InvalidEmail */ - public function getError() + public function getError() : ?InvalidEmail { return $this->error; } - public function getWarnings() + public function getWarnings() : array { return []; } diff --git a/core/vendor/egulias/email-validator/src/Validation/MultipleErrors.php b/core/vendor/egulias/email-validator/src/Validation/MultipleErrors.php deleted file mode 100644 index 3be5973266..0000000000 --- a/core/vendor/egulias/email-validator/src/Validation/MultipleErrors.php +++ /dev/null @@ -1,32 +0,0 @@ -errors = $errors; - parent::__construct(); - } - - /** - * @return InvalidEmail[] - */ - public function getErrors() - { - return $this->errors; - } -} diff --git a/core/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php b/core/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php index 6b31e5440e..06885ed71a 100644 --- a/core/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php +++ b/core/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php @@ -3,8 +3,8 @@ namespace Egulias\EmailValidator\Validation; use Egulias\EmailValidator\EmailLexer; -use Egulias\EmailValidator\Exception\InvalidEmail; -use Egulias\EmailValidator\Validation\Error\RFCWarnings; +use Egulias\EmailValidator\Result\InvalidEmail; +use Egulias\EmailValidator\Result\Reason\RFCWarnings; class NoRFCWarningsValidation extends RFCValidation { @@ -16,7 +16,7 @@ class NoRFCWarningsValidation extends RFCValidation /** * {@inheritdoc} */ - public function isValid($email, EmailLexer $emailLexer) + public function isValid(string $email, EmailLexer $emailLexer) : bool { if (!parent::isValid($email, $emailLexer)) { return false; @@ -26,7 +26,7 @@ public function isValid($email, EmailLexer $emailLexer) return true; } - $this->error = new RFCWarnings(); + $this->error = new InvalidEmail(new RFCWarnings(), ''); return false; } @@ -34,7 +34,7 @@ public function isValid($email, EmailLexer $emailLexer) /** * {@inheritdoc} */ - public function getError() + public function getError() : ?InvalidEmail { return $this->error ?: parent::getError(); } diff --git a/core/vendor/egulias/email-validator/src/Warning/DomainTooLong.php b/core/vendor/egulias/email-validator/src/Warning/DomainTooLong.php deleted file mode 100644 index 61ff17a767..0000000000 --- a/core/vendor/egulias/email-validator/src/Warning/DomainTooLong.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Domain is too long, exceeds 255 chars'; - $this->rfcNumber = 5322; - } -} diff --git a/core/vendor/egulias/email-validator/src/Warning/LabelTooLong.php b/core/vendor/egulias/email-validator/src/Warning/LabelTooLong.php deleted file mode 100644 index daf07f4083..0000000000 --- a/core/vendor/egulias/email-validator/src/Warning/LabelTooLong.php +++ /dev/null @@ -1,14 +0,0 @@ -message = 'Label too long'; - $this->rfcNumber = 5322; - } -} diff --git a/core/vendor/egulias/email-validator/src/Warning/Warning.php b/core/vendor/egulias/email-validator/src/Warning/Warning.php index 0b748dd73a..e5b6ad8efa 100644 --- a/core/vendor/egulias/email-validator/src/Warning/Warning.php +++ b/core/vendor/egulias/email-validator/src/Warning/Warning.php @@ -32,7 +32,7 @@ public function message() */ public function code() { - return static::CODE; + return self::CODE; } /** diff --git a/core/vendor/evocms-services/document-manager/composer.json b/core/vendor/evocms-services/document-manager/composer.json deleted file mode 100644 index db23ff62e9..0000000000 --- a/core/vendor/evocms-services/document-manager/composer.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "evocms-services/document-manager", - "license": "MIT", - "authors": [ - { - "name": "Alexander Pashkevich", - "email": "sertious2008.wortk3@gmail.com" - } - ], - "require": { - - }, - "autoload": { - "psr-4": { - "EvolutionCMS\\DocumentManager\\": "src" - } - } -} diff --git a/core/vendor/evocms-services/document-manager/src/Facades/DocumentManager.php b/core/vendor/evocms-services/document-manager/src/Facades/DocumentManager.php deleted file mode 100644 index 90e57533d9..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Facades/DocumentManager.php +++ /dev/null @@ -1,16 +0,0 @@ -app->singleton('DocumentManager', function ($app) { - return new DocumentManager($app); - }); - } -} diff --git a/core/vendor/evocms-services/document-manager/src/Services/DocumentManager.php b/core/vendor/evocms-services/document-manager/src/Services/DocumentManager.php deleted file mode 100644 index 2cb2037073..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Services/DocumentManager.php +++ /dev/null @@ -1,77 +0,0 @@ -find($id); - } - - public function create(array $userData, bool $events = true, bool $cache = true) - { - $document = new DocumentCreate($userData, $events, $cache); - return $document->process(); - } - - public function edit(array $userData, bool $events = true, bool $cache = true) - { - $document = new DocumentEdit($userData, $events, $cache); - return $document->process(); - } - - public function duplicate(array $userData, bool $events = true, bool $cache = true) - { - $document = new DocumentDuplicate($userData, $events, $cache); - return $document->process(); - } - - public function delete(array $userData, bool $events = true, bool $cache = true) - { - $username = new DocumentDelete($userData, $events, $cache); - return $username->process(); - } - - public function undelete(array $userData, bool $events = true, bool $cache = true) - { - $username = new DocumentUndelete($userData, $events, $cache); - return $username->process(); - } - - public function setGroups(array $userData, bool $events = true, bool $cache = true) - { - $user = new DocumentSetGroups($userData, $events, $cache); - return $user->process(); - } - - - public function publish(array $userData, bool $events = true, bool $cache = true) - { - $user = new DocumentPublish($userData, $events, $cache); - return $user->process(); - } - - public function unpublish(array $userData, bool $events = true, bool $cache = true) - { - $user = new DocumentUnpublish($userData, $events, $cache); - return $user->process(); - } - - public function clearCart(array $userData = [], bool $events = true, bool $cache = true) - { - $user = new DocumentClearCart($userData, $events, $cache); - return $user->process(); - } - -} diff --git a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentClearCart.php b/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentClearCart.php deleted file mode 100644 index e95aafc8b1..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentClearCart.php +++ /dev/null @@ -1,154 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->documentData = $documentData; - $this->events = $events; - $this->cache = $cache; - - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - ]; - - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - - $ids = \EvolutionCMS\Models\SiteContent::query()->withTrashed()->where('deleted', 1)->pluck('id')->toArray(); - if ($this->events) { - // invoke OnBeforeEmptyTrash event - EvolutionCMS()->invokeEvent("OnBeforeEmptyTrash", - array( - "ids" => $ids - )); - } - // remove the document groups link. - \EvolutionCMS\Models\DocumentGroup::query()->whereIn('document', $ids)->delete(); - - // remove the TV content values. - \EvolutionCMS\Models\SiteTmplvarContentvalue::query()->whereIn('contentid', $ids)->delete(); - - //'undelete' the document. - \EvolutionCMS\Models\SiteContent::query()->withTrashed()->where('deleted', 1)->forceDelete(); - - // invoke OnEmptyTrash event - if ($this->events) { - EvolutionCMS()->invokeEvent("OnEmptyTrash", - array( - "ids" => $ids - )); - } - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - return SiteContent::query()->withTrashed()->first(); - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return EvolutionCMS()->hasPermission('delete_document'); - } - - /** - * @return bool - */ - public function validate(): bool - { - return true; - } - - -} diff --git a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentCreate.php b/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentCreate.php deleted file mode 100644 index 0ccbb20e65..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentCreate.php +++ /dev/null @@ -1,357 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->documentData = $documentData; - $this->events = $events; - $this->cache = $cache; - $this->currentDate = EvolutionCMS()->timestamp((int)get_by_key($_SERVER, 'REQUEST_TIME', 0)); - - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'pagetitle' => ['required'], - 'template' => ['required'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'pagetitle.required' => Lang::get("global.required_field", ['field' => 'pagetitle']), - 'template.required' => Lang::get("global.required_field", ['field' => 'template']), - ]; - - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $this->prepareDocument(); - $this->prepareAliasDocument(); - $this->prepareCreateDocument(); - // invoke OnBeforeDocFormSave event - if ($this->events) { - EvolutionCMS()->invokeEvent("OnBeforeDocFormSave", array( - "mode" => "new", - "user" => $this->documentData['id'], - )); - } -//var_dump($this->documentData); -// die(); - if (isset($this->documentData['pub_date']) && !is_numeric($this->documentData['pub_date'])) { - unset($this->documentData['pub_date']); - } - if (isset($this->documentData['unpub_date']) && !is_numeric($this->documentData['unpub_date'])) { - unset($this->documentData['unpub_date']); - } - $document = SiteContent::query()->withTrashed()->create($this->documentData); - $this->documentData['id'] = $document->getKey(); - - $this->prepareTV(); - $this->saveTVs(); - $this->updateParent(); - - if ($this->events) { - // invoke OnDocFormSave event - EvolutionCMS()->invokeEvent("OnDocFormSave", array( - "mode" => "new", - "id" => $this->documentData['id'] - )); - } - - - $_SESSION['itemname'] = $this->documentData['pagetitle']; - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - - return $document; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->documentData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - public function prepareDocument() - { - if (!isset($this->documentData['alias'])) { - $this->documentData['alias'] = false; - } - if (!isset($this->documentData['id'])) { - $this->documentData['id'] = false; - } - - - if (isset($this->documentData['pagetitle']) && trim($this->documentData['pagetitle']) == "") { - if ($this->documentData['type'] == "reference") { - $this->documentData['pagetitle'] = Lang::get('global.untitled_weblink'); - } else { - $this->documentData['pagetitle'] = Lang::get('global.untitled_resource'); - } - } - - - if (!isset($this->documentData['pub_date'])) { - $this->documentData['pub_date'] = 0; - } else { - $this->documentData['pub_date'] = EvolutionCMS()->toTimeStamp($this->documentData['pub_date']); - - if ($this->documentData['pub_date'] < $this->currentDate) { - $this->documentData['published'] = 1; - } elseif ($this->documentData['pub_date'] > $this->currentDate) { - $this->documentData['published'] = 0; - } - } - - if (!isset($this->documentData['unpub_date'])) { - $this->documentData['unpub_date'] = 0; - } else { - $this->documentData['unpub_date'] = EvolutionCMS()->toTimeStamp($this->documentData['unpub_date']); - if ($this->documentData['unpub_date'] < $this->currentDate) { - $this->documentData['published'] = 0; - } - } - - } - - public function prepareAliasDocument() - { - - // friendly url alias checks - if (EvolutionCMS()->getConfig('friendly_urls')) { - // auto assign alias - if (!$this->documentData['alias'] && EvolutionCMS()->getConfig('automatic_alias')) { - $this->documentData['alias'] = strtolower(EvolutionCMS()->stripAlias(trim($this->documentData['pagetitle']))); - if (!EvolutionCMS()->getConfig('allow_duplicate_alias')) { - - if (\EvolutionCMS\Models\SiteContent::query() - ->withTrashed() - ->where('id', '<>', $this->documentData['id']) - ->where('alias', $this->documentData['alias'])->count() > 0) { - $cnt = 1; - $tempAlias = $this->documentData['alias']; - - while (\EvolutionCMS\Models\SiteContent::query() - ->withTrashed() - ->where('id', '<>', $this->documentData['id']) - ->where('alias', $tempAlias)->count() > 0) { - $tempAlias = $this->documentData['alias']; - $tempAlias .= $cnt; - $cnt++; - } - $this->documentData['alias'] = $tempAlias; - } - } else { - if (\EvolutionCMS\Models\SiteContent::query() - ->withTrashed() - ->where('id', '<>', $this->documentData['id']) - ->where('alias', $this->documentData['alias']) - ->where('parent', $this->documentData['parent'])->count() > 0) { - $cnt = 1; - $tempAlias = $this->documentData['alias']; - while (\EvolutionCMS\Models\SiteContent::query() - ->withTrashed() - ->where('id', '<>', $this->documentData['id']) - ->where('alias', $tempAlias) - ->where('parent', $this->documentData['parent'])->count() > 0) { - $tempAlias = $this->documentData['alias']; - $tempAlias .= $cnt; - $cnt++; - } - $this->documentData['alias'] = $tempAlias; - } - } - } // check for duplicate alias name if not allowed - elseif ($this->documentData['alias'] && !EvolutionCMS()->getConfig('allow_duplicate_alias')) { - $this->documentData['alias'] = EvolutionCMS()->stripAlias($this->documentData['alias']); - $docid = \EvolutionCMS\Models\SiteContent::query() - ->select('id') - ->withTrashed() - ->where('id', '<>', $this->documentData['id']) - ->where('alias', $this->documentData['alias']); - if (EvolutionCMS()->getConfig('use_alias_path')) { - // only check for duplicates on the same level if alias_path is on - $docid = $docid->where('parent', $this->documentData['parent']); - } - $docid = $docid->first(); - if (!is_null($docid)) { - throw new ServiceActionException(\Lang::get('global.duplicate_alias_found')); - } - } // strip alias of special characters - elseif ($this->documentData['alias']) { - $this->documentData['alias'] = EvolutionCMS()->stripAlias($this->documentData['alias']); - $docid = \EvolutionCMS\Models\SiteContent::query()->select('id') - ->withTrashed() - ->where('id', '<>', $this->documentData['id']) - ->where('alias', $this->documentData['alias'])->where('parent', $this->documentData['parent'])->first(); - if (!is_null($docid)) { - throw new ServiceActionException(\Lang::get('global.duplicate_alias_found')); - } - } - } elseif ($this->documentData['alias']) { - $this->documentData['alias'] = EvolutionCMS()->stripAlias($this->documentData['alias']); - } - } - - public function prepareCreateDocument() - { - $this->documentData['parent'] = (int)get_by_key($this->documentData, 'parent', 0, 'is_scalar'); - - - $this->documentData['menuindex'] = !empty($this->documentData['menuindex']) ? (int)$this->documentData['menuindex'] : 0; - - $this->documentData['createdby'] = EvolutionCMS()->getLoginUserID(); - $this->documentData['editedby'] = EvolutionCMS()->getLoginUserID(); - $this->documentData['createdon'] = $this->currentDate; - $this->documentData['editedon'] = $this->currentDate; - // invoke OnBeforeDocFormSave event - switch (EvolutionCMS()->getConfig('docid_incrmnt_method')) { - case '1': - $id = \EvolutionCMS\Models\SiteContent::query() - ->withTrashed() - ->leftJoin('site_content as t1', 'site_content.id +1', '=', 't1.id') - ->whereNull('t1.id')->min('site_content.id'); - $id++; - - break; - case '2': - $id = \EvolutionCMS\Models\SiteContent::withTrashed()->max('id'); - $id++; - break; - - default: - $id = ''; - } - if ($id != '') - $this->documentData['id'] = $id; - - } - - public function prepareTV() - { - $tmplvars = SiteTmplvarTemplate::query()->select('site_tmplvars.*') - ->where('templateid', $this->documentData['template']) - ->join('site_tmplvars', 'site_tmplvars.id', '=', 'site_tmplvar_templates.tmplvarid')->get(); - foreach ($tmplvars as $tmplvar) { - if (isset($this->documentData[$tmplvar->name])) { - $this->tvs[] = ['id' => $tmplvar->id, 'value' => $this->documentData[$tmplvar->name]]; - } - } - - } - - public function saveTVs() - { - foreach ($this->tvs as $value) { - \EvolutionCMS\Models\SiteTmplvarContentvalue::updateOrCreate(['contentid' => $this->documentData['id'], 'tmplvarid' => $value['id']], ['value' => $value['value']]); - } - - } - - public function updateParent() - { - // update parent folder status - if ($this->documentData['parent'] != 0) { - $fields = array('isfolder' => 1); - \EvolutionCMS\Models\SiteContent::withTrashed()->where('id', $this->documentData['parent'])->update(['isfolder' => 1]); - } - } - -} diff --git a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentDelete.php b/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentDelete.php deleted file mode 100644 index 946e38c9a3..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentDelete.php +++ /dev/null @@ -1,164 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->documentData = $documentData; - $this->events = $events; - $this->cache = $cache; - - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'id']), - ]; - - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $document = SiteContent::query()->withTrashed()->find($this->documentData['id']); - - $children = $document->getAllChildren($document); - $documentDeleteIds = $children; - array_unshift($documentDeleteIds, $this->documentData['id']); - - foreach ($documentDeleteIds as $deleteId) { - if (EvolutionCMS()->getConfig('site_start') == $deleteId) { - throw new ServiceActionException("Document is 'Site start' and cannot be deleted!"); - } - - if (EvolutionCMS()->getConfig('site_unavailable_page') == $deleteId) { - throw new ServiceActionException("Document is used as the 'Site unavailable page' and cannot be deleted!"); - } - - if (EvolutionCMS()->getConfig('error_page') == $deleteId) { - throw new ServiceActionException("Document is used as the 'Site error page' and cannot be deleted!"); - } - - if (EvolutionCMS()->getConfig('unauthorized_page') == $deleteId) { - throw new ServiceActionException("Document is used as the 'Site unauthorized page' and cannot be deleted!"); - } - } - SiteContent::query() - ->withTrashed() - ->whereIn('id', $documentDeleteIds) - ->update(['deleted' => 1, - 'deletedby' => EvolutionCMS()->getLoginUserID(), - 'deletedon' => time()]); - - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - return $document; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->documentData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - -} diff --git a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentDuplicate.php b/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentDuplicate.php deleted file mode 100644 index 80bbd7f47a..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentDuplicate.php +++ /dev/null @@ -1,206 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->documentData = $documentData; - $this->events = $events; - $this->cache = $cache; - $this->currentDate = EvolutionCMS()->timestamp((int)get_by_key($_SERVER, 'REQUEST_TIME', 0)); - - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'id']), - ]; - - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - - if ($this->events) { - $evtOut = EvolutionCMS()->invokeEvent('OnBeforeDocDuplicate', array( - 'id' => $this->documentData['id'] - )); - } - $documentObject = SiteContent::query()->withTrashed()->find($this->documentData['id']); - $tvArray = $documentObject->tv->pluck('value', 'name')->toArray(); - - $documentArray = array_merge($documentObject->toArray(), $tvArray); - // Handle incremental ID - switch (EvolutionCMS()->getConfig('docid_incrmnt_method')) { - case '1': - $minId = \EvolutionCMS\Models\SiteContent::query() - ->withTrashed() - ->leftJoin('site_content as T1', \DB::raw('(') . 'site_content.id' . \DB::raw('+1)'), '=', 'T1.id') - ->whereNull('T1.id')->min('site_content.id'); - - $documentArray['id'] = $minId + 1; - break; - case '2': - $documentArray['id'] = \EvolutionCMS\Models\SiteContent::query()->withTrashed()->max('id') + 1; - break; - - default: - unset($documentArray['id']); // remove the current id. - } - - // Once we've grabbed the document object, start doing some modifications - if (!isset($this->documentData['toplevel'])) { - // count duplicates - $pagetitle = \EvolutionCMS\Models\SiteContent::withTrashed()->find($this->documentData['id'])->pagetitle; - - $count = \EvolutionCMS\Models\SiteContent::query()->withTrashed()->where('pagetitle', 'LIKE', '%' . $pagetitle . ' ' . \Lang::get('global.duplicated_el_suffix') . '%')->count(); - - if ($count >= 1) { - $count = ' ' . ($count + 1); - } else { - $count = ''; - } - - $documentArray['pagetitle'] = $pagetitle . ' ' . \Lang::get('global.duplicated_el_suffix') . ' ' . $count; - $documentArray['alias'] = null; - } elseif (EvolutionCMS()->getConfig('friendly_urls') == 0 || EvolutionCMS()->getConfig('allow_duplicate_alias') == 0) { - $documentArray['alias'] = null; - } - - // change the parent accordingly - if (isset($this->documentData['parent'])) { - $documentArray['parent'] = $this->documentData['parent']; - } - $document = \DocumentManager::create($documentArray); - - $oldDocGroups = \EvolutionCMS\Models\DocumentGroup::query()->where('document', $this->documentData['id'])->get(); - foreach ($oldDocGroups->toArray() as $oldDocGroup) { - unset($oldDocGroup['id']); - $oldDocGroup['document'] = $document->getKey(); - \EvolutionCMS\Models\DocumentGroup::query()->insert($oldDocGroup); - } - if ($this->events) { - $evtOut = EvolutionCMS()->invokeEvent('OnDocDuplicate', array( - 'id' => $this->documentData['id'], - 'new_id' => $document->getKey() - )); - } - $documents = \EvolutionCMS\Models\SiteContent::withTrashed()->where('parent', $this->documentData['id'])->where('deleted', 0)->orderBy('id')->get(); - - foreach ($documents as $item) { - \DocumentManager::duplicate(['id' => $item->id, 'parent' => $document->getKey(), 'toplevel' => 1]); - } - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - - return $document; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->documentData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - -} diff --git a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentEdit.php b/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentEdit.php deleted file mode 100644 index d6a2a24a13..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentEdit.php +++ /dev/null @@ -1,228 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->documentData = $documentData; - $this->events = $events; - $this->cache = $cache; - $this->currentDate = EvolutionCMS()->timestamp((int)get_by_key($_SERVER, 'REQUEST_TIME', 0)); - - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'id']), - ]; - - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - if (isset($this->documentData['pagetitle'])) { - $this->prepareAliasDocument(); - } - $this->prepareEditDocument(); - - // invoke OnBeforeDocFormSave event - if ($this->events) { - EvolutionCMS()->invokeEvent("OnBeforeDocFormSave", array( - "mode" => "upd", - "user" => $this->documentData['id'], - )); - } - - $document = SiteContent::query()->withTrashed()->find($this->documentData['id']); - $document->update($this->documentData); - $this->prepareTV(); - $this->saveTVs(); - $this->updateParent(); - - if ($this->events) { - // invoke OnDocFormSave event - EvolutionCMS()->invokeEvent("OnDocFormSave", array( - "mode" => "upd", - "id" => $this->documentData['id'] - )); - } - - - $_SESSION['itemname'] = $this->documentData['pagetitle']; - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - - return $document; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->documentData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - - public function prepareEditDocument() - { - $existingDocument = SiteContent::query()->withTrashed()->find($this->documentData['id'])->toArray(); - $this->documentData['editedby'] = EvolutionCMS()->getLoginUserID(); - $this->documentData['editedon'] = $this->currentDate; - $this->documentData['oldparent'] = $existingDocument['parent']; - if (!isset($this->documentData['parent'])) { - $this->documentData['parent'] = $this->documentData['oldparent']; - } - if (!isset($this->documentData['template'])) { - $this->documentData['template'] = $existingDocument['template']; - } - - if ($this->documentData['id'] == EvolutionCMS()->getConfig('site_start') && $this->documentData['published'] == 0) { - throw new ServiceActionException("Document is linked to site_start variable and cannot be unpublished!"); - } - $today = EvolutionCMS()->timestamp((int)get_by_key($_SERVER, 'REQUEST_TIME', 0)); - if ($this->documentData['id'] == EvolutionCMS()->getConfig('site_start') && ($this->documentData['pub_date'] > $today || $this->documentData['unpub_date'] != "0")) { - throw new ServiceActionException("Document is linked to site_start variable and cannot have publish or unpublish dates set!"); - } - if ($this->documentData['parent'] == $this->documentData['id']) { - throw new ServiceActionException("Document can not be it's own parent!"); - } - - $parents = EvolutionCMS()->getParentIds($this->documentData['parent']); - if (in_array($this->documentData['id'], $parents)) { - throw new ServiceActionException("Document descendant can not be it's parent!"); - } - - // check to see document is a folder - $child = \EvolutionCMS\Models\SiteContent::withTrashed()->select('id')->where('parent', $this->documentData['id'])->first(); - if (!is_null($child)) { - $this->documentData['isfolder'] = 1; - } - - // set publishedon and publishedby - $was_published = $existingDocument['published']; - - // keep original publish state, if change is not permitted - if (!EvolutionCMS()->hasPermission('publish_document')) { - $this->documentData['published'] = $was_published; - $this->documentData['pub_date'] = $existingDocument['pub_date']; - $this->documentData['unpub_date'] = $existingDocument['unpub_date']; - } - - // if it was changed from unpublished to published - if (!$was_published && $this->documentData['published']) { - $this->documentData['publishedon'] = $this->currentDate; - $this->documentData['publishedby'] = EvolutionCMS()->getLoginUserID(); - } elseif ((!empty($this->documentData['pub_date']) && $this->documentData['pub_date'] <= $this->currentDate && $this->documentData['published'])) { - $this->documentData['publishedon'] = $this->documentData['pub_date']; - $this->documentData['publishedby'] = EvolutionCMS()->getLoginUserID(); - } elseif ($was_published && !$this->documentData['published']) { - $this->documentData['publishedon'] = 0; - $this->documentData['publishedby'] = 0; - } else { - $this->documentData['publishedon'] = $existingDocument['publishedon']; - $this->documentData['publishedby'] = $existingDocument['publishedby']; - } - - - } - -} diff --git a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentPublish.php b/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentPublish.php deleted file mode 100644 index 7d08a37835..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentPublish.php +++ /dev/null @@ -1,139 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->documentData = $documentData; - $this->events = $events; - $this->cache = $cache; - - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'id']), - ]; - - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $document = SiteContent::query()->withTrashed()->find($this->documentData['id']); - - $document->published = 1; - $document->publishedby = EvolutionCMS()->getLoginUserID(); - $document->save(); - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - return $document; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return EvolutionCMS()->hasPermission('publish_document'); - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->documentData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - - -} diff --git a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentSetGroups.php b/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentSetGroups.php deleted file mode 100644 index 54019852c9..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentSetGroups.php +++ /dev/null @@ -1,166 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->documentData = $documentData; - $this->events = $events; - $this->cache = $cache; - - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'id']), - ]; - - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - - $new_groups = []; - // process the new input - - foreach ($this->documentData['document_groups'] as $group) { - $new_groups[$group] = $this->documentData['id']; - } - - // grab the current set of permissions on this document the user can access - $documentGroups = \EvolutionCMS\Models\DocumentGroup::select('id', 'document_group') - ->where('document', $this->documentData['id'])->get(); - - $old_groups = []; - foreach ($documentGroups as $documentGroup) { - $old_groups[$documentGroup->document_group] = $documentGroup->id; - } - - // update the permissions in the database - $insertions = []; - foreach ($new_groups as $group => $link_id) { - if (array_key_exists($group, $old_groups)) { - unset($old_groups[$group]); - } else { - $insertions[] = ['document_group' => (int) $group, 'document' => $this->documentData['id']]; - } - } - if (!empty($insertions)) { - \EvolutionCMS\Models\DocumentGroup::query()->insert($insertions); - } - if (!empty($old_groups)) { - \EvolutionCMS\Models\DocumentGroup::query()->whereIn('id', $old_groups)->delete(); - } - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - - return SiteContent::query()->withTrashed()->find($this->documentData['id']); - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->documentData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - -} diff --git a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentUndelete.php b/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentUndelete.php deleted file mode 100644 index f0dc5d5fce..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentUndelete.php +++ /dev/null @@ -1,148 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->documentData = $documentData; - $this->events = $events; - $this->cache = $cache; - - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'id']), - ]; - - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $document = SiteContent::withTrashed()->find($this->documentData['id']); - - $children = $document->getAllChildren($document); - - $documentDeleteIds = $children; - array_unshift($documentDeleteIds, $this->documentData['id']); - - - SiteContent::withTrashed() - ->whereIn('id', $documentDeleteIds) - ->update(['deleted' => 0, - 'deletedby' => 0, - 'deletedon' => 0]); - - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - return $document; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->documentData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - - -} diff --git a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentUnpublish.php b/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentUnpublish.php deleted file mode 100644 index 15d7777836..0000000000 --- a/core/vendor/evocms-services/document-manager/src/Services/Documents/DocumentUnpublish.php +++ /dev/null @@ -1,137 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->documentData = $documentData; - $this->events = $events; - $this->cache = $cache; - - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'id']), - ]; - - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $document = SiteContent::query()->withTrashed()->find($this->documentData['id']); - - $document->published = 0; - $document->publishedby = EvolutionCMS()->getLoginUserID(); - $document->save(); - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - return $document; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return EvolutionCMS()->hasPermission('publish_document'); - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->documentData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - -} diff --git a/core/vendor/evocms-services/user-manager/composer.json b/core/vendor/evocms-services/user-manager/composer.json deleted file mode 100644 index a44bfab092..0000000000 --- a/core/vendor/evocms-services/user-manager/composer.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "evocms-services/user-manager", - "license": "MIT", - "authors": [ - { - "name": "Alexander Pashkevich", - "email": "sertious2008.wortk3@gmail.com" - } - ], - "require": { - - }, - "autoload": { - "psr-4": { - "EvolutionCMS\\UserManager\\": "src" - } - } -} diff --git a/core/vendor/evocms-services/user-manager/src/Facades/UserManager.php b/core/vendor/evocms-services/user-manager/src/Facades/UserManager.php deleted file mode 100644 index 7817c7fba8..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Facades/UserManager.php +++ /dev/null @@ -1,16 +0,0 @@ -app->singleton('UserManager', function ($app) { - return new UserManager($app); - }); - } -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/UserManager.php b/core/vendor/evocms-services/user-manager/src/Services/UserManager.php deleted file mode 100644 index 5abc9bc76e..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/UserManager.php +++ /dev/null @@ -1,160 +0,0 @@ -process(); - } - - public function edit(array $userData, bool $events = true, bool $cache = true) - { - $userEdit = new UserEdit($userData, $events, $cache); - return $userEdit->process(); - } - - public function delete(array $userData, bool $events = true, bool $cache = true) - { - $username = new UserDelete($userData, $events, $cache); - return $username->process(); - } - - public function repairPassword($userData, bool $events = true, bool $cache = true) - { - $userHash = new UserRepairPassword($userData, $events, $cache); - return $userHash->process(); - } - - public function changeManagerPassword($userData, bool $events = true, bool $cache = true) - { - $user = new UserManagerChangePassword($userData, $events, $cache); - return $user->process(); - } - - public function changePassword($userData, bool $events = true, bool $cache = true) - { - $user = new UserChangePassword($userData, $events, $cache); - return $user->process(); - } - - public function hashChangePassword($userData, bool $events = true, bool $cache = true) - { - $user = new UserHashChangePassword($userData, $events, $cache); - return $user->process(); - } - - public function setRole(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserSetRole($userData, $events, $cache); - return $user->process(); - } - - public function setGroups(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserSetGroups($userData, $events, $cache); - return $user->process(); - } - - public function login(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserLogin($userData, $events, $cache); - return $user->process(); - } - - public function loginById(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserLoginById($userData, $events, $cache); - return $user->process(); - } - - public function hashLogin(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserHashLogin($userData, $events, $cache); - return $user->process(); - } - - public function logout(array $userData = [], bool $events = true, bool $cache = true) - { - $user = new UserLogout($userData, $events, $cache); - return $user->process(); - } - - public function saveSettings(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserSaveSettings($userData, $events, $cache); - return $user->process(); - } - - public function saveValues(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserSaveValues($userData, $events, $cache); - return $user->process(); - } - - public function getValues(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserGetValues($userData, $events, $cache); - return $user->process(); - } - - public function clearSettings(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserClearSettings($userData, $events, $cache); - return $user->process(); - } - - public function refreshToken(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserRefreshToken($userData, $events, $cache); - return $user->process(); - } - - public function generateAndSavePassword(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserGeneratePassword($userData, $events, $cache); - return $user->process(); - } - - public function getVerifiedKey(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserGetVerifiedKey($userData, $events, $cache); - return $user->process(); - } - - public function verified(array $userData, bool $events = true, bool $cache = true) - { - $user = new UserVerified($userData, $events, $cache); - return $user->process(); - } - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/ExcludeStandardFieldsTrait.php b/core/vendor/evocms-services/user-manager/src/Services/Users/ExcludeStandardFieldsTrait.php deleted file mode 100644 index da98c23d40..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/ExcludeStandardFieldsTrait.php +++ /dev/null @@ -1,64 +0,0 @@ - $value) { - if (!in_array($key, $ignore)) { - $result[$key] = $value; - } - } - return $result; - } -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/SafelyDestroyUserSessionTrait.php b/core/vendor/evocms-services/user-manager/src/Services/Users/SafelyDestroyUserSessionTrait.php deleted file mode 100644 index b8c1a2afd8..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/SafelyDestroyUserSessionTrait.php +++ /dev/null @@ -1,32 +0,0 @@ -userSessionFields as $field) { - unset($_SESSION[$this->context . $field]); - } - } -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserChangePassword.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserChangePassword.php deleted file mode 100644 index d6f9f106c6..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserChangePassword.php +++ /dev/null @@ -1,157 +0,0 @@ -context = evo()->getContext(); - $this->validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required'], - 'old_password' => ['required'], - 'password' => ['required', 'min:6', 'confirmed'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'password']), - 'old_password.required' => Lang::get("global.required_field", ['field' => 'password']), - 'password.required' => Lang::get("global.required_field", ['field' => 'password']), - 'password.confirmed' => Lang::get("global.password_confirmed", ['field' => 'password']), - 'password.min' => Lang::get("global.password_gen_length"), - - ]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): string - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - - $password = EvolutionCMS()->getPasswordHash()->HashPassword($this->userData['password']); - $user = \EvolutionCMS\Models\User::find($this->userData['id']); - - $hashType = EvolutionCMS()->getManagerApi()->getHashType($user->password); - - if ($hashType == 'phpass') { - $matchPassword = login($user->username, $this->userData['old_password'], $user->password); - } elseif ($hashType == 'md5') { - $matchPassword = loginMD5($user->getKey(), $this->userData['old_password'], $user->password, $user->username); - } elseif ($hashType == 'v1') { - $matchPassword = loginV1($user->getKey(), $this->userData['old_password'], $user->password, $user->username); - } else { - $matchPassword = false; - } - if ($matchPassword == false) { - throw new ServiceActionException(\Lang::get('global.login_processor_wrong_password')); - } - - $user->password = $password; - $user->cachepwd = ''; - $user->save(); - - // invoke OnManagerChangePassword event - EvolutionCMS()->invokeEvent('OnUserChangePassword', array( - 'userid' => $this->userData['id'], - 'username' => $_SESSION[$this->context . 'Shortname'], - 'userpassword' => $this->userData['password'] - )); - return $user; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserClearSettings.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserClearSettings.php deleted file mode 100644 index abead18a39..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserClearSettings.php +++ /dev/null @@ -1,119 +0,0 @@ -userData = $userData; - $this->events = $events; - $this->cache = $cache; - $this->validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return ['id' => ['required'],]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return ['id.required' => Lang::get("global.required_field", ['field' => 'id'])]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): bool - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - \EvolutionCMS\Models\UserSetting::where('user', $this->userData['id'])->delete(); - - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - - return true; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - -} \ No newline at end of file diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserDelete.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserDelete.php deleted file mode 100644 index 41aa28683c..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserDelete.php +++ /dev/null @@ -1,147 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required','exists:users'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.error_no_id"), - 'id.exists' => Lang::get("global.user_doesnt_exist"), - ]; - } - - /** - * @return string - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): string - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - if ($this->events) { - // invoke OnBeforeWUsrFormDelete event - EvolutionCMS()->invokeEvent("OnBeforeWUsrFormDelete", - array( - "id" => $this->userData['id'] - )); - } - - $username = \EvolutionCMS\Models\User::findOrFail($this->userData['id'])->username; - - // delete the user. - \EvolutionCMS\Models\User::destroy($this->userData['id']); - \EvolutionCMS\Models\UserValue::query()->where('userid', $this->userData['id'])->delete(); - if ($this->events) { - // invoke OnWebDeleteUser event - EvolutionCMS()->invokeEvent("OnWebDeleteUser", - array( - "userid" => $this->userData['id'], - "username" => $username - )); - - // invoke OnWUsrFormDelete event - EvolutionCMS()->invokeEvent("OnWUsrFormDelete", - array( - "id" => $this->userData['id'] - )); - } - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - - return $username; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return EvolutionCMS()->hasPermission('delete_user'); - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserEdit.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserEdit.php deleted file mode 100644 index d5d05ed299..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserEdit.php +++ /dev/null @@ -1,171 +0,0 @@ -context = evo()->getContext(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - $this->validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required'], - 'username' => ['filled', Rule::unique('users')->ignore($this->userData['id'])], - 'password' => ['min:6', 'confirmed'], - 'email' => [ - 'filled', 'email:rfc', Rule::unique('user_attributes')->ignore($this->userData['id'], 'internalKey') - ], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'username']), - 'password.confirmed' => Lang::get("global.password_confirmed", ['field' => 'password']), - 'password.min' => Lang::get("global.password_gen_length"), - 'email.email' => Lang::get("validation.email", ['attribute' => 'email']), - 'username.unique' => Lang::get('global.username_unique'), - 'email.unique' => Lang::get('global.email_unique'), - ]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - // invoke OnBeforeUserFormSave event - if ($this->events) { - EvolutionCMS()->invokeEvent("OnBeforeUserSave", [ - "mode" => "upd", - "user" => &$this->userData, - ]); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - $user = User::find($this->userData['id']); - if (isset($this->userData['username']) && $this->userData['username'] != '') { - $user->username = $this->userData['username']; - $user->save(); - } - $this->userData['internalKey'] = $user->getKey(); - if (isset($this->userData['dob'])) { - $this->userData['dob'] = strtotime($this->userData['dob']); - } - foreach ($this->userData as $attribute => $value) { - if (in_array($attribute, - $user->attributes->getFillable()) && $attribute != 'id' && $attribute != 'internalKey' && $attribute != 'role') { - $user->attributes->{$attribute} = $value; - } - } - $user->attributes->save(); - - // invoke OnWebSaveUser event - if ($this->events) { - EvolutionCMS()->invokeEvent("OnUserFormSave", [ - "mode" => "upd", - "userid" => $user->getKey(), - "username" => $user->username, - "userpassword" => isset($this->userData['clearPassword']) ? $this->userData['clearPassword'] : '', - "useremail" => $user->attributes->email, - "userfullname" => $user->attributes->fullname - ]); - } - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - - return $user; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return ($_SESSION[$this->context . 'InternalKey'] == $this->userData['id'] || EvolutionCMS()->hasPermission('save_user')); - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - -} \ No newline at end of file diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserGeneratePassword.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserGeneratePassword.php deleted file mode 100644 index 8a1c801ed1..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserGeneratePassword.php +++ /dev/null @@ -1,120 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required', 'exists:users'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'id']), - 'id.exists' => Lang::get("global.could_not_find_user"), - ]; - } - - /** - * @return string - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): string - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - $user = User::find($this->userData['id']); - $password = generate_password(8); - $user->password = EvolutionCMS()->getPasswordHash()->HashPassword($password); - $user->save(); - return $password; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserGetValues.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserGetValues.php deleted file mode 100644 index adbac667f7..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserGetValues.php +++ /dev/null @@ -1,120 +0,0 @@ -userData = $userData; - $this->events = $events; - $this->cache = $cache; - $this->validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return ['id' => ['required']]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return ['id.required' => Lang::get("global.required_field", ['field' => 'username'])]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): array - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $values = UserValue::query() - ->select('site_tmplvars.name', 'user_values.value') - ->join('site_tmplvars', 'site_tmplvars.id', '=', 'user_values.tmplvarid') - ->where('userid', $this->userData['id']) - ->when(!empty($this->userData['tvNames']), function($query) { - $query->whereIn('site_tmplvars.name', $this->userData['tvNames']); - }) - ->get() - ->pluck('value', 'name') - ->toArray(); - - return $values; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - return true; - } - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserGetVerifiedKey.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserGetVerifiedKey.php deleted file mode 100644 index 0a44df6aac..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserGetVerifiedKey.php +++ /dev/null @@ -1,117 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return ['id' => ['required']]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return []; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $user = User::find($this->userData['id']); - if (is_null($user)) { - throw new ServiceActionException(\Lang::get('global.user_doesnt_exist')); - } - $hash = md5(generate_password(10) . time()); - $user->verified_key = $hash; - $user->save(); - - return $user; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserHashChangePassword.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserHashChangePassword.php deleted file mode 100644 index 8548e20c53..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserHashChangePassword.php +++ /dev/null @@ -1,140 +0,0 @@ -context = evo()->getContext(); - $this->validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'hash' => ['required'], - 'password' => ['required', 'min:6', 'confirmed'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'hash.required' => Lang::get("global.required_field", ['field' => 'hash']), - 'password.required' => Lang::get("global.required_field", ['field' => 'password']), - 'password.confirmed' => Lang::get("global.password_confirmed", ['field' => 'password']), - 'password.min' => Lang::get("global.password_gen_length"), - - ]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): string - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $user = \EvolutionCMS\Models\User::where('cachepwd', $this->userData['hash'])->first(); - if (is_null($user)) { - throw new ServiceActionException(\Lang::get('global.could_not_find_user')); - } - $user->password = EvolutionCMS()->getPasswordHash()->HashPassword($this->userData['password']); - $user->cachepwd = ''; - $user->save(); - - // invoke OnManagerChangePassword event - EvolutionCMS()->invokeEvent('OnUserChangePassword', array( - 'userid' => $this->userData['id'], - 'username' => $_SESSION[$this->context. 'Shortname'], - 'userpassword' => $this->userData['password'] - )); - return $user; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserHashLogin.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserHashLogin.php deleted file mode 100644 index 28711ea7e9..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserHashLogin.php +++ /dev/null @@ -1,93 +0,0 @@ -checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - $this->user = \EvolutionCMS\Models\User::query() - ->where('cachepwd', $this->userData['hash'])->first(); - if (is_null($this->user)) { - throw new ServiceActionException(\Lang::get('global.login_processor_unknown_user')); - } - - $this->userSettings = $this->user->settings->pluck('setting_value', 'setting_name')->toArray(); - - $this->validateAuth(); - - $this->authProcess(); - $this->checkRemember(); - $this->clearActiveUsers(); - - if ($this->events) { - // invoke OnManagerLogin event - EvolutionCMS()->invokeEvent('OnManagerLogin', array( - 'userid' => $this->user->getKey(), - 'username' => $this->user->username, - 'userpassword' => $this->userData['password'], - 'rememberme' => $this->userData['rememberme'] - )); - } - $this->user->cachepwd = ''; - $this->user->save(); - return $this->user; - } - - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserLogin.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserLogin.php deleted file mode 100644 index 698ef679c2..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserLogin.php +++ /dev/null @@ -1,438 +0,0 @@ -context = evo()->getContext(); - $this->validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->blockedMinutes = EvolutionCMS()->getConfig('blocked_minutes'); - $this->failedLoginAttempts = EvolutionCMS()->getConfig('failed_login_attempts'); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'username' => ['required'], - 'password' => ['required'], - 'context' => ['nullable', 'in:web,mgr'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'username.required' => Lang::get("global.required_field", ['field' => 'username']), - 'password.required' => Lang::get("global.required_field", ['field' => 'password']), - ]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - if (isset($this->userData['context'])) { - $this->context = $this->userData['context']; - } - - if ($this->events) { - // invoke OnBeforeManagerLogin event - EvolutionCMS()->invokeEvent('OnBeforeManagerLogin', array( - 'username' => $this->userData['username'], - 'userpassword' => $this->userData['password'], - 'rememberme' => $this->userData['rememberme'] ?? false - )); - } - - $this->user = \EvolutionCMS\Models\User::query() - ->where('username', $this->userData['username'])->first(); - if (is_null($this->user)) { - throw new ServiceActionException(\Lang::get('global.login_processor_unknown_user')); - } - $this->userSettings = $this->user->settings->pluck('setting_value', 'setting_name')->toArray(); - - $this->checkPassword(); - $this->validateAuth(); - $this->authProcess(); - $this->checkRemember(); - $this->clearActiveUsers(); - - if ($this->events) { - // invoke OnManagerLogin event - EvolutionCMS()->invokeEvent('OnManagerLogin', array( - 'userid' => $this->user->getKey(), - 'username' => $this->user->username, - 'userpassword' => $this->userData['password'], - 'rememberme' => $this->userData['rememberme'] ?? false - )); - } - - return $this->user; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - /** - * @return bool - */ - public function validateAuth(): bool - { - // blocked due to number of login errors, but get to try again - if ($this->user->attributes->failedlogincount >= $this->failedLoginAttempts - && $this->user->attributes->blockeduntil < time()) { - $this->user->attributes->failedlogincount = 0; - $this->user->attributes->blockeduntil = time() - 1; - $this->user->attributes->save(); - } - - try { - // this user has been blocked by an admin, so no way he's loggin in! - if ($this->user->attributes->blocked == '1') { - throw new ServiceActionException(\Lang::get('global.login_processor_blocked1')); - } - - if ($this->user->attributes->verified != 1) { - throw new ServiceActionException(\Lang::get('global.login_processor_verified')); - } - - // blockuntil: this user has a block until date - if ($this->user->attributes->blockeduntil > time()) { - throw new ServiceActionException(\Lang::get('global.login_processor_blocked2')); - } - - // blockafter: this user has a block after date - if ($this->user->attributes->blockedafter > 0 && $this->user->attributes->blockedafter < time()) { - throw new ServiceActionException(\Lang::get('global.login_processor_blocked2')); - } - - if (!$this->isUserHostCorrespondsToIP()) { - throw new ServiceActionException(\Lang::get('global.login_processor_remotehost_ip')); - } - - if (!$this->isUserHasAllowedIP()) { - throw new ServiceActionException(\Lang::get('global.login_processor_remote_ip')); - } - - if (!$this->isUserAllowedToLogInToday()) { - throw new ServiceActionException(\Lang::get('global.login_processor_date')); - } - } catch (ServiceActionException $e) { - $this->safelyDestroyUserSession(); - throw $e; - } - - return true; - } - - protected function isUserHostCorrespondsToIP(): bool - { - if (!isset($this->userSettings['allowed_ip'])) { - return true; - } - - $remoteAddress = request()->server('REMOTE_ADDR'); - $hostname = gethostbyaddr($remoteAddress); - - if (!$hostname || $hostname == $remoteAddress) { - return false; - } - - if (gethostbyname($hostname) == $remoteAddress) { - return false; - } - - return true; - } - - protected function isUserHasAllowedIP() - { - if (!isset($this->userSettings['allowed_ip'])) { - return true; - } - - $ips = array_filter(array_map('trim', explode(',', $this->userSettings['allowed_ip']))); - - return in_array(request()->server('REMOTE_ADDR'), $ips); - } - - protected function isUserAllowedToLogInToday() - { - if (!isset($this->userSettings['allowed_days'])) { - return true; - } - - $date = getdate(); - $day = $date['wday'] + 1; - - return in_array($day, explode(',', $this->userSettings['allowed_days'])); - } - - public function authProcess() - { - - EvolutionCMS()->cleanupExpiredLocks(); - EvolutionCMS()->cleanupMultipleActiveUsers(); - if(!defined('NO_SESSION')) { - $this->writeSession(); - } - // successful login so reset fail count and update key values - $this->user->attributes->failedlogincount = 0; - $this->user->attributes->logincount += 1; - $this->user->attributes->thislogin = time(); - $this->user->attributes->lastlogin = time(); - $this->user->attributes->save(); - - $this->user->refresh_token = hash('sha256', Str::random(32)); - $this->user->access_token = hash('sha256', Str::random(32)); - $this->user->valid_to = Carbon::now()->addHours(11); - $this->user->save(); - - // get user's document groups - $i = 0; - - - } - - public function writeSession() - { - $currentsessionid = session_regenerate_id(); - - $_SESSION['usertype'] = 'manager'; // user is a backend user - // get permissions - $_SESSION[$this->context . 'Shortname'] = $this->user->username; - $_SESSION[$this->context . 'Fullname'] = $this->user->attributes->fullname; - $_SESSION[$this->context . 'Email'] = $this->user->attributes->email; - $_SESSION[$this->context . 'Validated'] = 1; - $_SESSION[$this->context . 'InternalKey'] = $this->user->getKey(); - $_SESSION[$this->context . 'Failedlogins'] = $this->user->attributes->failedlogincount; - $_SESSION[$this->context . 'Lastlogin'] = $this->user->attributes->lastlogin; - $_SESSION[$this->context . 'Logincount'] = $this->user->attributes->logincount; // login count - $_SESSION[$this->context . 'Role'] = $this->user->attributes->role; - $_SESSION[$this->context . 'Permissions'] = []; - $mgrPermissions = \EvolutionCMS\Models\UserRole::find($this->user->attributes->role); - if (!is_null($mgrPermissions)) { - $permissionsRole = $mgrPermissions->toArray(); - $roleArray = \EvolutionCMS\Models\RolePermissions::query()->where('role_id', $this->user->attributes->role)->pluck('permission')->toArray(); - foreach ($roleArray as $role) { - $permissionsRole[$role] = 1; - } - $_SESSION[$this->context . 'Permissions'] = $permissionsRole; - } - $this->user->attributes->sessionid = $currentsessionid; - $context = $this->context == 'mgr' ? 0 : 1; - $_SESSION[$this->context . 'Docgroups'] = \EvolutionCMS\Models\MemberGroup::query() - ->join('membergroup_access', function($join) use ($context){ - $join->on('membergroup_access.membergroup', '=', 'member_groups.user_group'); - $join->on('membergroup_access.context', '=', \DB::Raw($context)); - }) - ->where('member_groups.member', $this->user->getKey())->pluck('documentgroup')->toArray(); - - - $_SESSION[$this->context . 'Token'] = md5($currentsessionid); - - } - - public function checkRemember() - { - - if (isset($this->userData['rememberme']) && $this->userData['rememberme'] == 1) { - $_SESSION['modx.' . $this->context . '.session.cookie.lifetime'] = (int)EvolutionCMS()->getConfig('session.cookie.lifetime'); - - // Set a cookie separate from the session cookie with the username in it. - // Are we using secure connection? If so, make sure the cookie is secure - global $https_port; - - $secure = ((isset ($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') || $_SERVER['SERVER_PORT'] == $https_port); - setcookie('modx_remember_manager', $_SESSION[$this->context . 'Shortname'], time() + 60 * 60 * 24 * 365, MODX_BASE_URL, '', $secure, true); - } else { - $_SESSION['modx.' .$this->context . '.session.cookie.lifetime'] = 0; - - // Remove the Remember Me cookie - setcookie('modx_remember_manager', '', time() - 3600, MODX_BASE_URL); - } - } - - public function clearActiveUsers() - { - // Check if user already has an active session, if not check if user pressed logout end of last session - $activeSession = \EvolutionCMS\Models\ActiveUserSession::where('internalKey', $this->user->getKey())->first(); - if (!is_null($activeSession)) { - $lastHit = \EvolutionCMS\Models\ActiveUser::select('lasthit')->where('internalKey', $this->user->getKey())->where('action', '!=', 8)->first(); - if (!is_null($lastHit)) { - $_SESSION['show_logout_reminder'] = array( - 'type' => 'logout_reminder', - 'lastHit' => $lastHit->lasthit - ); - } - } - } - - - public function incrementFailedLoginCount(): void - { - $this->user->attributes->failedlogincount += 1; - - if ($this->user->attributes->failedlogincount >= $this->failedLoginAttempts) //block user for too many fail attempts - { - $this->user->attributes->blockeduntil = time() + ($this->blockedMinutes * 60); - } - $this->user->attributes->save(); - - if ($this->user->attributes->failedlogincount < $this->failedLoginAttempts) { - //sleep to help prevent brute force attacks - $sleep = (int)$this->user->attributes->failedlogincount / 2; - if ($sleep > 5) { - $sleep = 5; - } - sleep($sleep); - } - } - - public function checkPassword() - { - if ($this->events) { - // invoke OnManagerAuthentication event - $rt = EvolutionCMS()->invokeEvent('OnManagerAuthentication', array( - 'userid' => $this->user->getKey(), - 'username' => $this->user->username, - 'userpassword' => $this->userData['password'], - 'savedpassword' => $this->user->password, - 'rememberme' => $this->userData['rememberme'] - )); - } - - // check if plugin authenticated the user - $matchPassword = false; - if (!isset($rt) || !$rt || (is_array($rt) && !in_array(true, $rt))) { - // check user password - local authentication - $hashType = EvolutionCMS()->getManagerApi()->getHashType($this->user->password); - - if ($hashType == 'phpass') { - $matchPassword = login($this->user->username, $this->userData['password'], $this->user->password); - } elseif ($hashType == 'md5') { - $matchPassword = loginMD5($this->user->getKey(), $this->userData['password'], $this->user->password, $this->user->username); - } elseif ($hashType == 'v1') { - $matchPassword = loginV1($this->user->getKey(), $this->userData['password'], $this->user->password, $this->user->username); - } else { - $matchPassword = false; - } - - } else if ($rt === true || (is_array($rt) && in_array(true, $rt))) { - $matchPassword = true; - } - - if (!$matchPassword) { - $this->incrementFailedLoginCount(); - throw new ServiceActionException(\Lang::get('global.login_processor_wrong_password')); - } - } - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserLoginById.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserLoginById.php deleted file mode 100644 index 6b99d21d66..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserLoginById.php +++ /dev/null @@ -1,86 +0,0 @@ - ['required'], - 'context' => ['nullable', 'in:web,mgr'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return ['id.required' => Lang::get("global.required_field", ['field' => 'username'])]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - if (isset($this->userData['context'])) { - $this->context = $this->userData['context']; - } - - $this->user = \EvolutionCMS\Models\User::query()->find($this->userData['id']); - if (is_null($this->user)) { - throw new ServiceActionException(\Lang::get('global.login_processor_unknown_user')); - } - if ($this->events) { - // invoke OnBeforeManagerLogin event - EvolutionCMS()->invokeEvent('OnBeforeManagerLogin', array( - 'username' => $this->user->username, - )); - } - - $this->userSettings = $this->user->settings->pluck('setting_value', 'setting_name')->toArray(); - - $this->validateAuth(); - $this->authProcess(); - $this->checkRemember(); - $this->clearActiveUsers(); - - if ($this->events) { - // invoke OnManagerLogin event - EvolutionCMS()->invokeEvent('OnManagerLogin', array( - 'userid' => $this->user->getKey(), - 'username' => $this->user->username, - )); - } - - return $this->user; - } - - public function checkPassword() - { - return true; - } -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserLogout.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserLogout.php deleted file mode 100644 index 3fd88f9e1b..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserLogout.php +++ /dev/null @@ -1,178 +0,0 @@ -context = evo()->getContext(); - $this->validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'context' => ['nullable', 'in:web,mgr'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return []; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): string - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - if (isset($this->userData['context'])) { - $this->context = $this->userData['context']; - } - - $internalKey = EvolutionCMS()->getLoginUserID($this->context); - if (!$internalKey) { - return false; - } - $user = User::query()->find($internalKey); - $username = ''; - if (!is_null($user)) { - $user->refresh_token = ''; - $user->access_token = ''; - $user->valid_to = NULL; - $user->save(); - $username = $_SESSION[$this->context . 'Shortname']; - if(is_null($username)) $username = ''; - $sid = EvolutionCMS()->sid; - if ($this->events) { - // invoke OnBeforeManagerLogout event - EvolutionCMS()->invokeEvent("OnBeforeManagerLogout", - array( - "userid" => $internalKey, - "username" => $username - )); - } - } - - $this->safelyDestroyUserSession(); - - \EvolutionCMS\Models\ActiveUserLock::query()->where('sid', $sid)->delete(); - - \EvolutionCMS\Models\ActiveUserSession::query()->where('sid', $sid)->delete(); - - if ($this->events) { - // invoke OnManagerLogout event - EvolutionCMS()->invokeEvent("OnManagerLogout", - array( - "userid" => $internalKey, - "username" => $username - )); - } - return $username; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserManagerChangePassword.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserManagerChangePassword.php deleted file mode 100644 index 517ccb573c..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserManagerChangePassword.php +++ /dev/null @@ -1,132 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'password' => ['required', 'min:6', 'confirmed'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'password.required' => Lang::get("global.required_field", ['field' => 'password']), - 'password.confirmed' => Lang::get("global.password_confirmed", ['field' => 'password']), - 'password.min' => Lang::get("global.password_gen_length"), - - ]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): string - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - - $uid = EvolutionCMS()->getLoginUserID('mgr'); - $password = EvolutionCMS()->getPasswordHash()->HashPassword($this->userData['password']); - $user = \EvolutionCMS\Models\User::find($uid); - $user->password = $password; - $user->save(); - - // invoke OnManagerChangePassword event - EvolutionCMS()->invokeEvent('OnManagerChangePassword', array( - 'userid' => $uid, - 'username' => $_SESSION['mgrShortname'], - 'userpassword' => $this->userData['password'] - )); - return $user; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserRefreshToken.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserRefreshToken.php deleted file mode 100644 index 4514dcd957..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserRefreshToken.php +++ /dev/null @@ -1,142 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return ['refresh_token' => ['required', 'exists:users']]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return ['refresh_token.required' => Lang::get("global.required_field", ['field' => 'refresh_token'])]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - - $user = \EvolutionCMS\Models\User::query() - ->where('refresh_token', $this->userData['refresh_token'])->first(); - if (is_null($user)) { - throw new ServiceActionException(\Lang::get('global.could_not_find_user')); - } - - $user->access_token = hash('sha256', Str::random(32)); - $user->valid_to = Carbon::now()->addHours(11); - $user->save(); - - return $user; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserRegistration.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserRegistration.php deleted file mode 100644 index c178540897..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserRegistration.php +++ /dev/null @@ -1,160 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'username' => ['required', 'unique:users'], - 'password' => ['required', 'min:6', 'confirmed'], - 'email' => ['required', 'email:rfc', 'unique:user_attributes'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'username.required' => Lang::get("global.required_field", ['field' => 'username']), - 'password.required' => Lang::get("global.required_field", ['field' => 'password']), - 'password.confirmed' => Lang::get("global.password_confirmed", ['field' => 'password']), - 'email.required' => Lang::get("global.required_field", ['field' => 'email']), - 'email.email' => Lang::get("validation.email", ['attribute' => 'email']), - 'password.min' => Lang::get("global.password_gen_length"), - 'username.unique' => Lang::get('global.username_unique'), - 'email.unique' => Lang::get('global.email_unique'), - ]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - // invoke OnBeforeUserFormSave event - if ($this->events) { - EvolutionCMS()->invokeEvent("OnBeforeUserSave", [ - "mode" => "new", - "user" => &$this->userData, - ]); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - - $this->userData['clearPassword'] = $this->userData['password']; - $this->userData['password'] = EvolutionCMS()->getPasswordHash()->HashPassword($this->userData['password']); - if (isset($this->userData['dob'])) { - if (!is_numeric($this->userData['dob'])) { - $this->userData['dob'] = null; - } - } - - $user = User::create($this->userData); - $this->userData['internalKey'] = $user->getKey(); - $user->attributes()->create($this->userData); - - // invoke OnWebSaveUser event - if ($this->events) { - EvolutionCMS()->invokeEvent("OnUserFormSave", [ - "mode" => "new", - "userid" => $user->getKey(), - "username" => $user->username, - "userpassword" => $this->userData['clearPassword'], - "useremail" => $user->attributes->email, - "userfullname" => $user->attributes->fullname - ]); - } - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - - return $user; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserRepairPassword.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserRepairPassword.php deleted file mode 100644 index 0e2c4d1c64..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserRepairPassword.php +++ /dev/null @@ -1,120 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return [ - 'id' => ['required', 'exists:users'], - ]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return [ - 'id.required' => Lang::get("global.required_field", ['field' => 'username']), - 'id.exists' => Lang::get("global.could_not_find_user"), - ]; - } - - /** - * @return string - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): string - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - $user = User::find($this->userData['id']); - $hash = md5(generate_password(10) . time()); - $user->cachepwd = $hash; - $user->save(); - return $hash; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserSaveSettings.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserSaveSettings.php deleted file mode 100644 index 927ce1363b..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserSaveSettings.php +++ /dev/null @@ -1,151 +0,0 @@ -userData = $userData; - $this->events = $events; - $this->cache = $cache; - $this->validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return []; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return []; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): bool - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - // determine which settings can be saved blank (based on 'default_{settingname}' POST checkbox values) - $defaults = array( - 'upload_images', - 'upload_media', - 'upload_flash', - 'upload_files' - ); - - // get user setting field names - $customFields = $this->excludeStandardFields($this->userData); - - foreach ($customFields as $n => $v) { - if (!in_array($n, $defaults) && (is_scalar($v) && trim($v) == '' || is_array($v) && empty($v))) { - continue; - } // ignore blacklist and empties - $settings[$n] = $v; // this value should be saved - } - - foreach ($defaults as $k) { - if (isset($settings['default_' . $k]) && $settings['default_' . $k] == '1') { - unset($settings[$k]); - } - unset($settings['default_' . $k]); - } - - foreach ($settings as $n => $vl) { - if (is_array($vl)) { - $vl = implode(',', $vl); - } - if ((string)$vl != '') { - \EvolutionCMS\Models\UserSetting::updateOrCreate(['setting_name' => $n, 'user' => $this->userData['id']], - ['setting_value' => $vl]); - } - } - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - - return true; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - return true; - } - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserSaveValues.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserSaveValues.php deleted file mode 100644 index 895189c9ab..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserSaveValues.php +++ /dev/null @@ -1,151 +0,0 @@ -userData = $userData; - $this->events = $events; - $this->cache = $cache; - $this->validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return ['id' => ['required']]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return ['id.required' => Lang::get("global.required_field", ['field' => 'username'])]; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): bool - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $id = $this->userData['id']; - unset($this->userData['id']); - - $values = $this->excludeStandardFields($this->userData); - - $tmplvars = SiteTmplvar::select('site_tmplvars.*', 'user_values.id AS value_id', 'user_values.value') - ->whereIn('name', array_keys($values)) - ->leftJoin('user_values', function($query) use ($id) { - $query->on('user_values.userid', '=', \DB::raw($id)); - $query->on('user_values.tmplvarid', '=', 'site_tmplvars.id'); - }) - ->get(); - - foreach ($tmplvars as $tmplvar) { - $value = (string) $values[$tmplvar->name]; - - if ($value != '') { - if ($tmplvar->value_id) { - UserValue::where('id', $tmplvar->value_id)->update([ - 'value' => $value, - ]); - } else { - UserValue::create([ - 'tmplvarid' => $tmplvar->id, - 'userid' => $id, - 'value' => $value, - ]); - } - } else if ($tmplvar->value_id) { - UserValue::where('id', $tmplvar->value_id)->delete(); - } - } - - if ($this->cache) { - EvolutionCMS()->clearCache('full'); - } - - return true; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - return true; - } - -} \ No newline at end of file diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserSetGroups.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserSetGroups.php deleted file mode 100644 index 36720378c6..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserSetGroups.php +++ /dev/null @@ -1,48 +0,0 @@ -checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $user = User::find($this->userData['id']); - if (is_null($user)) { - throw new ServiceActionException(\Lang::get('global.user_doesnt_exist')); - } - if (is_array($this->userData['groups'])) { - $user->memberGroups()->delete(); - foreach ($this->userData['groups'] as $group) { - $user->memberGroups()->create(['user_group' => $group]); - - } - } - return $user; - } - - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserSetRole.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserSetRole.php deleted file mode 100644 index 41b9cdfb2c..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserSetRole.php +++ /dev/null @@ -1,112 +0,0 @@ -userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return []; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return []; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $user = User::find($this->userData['id']); - if (is_null($user)) { - throw new ServiceActionException(\Lang::get('global.user_doesnt_exist')); - } - $user->attributes->role = $this->userData['role']; - $user->attributes->save(); - - return $user; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - return true; - } - -} diff --git a/core/vendor/evocms-services/user-manager/src/Services/Users/UserVerified.php b/core/vendor/evocms-services/user-manager/src/Services/Users/UserVerified.php deleted file mode 100644 index c05f6eafdd..0000000000 --- a/core/vendor/evocms-services/user-manager/src/Services/Users/UserVerified.php +++ /dev/null @@ -1,121 +0,0 @@ -validate = $this->getValidationRules(); - $this->messages = $this->getValidationMessages(); - $this->userData = $userData; - $this->events = $events; - $this->cache = $cache; - } - - /** - * @return \string[][] - */ - public function getValidationRules(): array - { - return ['username' => ['required'], - 'verified_key' => ['required']]; - } - - /** - * @return array - */ - public function getValidationMessages(): array - { - return []; - } - - /** - * @return \Illuminate\Database\Eloquent\Model - * @throws ServiceActionException - * @throws ServiceValidationException - */ - public function process(): \Illuminate\Database\Eloquent\Model - { - if (!$this->checkRules()) { - throw new ServiceActionException(\Lang::get('global.error_no_privileges')); - } - - if (!$this->validate()) { - $exception = new ServiceValidationException(); - $exception->setValidationErrors($this->validateErrors); - throw $exception; - } - - $user = User::where('username', $this->userData['username']) - ->where('verified_key', $this->userData['verified_key']) - ->first(); - if (is_null($user)) { - throw new ServiceActionException(\Lang::get('global.user_doesnt_exist')); - } - $user->verified_key = null; - $user->save(); - $user->attributes->verified = 1; - $user->attributes->save(); - - return $user; - } - - /** - * @return bool - */ - public function checkRules(): bool - { - return true; - } - - /** - * @return bool - */ - public function validate(): bool - { - $validator = \Validator::make($this->userData, $this->validate, $this->messages); - $this->validateErrors = $validator->errors()->toArray(); - return !$validator->fails(); - } - -} diff --git a/core/vendor/guzzlehttp/promises/src/functions.php b/core/vendor/guzzlehttp/promises/src/functions.php deleted file mode 100644 index c03d39d021..0000000000 --- a/core/vendor/guzzlehttp/promises/src/functions.php +++ /dev/null @@ -1,363 +0,0 @@ - - * while ($eventLoop->isRunning()) { - * GuzzleHttp\Promise\queue()->run(); - * } - * - * - * @param TaskQueueInterface $assign Optionally specify a new queue instance. - * - * @return TaskQueueInterface - * - * @deprecated queue will be removed in guzzlehttp/promises:2.0. Use Utils::queue instead. - */ -function queue(TaskQueueInterface $assign = null) -{ - return Utils::queue($assign); -} - -/** - * Adds a function to run in the task queue when it is next `run()` and returns - * a promise that is fulfilled or rejected with the result. - * - * @param callable $task Task function to run. - * - * @return PromiseInterface - * - * @deprecated task will be removed in guzzlehttp/promises:2.0. Use Utils::task instead. - */ -function task(callable $task) -{ - return Utils::task($task); -} - -/** - * Creates a promise for a value if the value is not a promise. - * - * @param mixed $value Promise or value. - * - * @return PromiseInterface - * - * @deprecated promise_for will be removed in guzzlehttp/promises:2.0. Use Create::promiseFor instead. - */ -function promise_for($value) -{ - return Create::promiseFor($value); -} - -/** - * Creates a rejected promise for a reason if the reason is not a promise. If - * the provided reason is a promise, then it is returned as-is. - * - * @param mixed $reason Promise or reason. - * - * @return PromiseInterface - * - * @deprecated rejection_for will be removed in guzzlehttp/promises:2.0. Use Create::rejectionFor instead. - */ -function rejection_for($reason) -{ - return Create::rejectionFor($reason); -} - -/** - * Create an exception for a rejected promise value. - * - * @param mixed $reason - * - * @return \Exception|\Throwable - * - * @deprecated exception_for will be removed in guzzlehttp/promises:2.0. Use Create::exceptionFor instead. - */ -function exception_for($reason) -{ - return Create::exceptionFor($reason); -} - -/** - * Returns an iterator for the given value. - * - * @param mixed $value - * - * @return \Iterator - * - * @deprecated iter_for will be removed in guzzlehttp/promises:2.0. Use Create::iterFor instead. - */ -function iter_for($value) -{ - return Create::iterFor($value); -} - -/** - * Synchronously waits on a promise to resolve and returns an inspection state - * array. - * - * Returns a state associative array containing a "state" key mapping to a - * valid promise state. If the state of the promise is "fulfilled", the array - * will contain a "value" key mapping to the fulfilled value of the promise. If - * the promise is rejected, the array will contain a "reason" key mapping to - * the rejection reason of the promise. - * - * @param PromiseInterface $promise Promise or value. - * - * @return array - * - * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspect instead. - */ -function inspect(PromiseInterface $promise) -{ - return Utils::inspect($promise); -} - -/** - * Waits on all of the provided promises, but does not unwrap rejected promises - * as thrown exception. - * - * Returns an array of inspection state arrays. - * - * @see inspect for the inspection state array format. - * - * @param PromiseInterface[] $promises Traversable of promises to wait upon. - * - * @return array - * - * @deprecated inspect will be removed in guzzlehttp/promises:2.0. Use Utils::inspectAll instead. - */ -function inspect_all($promises) -{ - return Utils::inspectAll($promises); -} - -/** - * Waits on all of the provided promises and returns the fulfilled values. - * - * Returns an array that contains the value of each promise (in the same order - * the promises were provided). An exception is thrown if any of the promises - * are rejected. - * - * @param iterable $promises Iterable of PromiseInterface objects to wait on. - * - * @return array - * - * @throws \Exception on error - * @throws \Throwable on error in PHP >=7 - * - * @deprecated unwrap will be removed in guzzlehttp/promises:2.0. Use Utils::unwrap instead. - */ -function unwrap($promises) -{ - return Utils::unwrap($promises); -} - -/** - * Given an array of promises, return a promise that is fulfilled when all the - * items in the array are fulfilled. - * - * The promise's fulfillment value is an array with fulfillment values at - * respective positions to the original array. If any promise in the array - * rejects, the returned promise is rejected with the rejection reason. - * - * @param mixed $promises Promises or values. - * @param bool $recursive If true, resolves new promises that might have been added to the stack during its own resolution. - * - * @return PromiseInterface - * - * @deprecated all will be removed in guzzlehttp/promises:2.0. Use Utils::all instead. - */ -function all($promises, $recursive = false) -{ - return Utils::all($promises, $recursive); -} - -/** - * Initiate a competitive race between multiple promises or values (values will - * become immediately fulfilled promises). - * - * When count amount of promises have been fulfilled, the returned promise is - * fulfilled with an array that contains the fulfillment values of the winners - * in order of resolution. - * - * This promise is rejected with a {@see AggregateException} if the number of - * fulfilled promises is less than the desired $count. - * - * @param int $count Total number of promises. - * @param mixed $promises Promises or values. - * - * @return PromiseInterface - * - * @deprecated some will be removed in guzzlehttp/promises:2.0. Use Utils::some instead. - */ -function some($count, $promises) -{ - return Utils::some($count, $promises); -} - -/** - * Like some(), with 1 as count. However, if the promise fulfills, the - * fulfillment value is not an array of 1 but the value directly. - * - * @param mixed $promises Promises or values. - * - * @return PromiseInterface - * - * @deprecated any will be removed in guzzlehttp/promises:2.0. Use Utils::any instead. - */ -function any($promises) -{ - return Utils::any($promises); -} - -/** - * Returns a promise that is fulfilled when all of the provided promises have - * been fulfilled or rejected. - * - * The returned promise is fulfilled with an array of inspection state arrays. - * - * @see inspect for the inspection state array format. - * - * @param mixed $promises Promises or values. - * - * @return PromiseInterface - * - * @deprecated settle will be removed in guzzlehttp/promises:2.0. Use Utils::settle instead. - */ -function settle($promises) -{ - return Utils::settle($promises); -} - -/** - * Given an iterator that yields promises or values, returns a promise that is - * fulfilled with a null value when the iterator has been consumed or the - * aggregate promise has been fulfilled or rejected. - * - * $onFulfilled is a function that accepts the fulfilled value, iterator index, - * and the aggregate promise. The callback can invoke any necessary side - * effects and choose to resolve or reject the aggregate if needed. - * - * $onRejected is a function that accepts the rejection reason, iterator index, - * and the aggregate promise. The callback can invoke any necessary side - * effects and choose to resolve or reject the aggregate if needed. - * - * @param mixed $iterable Iterator or array to iterate over. - * @param callable $onFulfilled - * @param callable $onRejected - * - * @return PromiseInterface - * - * @deprecated each will be removed in guzzlehttp/promises:2.0. Use Each::of instead. - */ -function each( - $iterable, - callable $onFulfilled = null, - callable $onRejected = null -) { - return Each::of($iterable, $onFulfilled, $onRejected); -} - -/** - * Like each, but only allows a certain number of outstanding promises at any - * given time. - * - * $concurrency may be an integer or a function that accepts the number of - * pending promises and returns a numeric concurrency limit value to allow for - * dynamic a concurrency size. - * - * @param mixed $iterable - * @param int|callable $concurrency - * @param callable $onFulfilled - * @param callable $onRejected - * - * @return PromiseInterface - * - * @deprecated each_limit will be removed in guzzlehttp/promises:2.0. Use Each::ofLimit instead. - */ -function each_limit( - $iterable, - $concurrency, - callable $onFulfilled = null, - callable $onRejected = null -) { - return Each::ofLimit($iterable, $concurrency, $onFulfilled, $onRejected); -} - -/** - * Like each_limit, but ensures that no promise in the given $iterable argument - * is rejected. If any promise is rejected, then the aggregate promise is - * rejected with the encountered rejection. - * - * @param mixed $iterable - * @param int|callable $concurrency - * @param callable $onFulfilled - * - * @return PromiseInterface - * - * @deprecated each_limit_all will be removed in guzzlehttp/promises:2.0. Use Each::ofLimitAll instead. - */ -function each_limit_all( - $iterable, - $concurrency, - callable $onFulfilled = null -) { - return Each::ofLimitAll($iterable, $concurrency, $onFulfilled); -} - -/** - * Returns true if a promise is fulfilled. - * - * @return bool - * - * @deprecated is_fulfilled will be removed in guzzlehttp/promises:2.0. Use Is::fulfilled instead. - */ -function is_fulfilled(PromiseInterface $promise) -{ - return Is::fulfilled($promise); -} - -/** - * Returns true if a promise is rejected. - * - * @return bool - * - * @deprecated is_rejected will be removed in guzzlehttp/promises:2.0. Use Is::rejected instead. - */ -function is_rejected(PromiseInterface $promise) -{ - return Is::rejected($promise); -} - -/** - * Returns true if a promise is fulfilled or rejected. - * - * @return bool - * - * @deprecated is_settled will be removed in guzzlehttp/promises:2.0. Use Is::settled instead. - */ -function is_settled(PromiseInterface $promise) -{ - return Is::settled($promise); -} - -/** - * Create a new coroutine. - * - * @see Coroutine - * - * @return PromiseInterface - * - * @deprecated coroutine will be removed in guzzlehttp/promises:2.0. Use Coroutine::of instead. - */ -function coroutine(callable $generatorFn) -{ - return Coroutine::of($generatorFn); -} diff --git a/core/vendor/guzzlehttp/promises/src/functions_include.php b/core/vendor/guzzlehttp/promises/src/functions_include.php deleted file mode 100644 index 34cd1710aa..0000000000 --- a/core/vendor/guzzlehttp/promises/src/functions_include.php +++ /dev/null @@ -1,6 +0,0 @@ -seconds > 0) { return $this->redis->set($this->name, $this->owner, 'EX', $this->seconds, 'NX') == true; - } else { - return $this->redis->setnx($this->name, $this->owner) === 1; } + + return $this->redis->setnx($this->name, $this->owner) === 1; } /** diff --git a/core/vendor/illuminate/cache/RedisStore.php b/core/vendor/illuminate/cache/RedisStore.php index be4dc96ef3..4d03745147 100644 --- a/core/vendor/illuminate/cache/RedisStore.php +++ b/core/vendor/illuminate/cache/RedisStore.php @@ -118,12 +118,20 @@ public function put($key, $value, $seconds) */ public function putMany(array $values, $seconds) { + $serializedValues = []; + + foreach ($values as $key => $value) { + $serializedValues[$this->prefix.$key] = $this->serialize($value); + } + $this->connection()->multi(); $manyResult = null; - foreach ($values as $key => $value) { - $result = $this->put($key, $value, $seconds); + foreach ($serializedValues as $key => $value) { + $result = (bool) $this->connection()->setex( + $key, (int) max(1, $seconds), $value + ); $manyResult = is_null($manyResult) ? $result : $result && $manyResult; } diff --git a/core/vendor/illuminate/collections/LazyCollection.php b/core/vendor/illuminate/collections/LazyCollection.php index 39c7ecc4f8..0cbe33ad9e 100644 --- a/core/vendor/illuminate/collections/LazyCollection.php +++ b/core/vendor/illuminate/collections/LazyCollection.php @@ -1726,6 +1726,6 @@ protected function passthru($method, array $params) */ protected function now() { - return time(); + return Carbon::now()->timestamp; } } diff --git a/core/vendor/illuminate/console/Scheduling/ManagesFrequencies.php b/core/vendor/illuminate/console/Scheduling/ManagesFrequencies.php index 8eb7fea22e..020144ebea 100644 --- a/core/vendor/illuminate/console/Scheduling/ManagesFrequencies.php +++ b/core/vendor/illuminate/console/Scheduling/ManagesFrequencies.php @@ -66,9 +66,7 @@ private function inTimeInterval($startTime, $endTime) } } - return function () use ($now, $startTime, $endTime) { - return $now->between($startTime, $endTime); - }; + return fn () => $now->between($startTime, $endTime); } /** diff --git a/core/vendor/illuminate/database/Connection.php b/core/vendor/illuminate/database/Connection.php index f95cf1799d..8f3b3c53ae 100644 --- a/core/vendor/illuminate/database/Connection.php +++ b/core/vendor/illuminate/database/Connection.php @@ -257,7 +257,9 @@ public function useDefaultQueryGrammar() */ protected function getDefaultQueryGrammar() { - return new QueryGrammar; + ($grammar = new QueryGrammar)->setConnection($this); + + return $grammar; } /** @@ -1040,6 +1042,69 @@ public function raw($value) return new Expression($value); } + /** + * Escape a value for safe SQL embedding. + * + * @param string|float|int|bool|null $value + * @param bool $binary + * @return string + */ + public function escape($value, $binary = false) + { + if ($value === null) { + return 'null'; + } elseif ($binary) { + return $this->escapeBinary($value); + } elseif (is_int($value) || is_float($value)) { + return (string) $value; + } elseif (is_bool($value)) { + return $this->escapeBool($value); + } else { + if (str_contains($value, "\00")) { + throw new RuntimeException('Strings with null bytes cannot be escaped. Use the binary escape option.'); + } + + if (preg_match('//u', $value) === false) { + throw new RuntimeException('Strings with invalid UTF-8 byte sequences cannot be escaped.'); + } + + return $this->escapeString($value); + } + } + + /** + * Escape a string value for safe SQL embedding. + * + * @param string $value + * @return string + */ + protected function escapeString($value) + { + return $this->getPdo()->quote($value); + } + + /** + * Escape a boolean value for safe SQL embedding. + * + * @param bool $value + * @return string + */ + protected function escapeBool($value) + { + return $value ? '1' : '0'; + } + + /** + * Escape a binary value for safe SQL embedding. + * + * @param string $value + * @return string + */ + protected function escapeBinary($value) + { + throw new RuntimeException('The database connection does not support escaping binary values.'); + } + /** * Determine if the database connection has modified any database records. * diff --git a/core/vendor/illuminate/database/Eloquent/Concerns/HasAttributes.php b/core/vendor/illuminate/database/Eloquent/Concerns/HasAttributes.php index 309e83c660..69d0e343de 100644 --- a/core/vendor/illuminate/database/Eloquent/Concerns/HasAttributes.php +++ b/core/vendor/illuminate/database/Eloquent/Concerns/HasAttributes.php @@ -1310,7 +1310,7 @@ public static function encryptUsing($encrypter) */ protected function castAttributeAsHashedString($key, $value) { - return $value !== null && password_get_info($value)['algo'] === null ? Hash::make($value) : $value; + return $value !== null && ! Hash::isHashed($value) ? Hash::make($value) : $value; } /** @@ -2063,11 +2063,11 @@ public function originalIsEquivalent($key) } elseif ($this->hasCast($key, static::$primitiveCastTypes)) { return $this->castAttribute($key, $attribute) === $this->castAttribute($key, $original); - } elseif ($this->isClassCastable($key) && in_array($this->getCasts()[$key], [AsArrayObject::class, AsCollection::class])) { + } elseif ($this->isClassCastable($key) && Str::startsWith($this->getCasts()[$key], [AsArrayObject::class, AsCollection::class])) { return $this->fromJson($attribute) === $this->fromJson($original); } elseif ($this->isClassCastable($key) && Str::startsWith($this->getCasts()[$key], [AsEnumArrayObject::class, AsEnumCollection::class])) { return $this->fromJson($attribute) === $this->fromJson($original); - } elseif ($this->isClassCastable($key) && $original !== null && in_array($this->getCasts()[$key], [AsEncryptedArrayObject::class, AsEncryptedCollection::class])) { + } elseif ($this->isClassCastable($key) && $original !== null && Str::startsWith($this->getCasts()[$key], [AsEncryptedArrayObject::class, AsEncryptedCollection::class])) { return $this->fromEncryptedString($attribute) === $this->fromEncryptedString($original); } diff --git a/core/vendor/illuminate/database/Eloquent/Concerns/HidesAttributes.php b/core/vendor/illuminate/database/Eloquent/Concerns/HidesAttributes.php index 5a7e3ba310..c124fc6032 100644 --- a/core/vendor/illuminate/database/Eloquent/Concerns/HidesAttributes.php +++ b/core/vendor/illuminate/database/Eloquent/Concerns/HidesAttributes.php @@ -77,7 +77,7 @@ public function makeVisible($attributes) $this->hidden = array_diff($this->hidden, $attributes); if (! empty($this->visible)) { - $this->visible = array_merge($this->visible, $attributes); + $this->visible = array_values(array_unique(array_merge($this->visible, $attributes))); } return $this; @@ -103,9 +103,9 @@ public function makeVisibleIf($condition, $attributes) */ public function makeHidden($attributes) { - $this->hidden = array_merge( + $this->hidden = array_values(array_unique(array_merge( $this->hidden, is_array($attributes) ? $attributes : func_get_args() - ); + ))); return $this; } diff --git a/core/vendor/illuminate/database/Eloquent/Factories/Factory.php b/core/vendor/illuminate/database/Eloquent/Factories/Factory.php index 0210fa4293..191e8d3d11 100644 --- a/core/vendor/illuminate/database/Eloquent/Factories/Factory.php +++ b/core/vendor/illuminate/database/Eloquent/Factories/Factory.php @@ -471,7 +471,7 @@ protected function expandAttributes(array $definition) return collect($definition) ->map($evaluateRelations = function ($attribute) { if ($attribute instanceof self) { - $attribute = $this->getRandomRecycledModel($attribute->modelName()) + $attribute = $this->getRandomRecycledModel($attribute->modelName())?->getKey() ?? $attribute->recycle($this->recycle)->create()->getKey(); } elseif ($attribute instanceof Model) { $attribute = $attribute->getKey(); diff --git a/core/vendor/illuminate/database/Grammar.php b/core/vendor/illuminate/database/Grammar.php index bba1e5831c..0d2b0eff42 100644 --- a/core/vendor/illuminate/database/Grammar.php +++ b/core/vendor/illuminate/database/Grammar.php @@ -10,6 +10,13 @@ abstract class Grammar { use Macroable; + /** + * The connection used for escaping values. + * + * @var \Illuminate\Database\Connection + */ + protected $connection; + /** * The grammar table prefix. * @@ -196,6 +203,22 @@ public function quoteString($value) return "'$value'"; } + /** + * Escapes a value for safe SQL embedding. + * + * @param string|float|int|bool|null $value + * @param bool $binary + * @return string + */ + public function escape($value, $binary = false) + { + if (is_null($this->connection)) { + throw new RuntimeException("The database driver's grammar implementation does not support escaping values."); + } + + return $this->connection->escape($value, $binary); + } + /** * Determine if the given value is a raw expression. * @@ -254,4 +277,17 @@ public function setTablePrefix($prefix) return $this; } + + /** + * Set the grammar's database connection. + * + * @param \Illuminate\Database\Connection $prefix + * @return $this + */ + public function setConnection($connection) + { + $this->connection = $connection; + + return $this; + } } diff --git a/core/vendor/illuminate/database/MySqlConnection.php b/core/vendor/illuminate/database/MySqlConnection.php index 54e3d473d5..2f87b16f5a 100644 --- a/core/vendor/illuminate/database/MySqlConnection.php +++ b/core/vendor/illuminate/database/MySqlConnection.php @@ -13,6 +13,19 @@ class MySqlConnection extends Connection { + /** + * Escape a binary value for safe SQL embedding. + * + * @param string $value + * @return string + */ + protected function escapeBinary($value) + { + $hex = bin2hex($value); + + return "x'{$hex}'"; + } + /** * Determine if the connected database is a MariaDB database. * @@ -30,7 +43,9 @@ public function isMaria() */ protected function getDefaultQueryGrammar() { - return $this->withTablePrefix(new QueryGrammar); + ($grammar = new QueryGrammar)->setConnection($this); + + return $this->withTablePrefix($grammar); } /** @@ -54,7 +69,9 @@ public function getSchemaBuilder() */ protected function getDefaultSchemaGrammar() { - return $this->withTablePrefix(new SchemaGrammar); + ($grammar = new SchemaGrammar)->setConnection($this); + + return $this->withTablePrefix($grammar); } /** diff --git a/core/vendor/illuminate/database/PostgresConnection.php b/core/vendor/illuminate/database/PostgresConnection.php index f750f64e6d..a03b29e3be 100644 --- a/core/vendor/illuminate/database/PostgresConnection.php +++ b/core/vendor/illuminate/database/PostgresConnection.php @@ -12,6 +12,30 @@ class PostgresConnection extends Connection { + /** + * Escape a binary value for safe SQL embedding. + * + * @param string $value + * @return string + */ + protected function escapeBinary($value) + { + $hex = bin2hex($value); + + return "'\x{$hex}'::bytea"; + } + + /** + * Escape a bool value for safe SQL embedding. + * + * @param bool $value + * @return string + */ + protected function escapeBool($value) + { + return $value ? 'true' : 'false'; + } + /** * Get the default query grammar instance. * @@ -19,7 +43,9 @@ class PostgresConnection extends Connection */ protected function getDefaultQueryGrammar() { - return $this->withTablePrefix(new QueryGrammar); + ($grammar = new QueryGrammar)->setConnection($this); + + return $this->withTablePrefix($grammar); } /** @@ -43,7 +69,9 @@ public function getSchemaBuilder() */ protected function getDefaultSchemaGrammar() { - return $this->withTablePrefix(new SchemaGrammar); + ($grammar = new SchemaGrammar)->setConnection($this); + + return $this->withTablePrefix($grammar); } /** diff --git a/core/vendor/illuminate/database/Query/Grammars/Grammar.php b/core/vendor/illuminate/database/Query/Grammars/Grammar.php index fc384662de..1eb994a0d7 100644 --- a/core/vendor/illuminate/database/Query/Grammars/Grammar.php +++ b/core/vendor/illuminate/database/Query/Grammars/Grammar.php @@ -620,7 +620,7 @@ protected function compileJsonContains($column, $value) */ public function prepareBindingForJsonContains($binding) { - return json_encode($binding); + return json_encode($binding, JSON_UNESCAPED_UNICODE); } /** diff --git a/core/vendor/illuminate/database/SQLiteConnection.php b/core/vendor/illuminate/database/SQLiteConnection.php index 59b5edb210..6e9df07e97 100644 --- a/core/vendor/illuminate/database/SQLiteConnection.php +++ b/core/vendor/illuminate/database/SQLiteConnection.php @@ -36,6 +36,19 @@ public function __construct($pdo, $database = '', $tablePrefix = '', array $conf : $this->getSchemaBuilder()->disableForeignKeyConstraints(); } + /** + * Escape a binary value for safe SQL embedding. + * + * @param string $value + * @return string + */ + protected function escapeBinary($value) + { + $hex = bin2hex($value); + + return "x'{$hex}'"; + } + /** * Get the default query grammar instance. * @@ -43,7 +56,9 @@ public function __construct($pdo, $database = '', $tablePrefix = '', array $conf */ protected function getDefaultQueryGrammar() { - return $this->withTablePrefix(new QueryGrammar); + ($grammar = new QueryGrammar)->setConnection($this); + + return $this->withTablePrefix($grammar); } /** @@ -67,7 +82,9 @@ public function getSchemaBuilder() */ protected function getDefaultSchemaGrammar() { - return $this->withTablePrefix(new SchemaGrammar); + ($grammar = new SchemaGrammar)->setConnection($this); + + return $this->withTablePrefix($grammar); } /** diff --git a/core/vendor/illuminate/database/SqlServerConnection.php b/core/vendor/illuminate/database/SqlServerConnection.php index feb4577bc9..57d2b20402 100644 --- a/core/vendor/illuminate/database/SqlServerConnection.php +++ b/core/vendor/illuminate/database/SqlServerConnection.php @@ -54,6 +54,19 @@ public function transaction(Closure $callback, $attempts = 1) } } + /** + * Escape a binary value for safe SQL embedding. + * + * @param string $value + * @return string + */ + protected function escapeBinary($value) + { + $hex = bin2hex($value); + + return "0x{$hex}"; + } + /** * Get the default query grammar instance. * @@ -61,7 +74,9 @@ public function transaction(Closure $callback, $attempts = 1) */ protected function getDefaultQueryGrammar() { - return $this->withTablePrefix(new QueryGrammar); + ($grammar = new QueryGrammar)->setConnection($this); + + return $this->withTablePrefix($grammar); } /** @@ -85,7 +100,9 @@ public function getSchemaBuilder() */ protected function getDefaultSchemaGrammar() { - return $this->withTablePrefix(new SchemaGrammar); + ($grammar = new SchemaGrammar)->setConnection($this); + + return $this->withTablePrefix($grammar); } /** diff --git a/core/vendor/illuminate/routing/ResourceRegistrar.php b/core/vendor/illuminate/routing/ResourceRegistrar.php index f383aedca8..6e3a33a178 100644 --- a/core/vendor/illuminate/routing/ResourceRegistrar.php +++ b/core/vendor/illuminate/routing/ResourceRegistrar.php @@ -708,8 +708,8 @@ public static function verbs(array $verbs = []) { if (empty($verbs)) { return static::$verbs; - } else { - static::$verbs = array_merge(static::$verbs, $verbs); } + + static::$verbs = array_merge(static::$verbs, $verbs); } } diff --git a/core/vendor/illuminate/support/Facades/DB.php b/core/vendor/illuminate/support/Facades/DB.php index 84007ee755..91d5954e0b 100644 --- a/core/vendor/illuminate/support/Facades/DB.php +++ b/core/vendor/illuminate/support/Facades/DB.php @@ -53,6 +53,7 @@ * @method static \Illuminate\Database\Connection beforeExecuting(\Closure $callback) * @method static void listen(\Closure $callback) * @method static \Illuminate\Contracts\Database\Query\Expression raw(mixed $value) + * @method static string escape(string|float|int|bool|null $value, bool $binary = false) * @method static bool hasModifiedRecords() * @method static void recordsHaveBeenModified(bool $value = true) * @method static \Illuminate\Database\Connection setRecordModificationState(bool $value) diff --git a/core/vendor/illuminate/support/Facades/Hash.php b/core/vendor/illuminate/support/Facades/Hash.php index 1cfe56120e..280585d6e3 100644 --- a/core/vendor/illuminate/support/Facades/Hash.php +++ b/core/vendor/illuminate/support/Facades/Hash.php @@ -10,6 +10,7 @@ * @method static string make(string $value, array $options = []) * @method static bool check(string $value, string $hashedValue, array $options = []) * @method static bool needsRehash(string $hashedValue, array $options = []) + * @method static bool isHashed(string $value) * @method static string getDefaultDriver() * @method static mixed driver(string|null $driver = null) * @method static \Illuminate\Hashing\HashManager extend(string $driver, \Closure $callback) diff --git a/core/vendor/illuminate/support/Manager.php b/core/vendor/illuminate/support/Manager.php index f8ae0729b1..dac4731226 100644 --- a/core/vendor/illuminate/support/Manager.php +++ b/core/vendor/illuminate/support/Manager.php @@ -98,12 +98,12 @@ protected function createDriver($driver) // callbacks allow developers to build their own "drivers" easily using Closures. if (isset($this->customCreators[$driver])) { return $this->callCustomCreator($driver); - } else { - $method = 'create'.Str::studly($driver).'Driver'; + } + + $method = 'create'.Str::studly($driver).'Driver'; - if (method_exists($this, $method)) { - return $this->$method(); - } + if (method_exists($this, $method)) { + return $this->$method(); } throw new InvalidArgumentException("Driver [$driver] not supported."); diff --git a/core/vendor/illuminate/support/Sleep.php b/core/vendor/illuminate/support/Sleep.php index bb90229908..a31269fc90 100644 --- a/core/vendor/illuminate/support/Sleep.php +++ b/core/vendor/illuminate/support/Sleep.php @@ -13,6 +13,13 @@ class Sleep { use Macroable; + /** + * The fake sleep callbacks. + * + * @var array + */ + public static $fakeSleepCallbacks = []; + /** * The total duration to sleep. * @@ -252,6 +259,10 @@ public function __destruct() if (static::$fake) { static::$sequence[] = $this->duration; + foreach (static::$fakeSleepCallbacks as $callback) { + $callback($this->duration); + } + return; } @@ -305,6 +316,7 @@ public static function fake($value = true) static::$fake = $value; static::$sequence = []; + static::$fakeSleepCallbacks = []; } /** @@ -435,4 +447,15 @@ public function unless($condition) { return $this->when(! value($condition, $this)); } + + /** + * Specify a callback that should be invoked when faking sleep within a test. + * + * @param callable $callback + * @return void + */ + public static function whenFakingSleep($callback) + { + static::$fakeSleepCallbacks[] = $callback; + } } diff --git a/core/vendor/illuminate/validation/ClosureValidationRule.php b/core/vendor/illuminate/validation/ClosureValidationRule.php index 5d97eb5cd3..8d53cdead7 100644 --- a/core/vendor/illuminate/validation/ClosureValidationRule.php +++ b/core/vendor/illuminate/validation/ClosureValidationRule.php @@ -94,7 +94,7 @@ public function setValidator($validator) * Create a pending potentially translated string. * * @param string $attribute - * @param ?string $message + * @param string|null $message * @return \Illuminate\Translation\PotentiallyTranslatedString */ protected function pendingPotentiallyTranslatedString($attribute, $message) diff --git a/core/vendor/illuminate/validation/Concerns/ValidatesAttributes.php b/core/vendor/illuminate/validation/Concerns/ValidatesAttributes.php index bbd910ae86..25146fc1bd 100644 --- a/core/vendor/illuminate/validation/Concerns/ValidatesAttributes.php +++ b/core/vendor/illuminate/validation/Concerns/ValidatesAttributes.php @@ -7,6 +7,7 @@ use Brick\Math\Exception\MathException as BrickMathException; use DateTime; use DateTimeInterface; +use DateTimeZone; use Egulias\EmailValidator\EmailValidator; use Egulias\EmailValidator\Validation\DNSCheckValidation; use Egulias\EmailValidator\Validation\Extra\SpoofCheckValidation; @@ -2285,11 +2286,15 @@ public function validateString($attribute, $value) * * @param string $attribute * @param mixed $value + * @param array $parameters * @return bool */ - public function validateTimezone($attribute, $value) + public function validateTimezone($attribute, $value, $parameters = []) { - return in_array($value, timezone_identifiers_list(), true); + return in_array($value, timezone_identifiers_list( + constant(DateTimeZone::class.'::'.Str::upper($parameters[0] ?? 'ALL')), + isset($parameters[1]) ? Str::upper($parameters[1]) : null, + ), true); } /** diff --git a/core/vendor/illuminate/view/Compilers/Concerns/CompilesClasses.php b/core/vendor/illuminate/view/Compilers/Concerns/CompilesClasses.php index b3dbbcd2a0..d2507e7116 100644 --- a/core/vendor/illuminate/view/Compilers/Concerns/CompilesClasses.php +++ b/core/vendor/illuminate/view/Compilers/Concerns/CompilesClasses.php @@ -14,6 +14,6 @@ protected function compileClass($expression) { $expression = is_null($expression) ? '([])' : $expression; - return "class=\"\""; + return "class=\"\""; } } diff --git a/core/vendor/james-heinrich/phpthumb/.gitattributes b/core/vendor/james-heinrich/phpthumb/.gitattributes new file mode 100644 index 0000000000..412eeda78d --- /dev/null +++ b/core/vendor/james-heinrich/phpthumb/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/core/vendor/james-heinrich/phpthumb/.gitignore b/core/vendor/james-heinrich/phpthumb/.gitignore new file mode 100644 index 0000000000..94c51c59aa --- /dev/null +++ b/core/vendor/james-heinrich/phpthumb/.gitignore @@ -0,0 +1,331 @@ +# Composer lock yes or not (comment # uncomment) +composer.lock + +phpThumbCacheIMcommandlineBase.txt +phpThumbCacheIMversion.txt +phpThumbCacheStats.txt +phpThumb.config.php +cache/* +*.bmp +*.eps +*.gif +*.ico +*.jpeg +*.jpg +*.pdf +*.png +*.tif +*.tiff +*.ttf +*.wmf +php_error.log + +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml +*.pubxml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + +############# +## Windows detritus +############# + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac crap +.DS_Store + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist/ +eggs/ +parts/ +var/ +sdist/ +develop-eggs/ +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +# A collection of .gitignore templates +# https://github.com/github/gitignore +/vendor/* +/config/app.php +/config/.env +/logs/* +/webroot/debug_kit + +/config/Datasources/Win/in_sqlite.db + +# Theme assets +/webroot/theme_* + +# NetBeans IDE +nbproject/* +nbbuild/* +nbdist/* +nbactions.xml +nb-configuration.xml +.nb-gradle/* + +# JetBrains IDE PhpStorm +.idea/ +*.iws +.idea_modules/ + +# bower_components +*/bower_components/* +*.jshintrc +*.travis.yml +*.jscsrc +*.csslintrc +*.editorconfig +*.npmignore +*.eslintrc +*.csscomb.json + +# Nodejs NPM & Logs +logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +# Runtime data +pids +*.pid +*.seed +*.pid.lock +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov +# Coverage directory used by tools like istanbul +coverage +# nyc test coverage +.nyc_output +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt +# node-waf configuration +.lock-wscript +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release +# Dependency directories +node_modules/ +jspm_packages/ +# TypeScript v1 declaration files +typings/ +# Optional npm cache directory +.npm +# Optional eslint cache +.eslintcache +# Optional REPL history +.node_repl_history +# Output of 'npm pack' +*.tgz +# Yarn Integrity file +.yarn-integrity +# dotenv environment variables file +.env +# parcel-bundler cache (https://parceljs.org/) +.cache +# next.js build output +.next +# nuxt.js build output +.nuxt +# vuepress build output +.vuepress/dist +# Serverless directories +.serverless +# FuseBox cache +.fusebox/ + +# OS generated files # +###################### +.DS_Store? +._* +.Spotlight-V100 +.Trashes +Icon? diff --git a/core/vendor/nesbot/carbon/composer.json b/core/vendor/nesbot/carbon/composer.json index 63bfb1c2e6..b5416b034b 100644 --- a/core/vendor/nesbot/carbon/composer.json +++ b/core/vendor/nesbot/carbon/composer.json @@ -116,6 +116,7 @@ "test": [ "@phpunit", "@style-check" - ] + ], + "sponsors": "php sponsors.php" } } diff --git a/core/vendor/nesbot/carbon/readme.md b/core/vendor/nesbot/carbon/readme.md index a178c3c702..efc5811ff2 100644 --- a/core/vendor/nesbot/carbon/readme.md +++ b/core/vendor/nesbot/carbon/readme.md @@ -2,7 +2,7 @@ [![Latest Stable Version](https://img.shields.io/packagist/v/nesbot/carbon.svg?style=flat-square)](https://packagist.org/packages/nesbot/carbon) [![Total Downloads](https://img.shields.io/packagist/dt/nesbot/carbon.svg?style=flat-square)](https://packagist.org/packages/nesbot/carbon) -[![GitHub Actions](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fbriannesbitt%2FCarbon%2Fbadge&style=flat-square&label=Build&logo=none)](https://actions-badge.atrox.dev/briannesbitt/Carbon/goto) +[![GitHub Actions](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Fbriannesbitt%2FCarbon%2Fbadge&style=flat-square&label=Build&logo=none)](https://github.com/briannesbitt/Carbon/actions) [![codecov.io](https://img.shields.io/codecov/c/github/briannesbitt/Carbon.svg?style=flat-square)](https://codecov.io/github/briannesbitt/Carbon?branch=master) [![Tidelift](https://tidelift.com/badges/github/briannesbitt/Carbon)](https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme) @@ -119,25 +119,24 @@ This project exists thanks to all the people who contribute. Support this project by becoming a sponsor. Your logo will show up here with a link to your website. - - + +CasinoHex Canada +Casino-portugal.pt +Slots City +inkedin +Probukmacher +AzuraCast +Triplebyte +GitHub Sponsors +Salesforce + + +[[Become a sponsor via OpenCollective](https://opencollective.com/Carbon#sponsor)] - - - - - - - - - - - - - -[[Become a sponsor](https://opencollective.com/Carbon#sponsor)] + +[[Become a sponsor via GitHub](https://github.com/sponsors/kylekatarnls)] ### Backers diff --git a/core/vendor/nesbot/carbon/sponsors.php b/core/vendor/nesbot/carbon/sponsors.php new file mode 100644 index 0000000000..80128161f8 --- /dev/null +++ b/core/vendor/nesbot/carbon/sponsors.php @@ -0,0 +1,87 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Carbon\CarbonImmutable; + +require_once __DIR__.'/vendor/autoload.php'; + +function getOpenCollectiveSponsors(): string +{ + $members = json_decode(file_get_contents('https://opencollective.com/carbon/members/all.json'), true); + $sixMonthsAgo = CarbonImmutable::parse('now - 6 months')->format('Y-m-d h:i'); + + $list = array_filter($members, static function ($member) use ($sixMonthsAgo) { + return ($member['lastTransactionAmount'] > 3 || $member['isActive']) && + $member['role'] === 'BACKER' && + $member['type'] !== 'USER' && + ($member['totalAmountDonated'] > 100 || $member['lastTransactionAt'] > $sixMonthsAgo || $member['isActive'] && $member['lastTransactionAmount'] >= 30); + }); + + $list = array_map(static function (array $member) { + $createdAt = CarbonImmutable::parse($member['createdAt']); + $monthlyContribution = (float) ($member['totalAmountDonated'] / (1 + $createdAt->diffInMonths())); + + if ( + CarbonImmutable::parse($member['lastTransactionAt'])->isAfter('last month') && + $member['lastTransactionAmount'] > $monthlyContribution + ) { + $monthlyContribution = (float) $member['lastTransactionAmount']; + } + + $yearlyContribution = (float) ($member['totalAmountDonated'] / max(1, $createdAt->floatDiffInYears())); + $status = null; + + if ($monthlyContribution > 29) { + $status = 'sponsor'; + } elseif ($monthlyContribution > 3 || $yearlyContribution > 20) { + $status = 'backer'; + } elseif ($member['totalAmountDonated'] > 0) { + $status = 'helper'; + } + + return array_merge($member, [ + 'star' => ($monthlyContribution > 98 || $yearlyContribution > 500), + 'status' => $status, + 'monthlyContribution' => $monthlyContribution, + 'yearlyContribution' => $yearlyContribution, + ]); + }, $list); + + usort($list, static function (array $a, array $b) { + return ($b['monthlyContribution'] <=> $a['monthlyContribution']) + ?: ($b['totalAmountDonated'] <=> $a['totalAmountDonated']); + }); + + return implode('', array_map(static function (array $member) { + $href = htmlspecialchars($member['website'] ?? $member['profile']); + $src = $member['image'] ?? (strtr($member['profile'], ['https://opencollective.com/' => 'https://images.opencollective.com/']).'/avatar/256.png'); + [$x, $y] = @getimagesize($src) ?: [0, 0]; + $validImage = ($x && $y); + $src = $validImage ? htmlspecialchars($src) : 'https://opencollective.com/static/images/default-guest-logo.svg'; + $height = 64; + $width = $validImage ? round($x * $height / $y) : $height; + $href .= (strpos($href, '?') === false ? '?' : '&').'utm_source=opencollective&utm_medium=github&utm_campaign=Carbon'; + $title = htmlspecialchars(($member['description'] ?? null) ?: $member['name']); + $alt = htmlspecialchars($member['name']); + + return "\n".''. + ''.$alt.''. + ''; + }, $list))."\n"; +} + +file_put_contents('readme.md', preg_replace_callback( + '/()[\s\S]+()/', + static function (array $match) { + return $match[1].getOpenCollectiveSponsors().$match[2]; + }, + file_get_contents('readme.md') +)); diff --git a/core/vendor/nesbot/carbon/src/Carbon/Carbon.php b/core/vendor/nesbot/carbon/src/Carbon/Carbon.php index 1e285aa4a7..e32569ae30 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Carbon.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Carbon.php @@ -33,477 +33,477 @@ * @property int $second * @property int $micro * @property int $microsecond - * @property int|float|string $timestamp seconds since the Unix Epoch - * @property string $englishDayOfWeek the day of week in English - * @property string $shortEnglishDayOfWeek the abbreviated day of week in English - * @property string $englishMonth the month in English - * @property string $shortEnglishMonth the abbreviated month in English + * @property int|float|string $timestamp seconds since the Unix Epoch + * @property string $englishDayOfWeek the day of week in English + * @property string $shortEnglishDayOfWeek the abbreviated day of week in English + * @property string $englishMonth the month in English + * @property string $shortEnglishMonth the abbreviated month in English * @property int $milliseconds * @property int $millisecond * @property int $milli - * @property int $week 1 through 53 - * @property int $isoWeek 1 through 53 - * @property int $weekYear year according to week format - * @property int $isoWeekYear year according to ISO week format - * @property int $dayOfYear 1 through 366 - * @property int $age does a diffInYears() with default parameters - * @property int $offset the timezone offset in seconds from UTC - * @property int $offsetMinutes the timezone offset in minutes from UTC - * @property int $offsetHours the timezone offset in hours from UTC - * @property CarbonTimeZone $timezone the current timezone - * @property CarbonTimeZone $tz alias of $timezone - * @property-read int $dayOfWeek 0 (for Sunday) through 6 (for Saturday) - * @property-read int $dayOfWeekIso 1 (for Monday) through 7 (for Sunday) - * @property-read int $weekOfYear ISO-8601 week number of year, weeks starting on Monday - * @property-read int $daysInMonth number of days in the given month - * @property-read string $latinMeridiem "am"/"pm" (Ante meridiem or Post meridiem latin lowercase mark) - * @property-read string $latinUpperMeridiem "AM"/"PM" (Ante meridiem or Post meridiem latin uppercase mark) - * @property-read string $timezoneAbbreviatedName the current timezone abbreviated name - * @property-read string $tzAbbrName alias of $timezoneAbbreviatedName - * @property-read string $dayName long name of weekday translated according to Carbon locale, in english if no translation available for current language - * @property-read string $shortDayName short name of weekday translated according to Carbon locale, in english if no translation available for current language - * @property-read string $minDayName very short name of weekday translated according to Carbon locale, in english if no translation available for current language - * @property-read string $monthName long name of month translated according to Carbon locale, in english if no translation available for current language - * @property-read string $shortMonthName short name of month translated according to Carbon locale, in english if no translation available for current language - * @property-read string $meridiem lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language - * @property-read string $upperMeridiem uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language - * @property-read int $noZeroHour current hour from 1 to 24 - * @property-read int $weeksInYear 51 through 53 - * @property-read int $isoWeeksInYear 51 through 53 - * @property-read int $weekOfMonth 1 through 5 - * @property-read int $weekNumberInMonth 1 through 5 - * @property-read int $firstWeekDay 0 through 6 - * @property-read int $lastWeekDay 0 through 6 - * @property-read int $daysInYear 365 or 366 - * @property-read int $quarter the quarter of this instance, 1 - 4 - * @property-read int $decade the decade of this instance - * @property-read int $century the century of this instance - * @property-read int $millennium the millennium of this instance - * @property-read bool $dst daylight savings time indicator, true if DST, false otherwise - * @property-read bool $local checks if the timezone is local, true if local, false otherwise - * @property-read bool $utc checks if the timezone is UTC, true if UTC, false otherwise - * @property-read string $timezoneName the current timezone name - * @property-read string $tzName alias of $timezoneName - * @property-read string $locale locale of the current instance + * @property int $week 1 through 53 + * @property int $isoWeek 1 through 53 + * @property int $weekYear year according to week format + * @property int $isoWeekYear year according to ISO week format + * @property int $dayOfYear 1 through 366 + * @property int $age does a diffInYears() with default parameters + * @property int $offset the timezone offset in seconds from UTC + * @property int $offsetMinutes the timezone offset in minutes from UTC + * @property int $offsetHours the timezone offset in hours from UTC + * @property CarbonTimeZone $timezone the current timezone + * @property CarbonTimeZone $tz alias of $timezone + * @property-read int $dayOfWeek 0 (for Sunday) through 6 (for Saturday) + * @property-read int $dayOfWeekIso 1 (for Monday) through 7 (for Sunday) + * @property-read int $weekOfYear ISO-8601 week number of year, weeks starting on Monday + * @property-read int $daysInMonth number of days in the given month + * @property-read string $latinMeridiem "am"/"pm" (Ante meridiem or Post meridiem latin lowercase mark) + * @property-read string $latinUpperMeridiem "AM"/"PM" (Ante meridiem or Post meridiem latin uppercase mark) + * @property-read string $timezoneAbbreviatedName the current timezone abbreviated name + * @property-read string $tzAbbrName alias of $timezoneAbbreviatedName + * @property-read string $dayName long name of weekday translated according to Carbon locale, in english if no translation available for current language + * @property-read string $shortDayName short name of weekday translated according to Carbon locale, in english if no translation available for current language + * @property-read string $minDayName very short name of weekday translated according to Carbon locale, in english if no translation available for current language + * @property-read string $monthName long name of month translated according to Carbon locale, in english if no translation available for current language + * @property-read string $shortMonthName short name of month translated according to Carbon locale, in english if no translation available for current language + * @property-read string $meridiem lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language + * @property-read string $upperMeridiem uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language + * @property-read int $noZeroHour current hour from 1 to 24 + * @property-read int $weeksInYear 51 through 53 + * @property-read int $isoWeeksInYear 51 through 53 + * @property-read int $weekOfMonth 1 through 5 + * @property-read int $weekNumberInMonth 1 through 5 + * @property-read int $firstWeekDay 0 through 6 + * @property-read int $lastWeekDay 0 through 6 + * @property-read int $daysInYear 365 or 366 + * @property-read int $quarter the quarter of this instance, 1 - 4 + * @property-read int $decade the decade of this instance + * @property-read int $century the century of this instance + * @property-read int $millennium the millennium of this instance + * @property-read bool $dst daylight savings time indicator, true if DST, false otherwise + * @property-read bool $local checks if the timezone is local, true if local, false otherwise + * @property-read bool $utc checks if the timezone is UTC, true if UTC, false otherwise + * @property-read string $timezoneName the current timezone name + * @property-read string $tzName alias of $timezoneName + * @property-read string $locale locale of the current instance * - * @method bool isUtc() Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.) - * @method bool isLocal() Check if the current instance has non-UTC timezone. - * @method bool isValid() Check if the current instance is a valid date. - * @method bool isDST() Check if the current instance is in a daylight saving time. - * @method bool isSunday() Checks if the instance day is sunday. - * @method bool isMonday() Checks if the instance day is monday. - * @method bool isTuesday() Checks if the instance day is tuesday. - * @method bool isWednesday() Checks if the instance day is wednesday. - * @method bool isThursday() Checks if the instance day is thursday. - * @method bool isFriday() Checks if the instance day is friday. - * @method bool isSaturday() Checks if the instance day is saturday. - * @method bool isSameYear(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same year as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentYear() Checks if the instance is in the same year as the current moment. - * @method bool isNextYear() Checks if the instance is in the same year as the current moment next year. - * @method bool isLastYear() Checks if the instance is in the same year as the current moment last year. - * @method bool isSameWeek(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same week as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentWeek() Checks if the instance is in the same week as the current moment. - * @method bool isNextWeek() Checks if the instance is in the same week as the current moment next week. - * @method bool isLastWeek() Checks if the instance is in the same week as the current moment last week. - * @method bool isSameDay(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same day as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentDay() Checks if the instance is in the same day as the current moment. - * @method bool isNextDay() Checks if the instance is in the same day as the current moment next day. - * @method bool isLastDay() Checks if the instance is in the same day as the current moment last day. - * @method bool isSameHour(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same hour as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentHour() Checks if the instance is in the same hour as the current moment. - * @method bool isNextHour() Checks if the instance is in the same hour as the current moment next hour. - * @method bool isLastHour() Checks if the instance is in the same hour as the current moment last hour. - * @method bool isSameMinute(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same minute as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentMinute() Checks if the instance is in the same minute as the current moment. - * @method bool isNextMinute() Checks if the instance is in the same minute as the current moment next minute. - * @method bool isLastMinute() Checks if the instance is in the same minute as the current moment last minute. - * @method bool isSameSecond(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same second as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentSecond() Checks if the instance is in the same second as the current moment. - * @method bool isNextSecond() Checks if the instance is in the same second as the current moment next second. - * @method bool isLastSecond() Checks if the instance is in the same second as the current moment last second. - * @method bool isSameMicro(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentMicro() Checks if the instance is in the same microsecond as the current moment. - * @method bool isNextMicro() Checks if the instance is in the same microsecond as the current moment next microsecond. - * @method bool isLastMicro() Checks if the instance is in the same microsecond as the current moment last microsecond. - * @method bool isSameMicrosecond(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentMicrosecond() Checks if the instance is in the same microsecond as the current moment. - * @method bool isNextMicrosecond() Checks if the instance is in the same microsecond as the current moment next microsecond. - * @method bool isLastMicrosecond() Checks if the instance is in the same microsecond as the current moment last microsecond. - * @method bool isCurrentMonth() Checks if the instance is in the same month as the current moment. - * @method bool isNextMonth() Checks if the instance is in the same month as the current moment next month. - * @method bool isLastMonth() Checks if the instance is in the same month as the current moment last month. - * @method bool isCurrentQuarter() Checks if the instance is in the same quarter as the current moment. - * @method bool isNextQuarter() Checks if the instance is in the same quarter as the current moment next quarter. - * @method bool isLastQuarter() Checks if the instance is in the same quarter as the current moment last quarter. - * @method bool isSameDecade(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same decade as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentDecade() Checks if the instance is in the same decade as the current moment. - * @method bool isNextDecade() Checks if the instance is in the same decade as the current moment next decade. - * @method bool isLastDecade() Checks if the instance is in the same decade as the current moment last decade. - * @method bool isSameCentury(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same century as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentCentury() Checks if the instance is in the same century as the current moment. - * @method bool isNextCentury() Checks if the instance is in the same century as the current moment next century. - * @method bool isLastCentury() Checks if the instance is in the same century as the current moment last century. - * @method bool isSameMillennium(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same millennium as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentMillennium() Checks if the instance is in the same millennium as the current moment. - * @method bool isNextMillennium() Checks if the instance is in the same millennium as the current moment next millennium. - * @method bool isLastMillennium() Checks if the instance is in the same millennium as the current moment last millennium. - * @method $this years(int $value) Set current instance year to the given value. - * @method $this year(int $value) Set current instance year to the given value. - * @method $this setYears(int $value) Set current instance year to the given value. - * @method $this setYear(int $value) Set current instance year to the given value. - * @method $this months(int $value) Set current instance month to the given value. - * @method $this month(int $value) Set current instance month to the given value. - * @method $this setMonths(int $value) Set current instance month to the given value. - * @method $this setMonth(int $value) Set current instance month to the given value. - * @method $this days(int $value) Set current instance day to the given value. - * @method $this day(int $value) Set current instance day to the given value. - * @method $this setDays(int $value) Set current instance day to the given value. - * @method $this setDay(int $value) Set current instance day to the given value. - * @method $this hours(int $value) Set current instance hour to the given value. - * @method $this hour(int $value) Set current instance hour to the given value. - * @method $this setHours(int $value) Set current instance hour to the given value. - * @method $this setHour(int $value) Set current instance hour to the given value. - * @method $this minutes(int $value) Set current instance minute to the given value. - * @method $this minute(int $value) Set current instance minute to the given value. - * @method $this setMinutes(int $value) Set current instance minute to the given value. - * @method $this setMinute(int $value) Set current instance minute to the given value. - * @method $this seconds(int $value) Set current instance second to the given value. - * @method $this second(int $value) Set current instance second to the given value. - * @method $this setSeconds(int $value) Set current instance second to the given value. - * @method $this setSecond(int $value) Set current instance second to the given value. - * @method $this millis(int $value) Set current instance millisecond to the given value. - * @method $this milli(int $value) Set current instance millisecond to the given value. - * @method $this setMillis(int $value) Set current instance millisecond to the given value. - * @method $this setMilli(int $value) Set current instance millisecond to the given value. - * @method $this milliseconds(int $value) Set current instance millisecond to the given value. - * @method $this millisecond(int $value) Set current instance millisecond to the given value. - * @method $this setMilliseconds(int $value) Set current instance millisecond to the given value. - * @method $this setMillisecond(int $value) Set current instance millisecond to the given value. - * @method $this micros(int $value) Set current instance microsecond to the given value. - * @method $this micro(int $value) Set current instance microsecond to the given value. - * @method $this setMicros(int $value) Set current instance microsecond to the given value. - * @method $this setMicro(int $value) Set current instance microsecond to the given value. - * @method $this microseconds(int $value) Set current instance microsecond to the given value. - * @method $this microsecond(int $value) Set current instance microsecond to the given value. - * @method $this setMicroseconds(int $value) Set current instance microsecond to the given value. - * @method $this setMicrosecond(int $value) Set current instance microsecond to the given value. - * @method $this addYears(int $value = 1) Add years (the $value count passed in) to the instance (using date interval). - * @method $this addYear() Add one year to the instance (using date interval). - * @method $this subYears(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval). - * @method $this subYear() Sub one year to the instance (using date interval). - * @method $this addYearsWithOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this addYearWithOverflow() Add one year to the instance (using date interval) with overflow explicitly allowed. - * @method $this subYearsWithOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this subYearWithOverflow() Sub one year to the instance (using date interval) with overflow explicitly allowed. - * @method $this addYearsWithoutOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addYearWithoutOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subYearsWithoutOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subYearWithoutOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addYearsWithNoOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addYearWithNoOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subYearsWithNoOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subYearWithNoOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addYearsNoOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addYearNoOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subYearsNoOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subYearNoOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMonths(int $value = 1) Add months (the $value count passed in) to the instance (using date interval). - * @method $this addMonth() Add one month to the instance (using date interval). - * @method $this subMonths(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval). - * @method $this subMonth() Sub one month to the instance (using date interval). - * @method $this addMonthsWithOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this addMonthWithOverflow() Add one month to the instance (using date interval) with overflow explicitly allowed. - * @method $this subMonthsWithOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this subMonthWithOverflow() Sub one month to the instance (using date interval) with overflow explicitly allowed. - * @method $this addMonthsWithoutOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMonthWithoutOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMonthsWithoutOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMonthWithoutOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMonthsWithNoOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMonthWithNoOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMonthsWithNoOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMonthWithNoOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMonthsNoOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMonthNoOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMonthsNoOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMonthNoOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addDays(int $value = 1) Add days (the $value count passed in) to the instance (using date interval). - * @method $this addDay() Add one day to the instance (using date interval). - * @method $this subDays(int $value = 1) Sub days (the $value count passed in) to the instance (using date interval). - * @method $this subDay() Sub one day to the instance (using date interval). - * @method $this addHours(int $value = 1) Add hours (the $value count passed in) to the instance (using date interval). - * @method $this addHour() Add one hour to the instance (using date interval). - * @method $this subHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using date interval). - * @method $this subHour() Sub one hour to the instance (using date interval). - * @method $this addMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using date interval). - * @method $this addMinute() Add one minute to the instance (using date interval). - * @method $this subMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using date interval). - * @method $this subMinute() Sub one minute to the instance (using date interval). - * @method $this addSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using date interval). - * @method $this addSecond() Add one second to the instance (using date interval). - * @method $this subSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using date interval). - * @method $this subSecond() Sub one second to the instance (using date interval). - * @method $this addMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval). - * @method $this addMilli() Add one millisecond to the instance (using date interval). - * @method $this subMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval). - * @method $this subMilli() Sub one millisecond to the instance (using date interval). - * @method $this addMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval). - * @method $this addMillisecond() Add one millisecond to the instance (using date interval). - * @method $this subMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval). - * @method $this subMillisecond() Sub one millisecond to the instance (using date interval). - * @method $this addMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval). - * @method $this addMicro() Add one microsecond to the instance (using date interval). - * @method $this subMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval). - * @method $this subMicro() Sub one microsecond to the instance (using date interval). - * @method $this addMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval). - * @method $this addMicrosecond() Add one microsecond to the instance (using date interval). - * @method $this subMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval). - * @method $this subMicrosecond() Sub one microsecond to the instance (using date interval). - * @method $this addMillennia(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval). - * @method $this addMillennium() Add one millennium to the instance (using date interval). - * @method $this subMillennia(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval). - * @method $this subMillennium() Sub one millennium to the instance (using date interval). - * @method $this addMillenniaWithOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this addMillenniumWithOverflow() Add one millennium to the instance (using date interval) with overflow explicitly allowed. - * @method $this subMillenniaWithOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this subMillenniumWithOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly allowed. - * @method $this addMillenniaWithoutOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMillenniumWithoutOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMillenniaWithoutOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMillenniumWithoutOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMillenniaWithNoOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMillenniumWithNoOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMillenniaWithNoOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMillenniumWithNoOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMillenniaNoOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addMillenniumNoOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMillenniaNoOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subMillenniumNoOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addCenturies(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval). - * @method $this addCentury() Add one century to the instance (using date interval). - * @method $this subCenturies(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval). - * @method $this subCentury() Sub one century to the instance (using date interval). - * @method $this addCenturiesWithOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this addCenturyWithOverflow() Add one century to the instance (using date interval) with overflow explicitly allowed. - * @method $this subCenturiesWithOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this subCenturyWithOverflow() Sub one century to the instance (using date interval) with overflow explicitly allowed. - * @method $this addCenturiesWithoutOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addCenturyWithoutOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subCenturiesWithoutOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subCenturyWithoutOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addCenturiesWithNoOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addCenturyWithNoOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subCenturiesWithNoOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subCenturyWithNoOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addCenturiesNoOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addCenturyNoOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subCenturiesNoOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subCenturyNoOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addDecades(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval). - * @method $this addDecade() Add one decade to the instance (using date interval). - * @method $this subDecades(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval). - * @method $this subDecade() Sub one decade to the instance (using date interval). - * @method $this addDecadesWithOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this addDecadeWithOverflow() Add one decade to the instance (using date interval) with overflow explicitly allowed. - * @method $this subDecadesWithOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this subDecadeWithOverflow() Sub one decade to the instance (using date interval) with overflow explicitly allowed. - * @method $this addDecadesWithoutOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addDecadeWithoutOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subDecadesWithoutOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subDecadeWithoutOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addDecadesWithNoOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addDecadeWithNoOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subDecadesWithNoOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subDecadeWithNoOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addDecadesNoOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addDecadeNoOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subDecadesNoOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subDecadeNoOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addQuarters(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval). - * @method $this addQuarter() Add one quarter to the instance (using date interval). - * @method $this subQuarters(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval). - * @method $this subQuarter() Sub one quarter to the instance (using date interval). - * @method $this addQuartersWithOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this addQuarterWithOverflow() Add one quarter to the instance (using date interval) with overflow explicitly allowed. - * @method $this subQuartersWithOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method $this subQuarterWithOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly allowed. - * @method $this addQuartersWithoutOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addQuarterWithoutOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subQuartersWithoutOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subQuarterWithoutOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addQuartersWithNoOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addQuarterWithNoOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subQuartersWithNoOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subQuarterWithNoOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addQuartersNoOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addQuarterNoOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subQuartersNoOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method $this subQuarterNoOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method $this addWeeks(int $value = 1) Add weeks (the $value count passed in) to the instance (using date interval). - * @method $this addWeek() Add one week to the instance (using date interval). - * @method $this subWeeks(int $value = 1) Sub weeks (the $value count passed in) to the instance (using date interval). - * @method $this subWeek() Sub one week to the instance (using date interval). - * @method $this addWeekdays(int $value = 1) Add weekdays (the $value count passed in) to the instance (using date interval). - * @method $this addWeekday() Add one weekday to the instance (using date interval). - * @method $this subWeekdays(int $value = 1) Sub weekdays (the $value count passed in) to the instance (using date interval). - * @method $this subWeekday() Sub one weekday to the instance (using date interval). - * @method $this addRealMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using timestamp). - * @method $this addRealMicro() Add one microsecond to the instance (using timestamp). - * @method $this subRealMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using timestamp). - * @method $this subRealMicro() Sub one microsecond to the instance (using timestamp). - * @method CarbonPeriod microsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given. - * @method $this addRealMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using timestamp). - * @method $this addRealMicrosecond() Add one microsecond to the instance (using timestamp). - * @method $this subRealMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using timestamp). - * @method $this subRealMicrosecond() Sub one microsecond to the instance (using timestamp). - * @method CarbonPeriod microsecondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given. - * @method $this addRealMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using timestamp). - * @method $this addRealMilli() Add one millisecond to the instance (using timestamp). - * @method $this subRealMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using timestamp). - * @method $this subRealMilli() Sub one millisecond to the instance (using timestamp). - * @method CarbonPeriod millisUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given. - * @method $this addRealMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using timestamp). - * @method $this addRealMillisecond() Add one millisecond to the instance (using timestamp). - * @method $this subRealMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using timestamp). - * @method $this subRealMillisecond() Sub one millisecond to the instance (using timestamp). - * @method CarbonPeriod millisecondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given. - * @method $this addRealSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using timestamp). - * @method $this addRealSecond() Add one second to the instance (using timestamp). - * @method $this subRealSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using timestamp). - * @method $this subRealSecond() Sub one second to the instance (using timestamp). - * @method CarbonPeriod secondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each second or every X seconds if a factor is given. - * @method $this addRealMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using timestamp). - * @method $this addRealMinute() Add one minute to the instance (using timestamp). - * @method $this subRealMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using timestamp). - * @method $this subRealMinute() Sub one minute to the instance (using timestamp). - * @method CarbonPeriod minutesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each minute or every X minutes if a factor is given. - * @method $this addRealHours(int $value = 1) Add hours (the $value count passed in) to the instance (using timestamp). - * @method $this addRealHour() Add one hour to the instance (using timestamp). - * @method $this subRealHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using timestamp). - * @method $this subRealHour() Sub one hour to the instance (using timestamp). - * @method CarbonPeriod hoursUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each hour or every X hours if a factor is given. - * @method $this addRealDays(int $value = 1) Add days (the $value count passed in) to the instance (using timestamp). - * @method $this addRealDay() Add one day to the instance (using timestamp). - * @method $this subRealDays(int $value = 1) Sub days (the $value count passed in) to the instance (using timestamp). - * @method $this subRealDay() Sub one day to the instance (using timestamp). - * @method CarbonPeriod daysUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each day or every X days if a factor is given. - * @method $this addRealWeeks(int $value = 1) Add weeks (the $value count passed in) to the instance (using timestamp). - * @method $this addRealWeek() Add one week to the instance (using timestamp). - * @method $this subRealWeeks(int $value = 1) Sub weeks (the $value count passed in) to the instance (using timestamp). - * @method $this subRealWeek() Sub one week to the instance (using timestamp). - * @method CarbonPeriod weeksUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each week or every X weeks if a factor is given. - * @method $this addRealMonths(int $value = 1) Add months (the $value count passed in) to the instance (using timestamp). - * @method $this addRealMonth() Add one month to the instance (using timestamp). - * @method $this subRealMonths(int $value = 1) Sub months (the $value count passed in) to the instance (using timestamp). - * @method $this subRealMonth() Sub one month to the instance (using timestamp). - * @method CarbonPeriod monthsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each month or every X months if a factor is given. - * @method $this addRealQuarters(int $value = 1) Add quarters (the $value count passed in) to the instance (using timestamp). - * @method $this addRealQuarter() Add one quarter to the instance (using timestamp). - * @method $this subRealQuarters(int $value = 1) Sub quarters (the $value count passed in) to the instance (using timestamp). - * @method $this subRealQuarter() Sub one quarter to the instance (using timestamp). - * @method CarbonPeriod quartersUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each quarter or every X quarters if a factor is given. - * @method $this addRealYears(int $value = 1) Add years (the $value count passed in) to the instance (using timestamp). - * @method $this addRealYear() Add one year to the instance (using timestamp). - * @method $this subRealYears(int $value = 1) Sub years (the $value count passed in) to the instance (using timestamp). - * @method $this subRealYear() Sub one year to the instance (using timestamp). - * @method CarbonPeriod yearsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each year or every X years if a factor is given. - * @method $this addRealDecades(int $value = 1) Add decades (the $value count passed in) to the instance (using timestamp). - * @method $this addRealDecade() Add one decade to the instance (using timestamp). - * @method $this subRealDecades(int $value = 1) Sub decades (the $value count passed in) to the instance (using timestamp). - * @method $this subRealDecade() Sub one decade to the instance (using timestamp). - * @method CarbonPeriod decadesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each decade or every X decades if a factor is given. - * @method $this addRealCenturies(int $value = 1) Add centuries (the $value count passed in) to the instance (using timestamp). - * @method $this addRealCentury() Add one century to the instance (using timestamp). - * @method $this subRealCenturies(int $value = 1) Sub centuries (the $value count passed in) to the instance (using timestamp). - * @method $this subRealCentury() Sub one century to the instance (using timestamp). - * @method CarbonPeriod centuriesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each century or every X centuries if a factor is given. - * @method $this addRealMillennia(int $value = 1) Add millennia (the $value count passed in) to the instance (using timestamp). - * @method $this addRealMillennium() Add one millennium to the instance (using timestamp). - * @method $this subRealMillennia(int $value = 1) Sub millennia (the $value count passed in) to the instance (using timestamp). - * @method $this subRealMillennium() Sub one millennium to the instance (using timestamp). - * @method CarbonPeriod millenniaUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millennium or every X millennia if a factor is given. - * @method $this roundYear(float $precision = 1, string $function = "round") Round the current instance year with given precision using the given function. - * @method $this roundYears(float $precision = 1, string $function = "round") Round the current instance year with given precision using the given function. - * @method $this floorYear(float $precision = 1) Truncate the current instance year with given precision. - * @method $this floorYears(float $precision = 1) Truncate the current instance year with given precision. - * @method $this ceilYear(float $precision = 1) Ceil the current instance year with given precision. - * @method $this ceilYears(float $precision = 1) Ceil the current instance year with given precision. - * @method $this roundMonth(float $precision = 1, string $function = "round") Round the current instance month with given precision using the given function. - * @method $this roundMonths(float $precision = 1, string $function = "round") Round the current instance month with given precision using the given function. - * @method $this floorMonth(float $precision = 1) Truncate the current instance month with given precision. - * @method $this floorMonths(float $precision = 1) Truncate the current instance month with given precision. - * @method $this ceilMonth(float $precision = 1) Ceil the current instance month with given precision. - * @method $this ceilMonths(float $precision = 1) Ceil the current instance month with given precision. - * @method $this roundDay(float $precision = 1, string $function = "round") Round the current instance day with given precision using the given function. - * @method $this roundDays(float $precision = 1, string $function = "round") Round the current instance day with given precision using the given function. - * @method $this floorDay(float $precision = 1) Truncate the current instance day with given precision. - * @method $this floorDays(float $precision = 1) Truncate the current instance day with given precision. - * @method $this ceilDay(float $precision = 1) Ceil the current instance day with given precision. - * @method $this ceilDays(float $precision = 1) Ceil the current instance day with given precision. - * @method $this roundHour(float $precision = 1, string $function = "round") Round the current instance hour with given precision using the given function. - * @method $this roundHours(float $precision = 1, string $function = "round") Round the current instance hour with given precision using the given function. - * @method $this floorHour(float $precision = 1) Truncate the current instance hour with given precision. - * @method $this floorHours(float $precision = 1) Truncate the current instance hour with given precision. - * @method $this ceilHour(float $precision = 1) Ceil the current instance hour with given precision. - * @method $this ceilHours(float $precision = 1) Ceil the current instance hour with given precision. - * @method $this roundMinute(float $precision = 1, string $function = "round") Round the current instance minute with given precision using the given function. - * @method $this roundMinutes(float $precision = 1, string $function = "round") Round the current instance minute with given precision using the given function. - * @method $this floorMinute(float $precision = 1) Truncate the current instance minute with given precision. - * @method $this floorMinutes(float $precision = 1) Truncate the current instance minute with given precision. - * @method $this ceilMinute(float $precision = 1) Ceil the current instance minute with given precision. - * @method $this ceilMinutes(float $precision = 1) Ceil the current instance minute with given precision. - * @method $this roundSecond(float $precision = 1, string $function = "round") Round the current instance second with given precision using the given function. - * @method $this roundSeconds(float $precision = 1, string $function = "round") Round the current instance second with given precision using the given function. - * @method $this floorSecond(float $precision = 1) Truncate the current instance second with given precision. - * @method $this floorSeconds(float $precision = 1) Truncate the current instance second with given precision. - * @method $this ceilSecond(float $precision = 1) Ceil the current instance second with given precision. - * @method $this ceilSeconds(float $precision = 1) Ceil the current instance second with given precision. - * @method $this roundMillennium(float $precision = 1, string $function = "round") Round the current instance millennium with given precision using the given function. - * @method $this roundMillennia(float $precision = 1, string $function = "round") Round the current instance millennium with given precision using the given function. - * @method $this floorMillennium(float $precision = 1) Truncate the current instance millennium with given precision. - * @method $this floorMillennia(float $precision = 1) Truncate the current instance millennium with given precision. - * @method $this ceilMillennium(float $precision = 1) Ceil the current instance millennium with given precision. - * @method $this ceilMillennia(float $precision = 1) Ceil the current instance millennium with given precision. - * @method $this roundCentury(float $precision = 1, string $function = "round") Round the current instance century with given precision using the given function. - * @method $this roundCenturies(float $precision = 1, string $function = "round") Round the current instance century with given precision using the given function. - * @method $this floorCentury(float $precision = 1) Truncate the current instance century with given precision. - * @method $this floorCenturies(float $precision = 1) Truncate the current instance century with given precision. - * @method $this ceilCentury(float $precision = 1) Ceil the current instance century with given precision. - * @method $this ceilCenturies(float $precision = 1) Ceil the current instance century with given precision. - * @method $this roundDecade(float $precision = 1, string $function = "round") Round the current instance decade with given precision using the given function. - * @method $this roundDecades(float $precision = 1, string $function = "round") Round the current instance decade with given precision using the given function. - * @method $this floorDecade(float $precision = 1) Truncate the current instance decade with given precision. - * @method $this floorDecades(float $precision = 1) Truncate the current instance decade with given precision. - * @method $this ceilDecade(float $precision = 1) Ceil the current instance decade with given precision. - * @method $this ceilDecades(float $precision = 1) Ceil the current instance decade with given precision. - * @method $this roundQuarter(float $precision = 1, string $function = "round") Round the current instance quarter with given precision using the given function. - * @method $this roundQuarters(float $precision = 1, string $function = "round") Round the current instance quarter with given precision using the given function. - * @method $this floorQuarter(float $precision = 1) Truncate the current instance quarter with given precision. - * @method $this floorQuarters(float $precision = 1) Truncate the current instance quarter with given precision. - * @method $this ceilQuarter(float $precision = 1) Ceil the current instance quarter with given precision. - * @method $this ceilQuarters(float $precision = 1) Ceil the current instance quarter with given precision. - * @method $this roundMillisecond(float $precision = 1, string $function = "round") Round the current instance millisecond with given precision using the given function. - * @method $this roundMilliseconds(float $precision = 1, string $function = "round") Round the current instance millisecond with given precision using the given function. - * @method $this floorMillisecond(float $precision = 1) Truncate the current instance millisecond with given precision. - * @method $this floorMilliseconds(float $precision = 1) Truncate the current instance millisecond with given precision. - * @method $this ceilMillisecond(float $precision = 1) Ceil the current instance millisecond with given precision. - * @method $this ceilMilliseconds(float $precision = 1) Ceil the current instance millisecond with given precision. - * @method $this roundMicrosecond(float $precision = 1, string $function = "round") Round the current instance microsecond with given precision using the given function. - * @method $this roundMicroseconds(float $precision = 1, string $function = "round") Round the current instance microsecond with given precision using the given function. - * @method $this floorMicrosecond(float $precision = 1) Truncate the current instance microsecond with given precision. - * @method $this floorMicroseconds(float $precision = 1) Truncate the current instance microsecond with given precision. - * @method $this ceilMicrosecond(float $precision = 1) Ceil the current instance microsecond with given precision. - * @method $this ceilMicroseconds(float $precision = 1) Ceil the current instance microsecond with given precision. - * @method string shortAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string longAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string shortRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string longRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string shortRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string longRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string shortRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string longRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method static static|false createFromFormat(string $format, string $time, string|DateTimeZone $timezone = null) Parse a string into a new Carbon object according to the specified format. - * @method static static __set_state(array $array) https://php.net/manual/en/datetime.set-state.php + * @method bool isUtc() Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.) + * @method bool isLocal() Check if the current instance has non-UTC timezone. + * @method bool isValid() Check if the current instance is a valid date. + * @method bool isDST() Check if the current instance is in a daylight saving time. + * @method bool isSunday() Checks if the instance day is sunday. + * @method bool isMonday() Checks if the instance day is monday. + * @method bool isTuesday() Checks if the instance day is tuesday. + * @method bool isWednesday() Checks if the instance day is wednesday. + * @method bool isThursday() Checks if the instance day is thursday. + * @method bool isFriday() Checks if the instance day is friday. + * @method bool isSaturday() Checks if the instance day is saturday. + * @method bool isSameYear(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same year as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentYear() Checks if the instance is in the same year as the current moment. + * @method bool isNextYear() Checks if the instance is in the same year as the current moment next year. + * @method bool isLastYear() Checks if the instance is in the same year as the current moment last year. + * @method bool isSameWeek(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same week as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentWeek() Checks if the instance is in the same week as the current moment. + * @method bool isNextWeek() Checks if the instance is in the same week as the current moment next week. + * @method bool isLastWeek() Checks if the instance is in the same week as the current moment last week. + * @method bool isSameDay(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same day as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentDay() Checks if the instance is in the same day as the current moment. + * @method bool isNextDay() Checks if the instance is in the same day as the current moment next day. + * @method bool isLastDay() Checks if the instance is in the same day as the current moment last day. + * @method bool isSameHour(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same hour as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentHour() Checks if the instance is in the same hour as the current moment. + * @method bool isNextHour() Checks if the instance is in the same hour as the current moment next hour. + * @method bool isLastHour() Checks if the instance is in the same hour as the current moment last hour. + * @method bool isSameMinute(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same minute as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentMinute() Checks if the instance is in the same minute as the current moment. + * @method bool isNextMinute() Checks if the instance is in the same minute as the current moment next minute. + * @method bool isLastMinute() Checks if the instance is in the same minute as the current moment last minute. + * @method bool isSameSecond(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same second as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentSecond() Checks if the instance is in the same second as the current moment. + * @method bool isNextSecond() Checks if the instance is in the same second as the current moment next second. + * @method bool isLastSecond() Checks if the instance is in the same second as the current moment last second. + * @method bool isSameMicro(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentMicro() Checks if the instance is in the same microsecond as the current moment. + * @method bool isNextMicro() Checks if the instance is in the same microsecond as the current moment next microsecond. + * @method bool isLastMicro() Checks if the instance is in the same microsecond as the current moment last microsecond. + * @method bool isSameMicrosecond(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentMicrosecond() Checks if the instance is in the same microsecond as the current moment. + * @method bool isNextMicrosecond() Checks if the instance is in the same microsecond as the current moment next microsecond. + * @method bool isLastMicrosecond() Checks if the instance is in the same microsecond as the current moment last microsecond. + * @method bool isCurrentMonth() Checks if the instance is in the same month as the current moment. + * @method bool isNextMonth() Checks if the instance is in the same month as the current moment next month. + * @method bool isLastMonth() Checks if the instance is in the same month as the current moment last month. + * @method bool isCurrentQuarter() Checks if the instance is in the same quarter as the current moment. + * @method bool isNextQuarter() Checks if the instance is in the same quarter as the current moment next quarter. + * @method bool isLastQuarter() Checks if the instance is in the same quarter as the current moment last quarter. + * @method bool isSameDecade(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same decade as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentDecade() Checks if the instance is in the same decade as the current moment. + * @method bool isNextDecade() Checks if the instance is in the same decade as the current moment next decade. + * @method bool isLastDecade() Checks if the instance is in the same decade as the current moment last decade. + * @method bool isSameCentury(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same century as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentCentury() Checks if the instance is in the same century as the current moment. + * @method bool isNextCentury() Checks if the instance is in the same century as the current moment next century. + * @method bool isLastCentury() Checks if the instance is in the same century as the current moment last century. + * @method bool isSameMillennium(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same millennium as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentMillennium() Checks if the instance is in the same millennium as the current moment. + * @method bool isNextMillennium() Checks if the instance is in the same millennium as the current moment next millennium. + * @method bool isLastMillennium() Checks if the instance is in the same millennium as the current moment last millennium. + * @method $this years(int $value) Set current instance year to the given value. + * @method $this year(int $value) Set current instance year to the given value. + * @method $this setYears(int $value) Set current instance year to the given value. + * @method $this setYear(int $value) Set current instance year to the given value. + * @method $this months(int $value) Set current instance month to the given value. + * @method $this month(int $value) Set current instance month to the given value. + * @method $this setMonths(int $value) Set current instance month to the given value. + * @method $this setMonth(int $value) Set current instance month to the given value. + * @method $this days(int $value) Set current instance day to the given value. + * @method $this day(int $value) Set current instance day to the given value. + * @method $this setDays(int $value) Set current instance day to the given value. + * @method $this setDay(int $value) Set current instance day to the given value. + * @method $this hours(int $value) Set current instance hour to the given value. + * @method $this hour(int $value) Set current instance hour to the given value. + * @method $this setHours(int $value) Set current instance hour to the given value. + * @method $this setHour(int $value) Set current instance hour to the given value. + * @method $this minutes(int $value) Set current instance minute to the given value. + * @method $this minute(int $value) Set current instance minute to the given value. + * @method $this setMinutes(int $value) Set current instance minute to the given value. + * @method $this setMinute(int $value) Set current instance minute to the given value. + * @method $this seconds(int $value) Set current instance second to the given value. + * @method $this second(int $value) Set current instance second to the given value. + * @method $this setSeconds(int $value) Set current instance second to the given value. + * @method $this setSecond(int $value) Set current instance second to the given value. + * @method $this millis(int $value) Set current instance millisecond to the given value. + * @method $this milli(int $value) Set current instance millisecond to the given value. + * @method $this setMillis(int $value) Set current instance millisecond to the given value. + * @method $this setMilli(int $value) Set current instance millisecond to the given value. + * @method $this milliseconds(int $value) Set current instance millisecond to the given value. + * @method $this millisecond(int $value) Set current instance millisecond to the given value. + * @method $this setMilliseconds(int $value) Set current instance millisecond to the given value. + * @method $this setMillisecond(int $value) Set current instance millisecond to the given value. + * @method $this micros(int $value) Set current instance microsecond to the given value. + * @method $this micro(int $value) Set current instance microsecond to the given value. + * @method $this setMicros(int $value) Set current instance microsecond to the given value. + * @method $this setMicro(int $value) Set current instance microsecond to the given value. + * @method $this microseconds(int $value) Set current instance microsecond to the given value. + * @method $this microsecond(int $value) Set current instance microsecond to the given value. + * @method $this setMicroseconds(int $value) Set current instance microsecond to the given value. + * @method $this setMicrosecond(int $value) Set current instance microsecond to the given value. + * @method $this addYears(int $value = 1) Add years (the $value count passed in) to the instance (using date interval). + * @method $this addYear() Add one year to the instance (using date interval). + * @method $this subYears(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval). + * @method $this subYear() Sub one year to the instance (using date interval). + * @method $this addYearsWithOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this addYearWithOverflow() Add one year to the instance (using date interval) with overflow explicitly allowed. + * @method $this subYearsWithOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this subYearWithOverflow() Sub one year to the instance (using date interval) with overflow explicitly allowed. + * @method $this addYearsWithoutOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addYearWithoutOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subYearsWithoutOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subYearWithoutOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addYearsWithNoOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addYearWithNoOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subYearsWithNoOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subYearWithNoOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addYearsNoOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addYearNoOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subYearsNoOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subYearNoOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMonths(int $value = 1) Add months (the $value count passed in) to the instance (using date interval). + * @method $this addMonth() Add one month to the instance (using date interval). + * @method $this subMonths(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval). + * @method $this subMonth() Sub one month to the instance (using date interval). + * @method $this addMonthsWithOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this addMonthWithOverflow() Add one month to the instance (using date interval) with overflow explicitly allowed. + * @method $this subMonthsWithOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this subMonthWithOverflow() Sub one month to the instance (using date interval) with overflow explicitly allowed. + * @method $this addMonthsWithoutOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMonthWithoutOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMonthsWithoutOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMonthWithoutOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMonthsWithNoOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMonthWithNoOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMonthsWithNoOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMonthWithNoOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMonthsNoOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMonthNoOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMonthsNoOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMonthNoOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addDays(int $value = 1) Add days (the $value count passed in) to the instance (using date interval). + * @method $this addDay() Add one day to the instance (using date interval). + * @method $this subDays(int $value = 1) Sub days (the $value count passed in) to the instance (using date interval). + * @method $this subDay() Sub one day to the instance (using date interval). + * @method $this addHours(int $value = 1) Add hours (the $value count passed in) to the instance (using date interval). + * @method $this addHour() Add one hour to the instance (using date interval). + * @method $this subHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using date interval). + * @method $this subHour() Sub one hour to the instance (using date interval). + * @method $this addMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using date interval). + * @method $this addMinute() Add one minute to the instance (using date interval). + * @method $this subMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using date interval). + * @method $this subMinute() Sub one minute to the instance (using date interval). + * @method $this addSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using date interval). + * @method $this addSecond() Add one second to the instance (using date interval). + * @method $this subSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using date interval). + * @method $this subSecond() Sub one second to the instance (using date interval). + * @method $this addMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval). + * @method $this addMilli() Add one millisecond to the instance (using date interval). + * @method $this subMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval). + * @method $this subMilli() Sub one millisecond to the instance (using date interval). + * @method $this addMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval). + * @method $this addMillisecond() Add one millisecond to the instance (using date interval). + * @method $this subMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval). + * @method $this subMillisecond() Sub one millisecond to the instance (using date interval). + * @method $this addMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval). + * @method $this addMicro() Add one microsecond to the instance (using date interval). + * @method $this subMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval). + * @method $this subMicro() Sub one microsecond to the instance (using date interval). + * @method $this addMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval). + * @method $this addMicrosecond() Add one microsecond to the instance (using date interval). + * @method $this subMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval). + * @method $this subMicrosecond() Sub one microsecond to the instance (using date interval). + * @method $this addMillennia(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval). + * @method $this addMillennium() Add one millennium to the instance (using date interval). + * @method $this subMillennia(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval). + * @method $this subMillennium() Sub one millennium to the instance (using date interval). + * @method $this addMillenniaWithOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this addMillenniumWithOverflow() Add one millennium to the instance (using date interval) with overflow explicitly allowed. + * @method $this subMillenniaWithOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this subMillenniumWithOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly allowed. + * @method $this addMillenniaWithoutOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMillenniumWithoutOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMillenniaWithoutOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMillenniumWithoutOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMillenniaWithNoOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMillenniumWithNoOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMillenniaWithNoOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMillenniumWithNoOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMillenniaNoOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addMillenniumNoOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMillenniaNoOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subMillenniumNoOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addCenturies(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval). + * @method $this addCentury() Add one century to the instance (using date interval). + * @method $this subCenturies(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval). + * @method $this subCentury() Sub one century to the instance (using date interval). + * @method $this addCenturiesWithOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this addCenturyWithOverflow() Add one century to the instance (using date interval) with overflow explicitly allowed. + * @method $this subCenturiesWithOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this subCenturyWithOverflow() Sub one century to the instance (using date interval) with overflow explicitly allowed. + * @method $this addCenturiesWithoutOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addCenturyWithoutOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subCenturiesWithoutOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subCenturyWithoutOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addCenturiesWithNoOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addCenturyWithNoOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subCenturiesWithNoOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subCenturyWithNoOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addCenturiesNoOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addCenturyNoOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subCenturiesNoOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subCenturyNoOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addDecades(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval). + * @method $this addDecade() Add one decade to the instance (using date interval). + * @method $this subDecades(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval). + * @method $this subDecade() Sub one decade to the instance (using date interval). + * @method $this addDecadesWithOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this addDecadeWithOverflow() Add one decade to the instance (using date interval) with overflow explicitly allowed. + * @method $this subDecadesWithOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this subDecadeWithOverflow() Sub one decade to the instance (using date interval) with overflow explicitly allowed. + * @method $this addDecadesWithoutOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addDecadeWithoutOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subDecadesWithoutOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subDecadeWithoutOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addDecadesWithNoOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addDecadeWithNoOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subDecadesWithNoOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subDecadeWithNoOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addDecadesNoOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addDecadeNoOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subDecadesNoOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subDecadeNoOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addQuarters(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval). + * @method $this addQuarter() Add one quarter to the instance (using date interval). + * @method $this subQuarters(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval). + * @method $this subQuarter() Sub one quarter to the instance (using date interval). + * @method $this addQuartersWithOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this addQuarterWithOverflow() Add one quarter to the instance (using date interval) with overflow explicitly allowed. + * @method $this subQuartersWithOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method $this subQuarterWithOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly allowed. + * @method $this addQuartersWithoutOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addQuarterWithoutOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subQuartersWithoutOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subQuarterWithoutOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addQuartersWithNoOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addQuarterWithNoOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subQuartersWithNoOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subQuarterWithNoOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addQuartersNoOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addQuarterNoOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subQuartersNoOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method $this subQuarterNoOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method $this addWeeks(int $value = 1) Add weeks (the $value count passed in) to the instance (using date interval). + * @method $this addWeek() Add one week to the instance (using date interval). + * @method $this subWeeks(int $value = 1) Sub weeks (the $value count passed in) to the instance (using date interval). + * @method $this subWeek() Sub one week to the instance (using date interval). + * @method $this addWeekdays(int $value = 1) Add weekdays (the $value count passed in) to the instance (using date interval). + * @method $this addWeekday() Add one weekday to the instance (using date interval). + * @method $this subWeekdays(int $value = 1) Sub weekdays (the $value count passed in) to the instance (using date interval). + * @method $this subWeekday() Sub one weekday to the instance (using date interval). + * @method $this addRealMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using timestamp). + * @method $this addRealMicro() Add one microsecond to the instance (using timestamp). + * @method $this subRealMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using timestamp). + * @method $this subRealMicro() Sub one microsecond to the instance (using timestamp). + * @method CarbonPeriod microsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given. + * @method $this addRealMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using timestamp). + * @method $this addRealMicrosecond() Add one microsecond to the instance (using timestamp). + * @method $this subRealMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using timestamp). + * @method $this subRealMicrosecond() Sub one microsecond to the instance (using timestamp). + * @method CarbonPeriod microsecondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given. + * @method $this addRealMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using timestamp). + * @method $this addRealMilli() Add one millisecond to the instance (using timestamp). + * @method $this subRealMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using timestamp). + * @method $this subRealMilli() Sub one millisecond to the instance (using timestamp). + * @method CarbonPeriod millisUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given. + * @method $this addRealMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using timestamp). + * @method $this addRealMillisecond() Add one millisecond to the instance (using timestamp). + * @method $this subRealMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using timestamp). + * @method $this subRealMillisecond() Sub one millisecond to the instance (using timestamp). + * @method CarbonPeriod millisecondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given. + * @method $this addRealSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using timestamp). + * @method $this addRealSecond() Add one second to the instance (using timestamp). + * @method $this subRealSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using timestamp). + * @method $this subRealSecond() Sub one second to the instance (using timestamp). + * @method CarbonPeriod secondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each second or every X seconds if a factor is given. + * @method $this addRealMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using timestamp). + * @method $this addRealMinute() Add one minute to the instance (using timestamp). + * @method $this subRealMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using timestamp). + * @method $this subRealMinute() Sub one minute to the instance (using timestamp). + * @method CarbonPeriod minutesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each minute or every X minutes if a factor is given. + * @method $this addRealHours(int $value = 1) Add hours (the $value count passed in) to the instance (using timestamp). + * @method $this addRealHour() Add one hour to the instance (using timestamp). + * @method $this subRealHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using timestamp). + * @method $this subRealHour() Sub one hour to the instance (using timestamp). + * @method CarbonPeriod hoursUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each hour or every X hours if a factor is given. + * @method $this addRealDays(int $value = 1) Add days (the $value count passed in) to the instance (using timestamp). + * @method $this addRealDay() Add one day to the instance (using timestamp). + * @method $this subRealDays(int $value = 1) Sub days (the $value count passed in) to the instance (using timestamp). + * @method $this subRealDay() Sub one day to the instance (using timestamp). + * @method CarbonPeriod daysUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each day or every X days if a factor is given. + * @method $this addRealWeeks(int $value = 1) Add weeks (the $value count passed in) to the instance (using timestamp). + * @method $this addRealWeek() Add one week to the instance (using timestamp). + * @method $this subRealWeeks(int $value = 1) Sub weeks (the $value count passed in) to the instance (using timestamp). + * @method $this subRealWeek() Sub one week to the instance (using timestamp). + * @method CarbonPeriod weeksUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each week or every X weeks if a factor is given. + * @method $this addRealMonths(int $value = 1) Add months (the $value count passed in) to the instance (using timestamp). + * @method $this addRealMonth() Add one month to the instance (using timestamp). + * @method $this subRealMonths(int $value = 1) Sub months (the $value count passed in) to the instance (using timestamp). + * @method $this subRealMonth() Sub one month to the instance (using timestamp). + * @method CarbonPeriod monthsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each month or every X months if a factor is given. + * @method $this addRealQuarters(int $value = 1) Add quarters (the $value count passed in) to the instance (using timestamp). + * @method $this addRealQuarter() Add one quarter to the instance (using timestamp). + * @method $this subRealQuarters(int $value = 1) Sub quarters (the $value count passed in) to the instance (using timestamp). + * @method $this subRealQuarter() Sub one quarter to the instance (using timestamp). + * @method CarbonPeriod quartersUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each quarter or every X quarters if a factor is given. + * @method $this addRealYears(int $value = 1) Add years (the $value count passed in) to the instance (using timestamp). + * @method $this addRealYear() Add one year to the instance (using timestamp). + * @method $this subRealYears(int $value = 1) Sub years (the $value count passed in) to the instance (using timestamp). + * @method $this subRealYear() Sub one year to the instance (using timestamp). + * @method CarbonPeriod yearsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each year or every X years if a factor is given. + * @method $this addRealDecades(int $value = 1) Add decades (the $value count passed in) to the instance (using timestamp). + * @method $this addRealDecade() Add one decade to the instance (using timestamp). + * @method $this subRealDecades(int $value = 1) Sub decades (the $value count passed in) to the instance (using timestamp). + * @method $this subRealDecade() Sub one decade to the instance (using timestamp). + * @method CarbonPeriod decadesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each decade or every X decades if a factor is given. + * @method $this addRealCenturies(int $value = 1) Add centuries (the $value count passed in) to the instance (using timestamp). + * @method $this addRealCentury() Add one century to the instance (using timestamp). + * @method $this subRealCenturies(int $value = 1) Sub centuries (the $value count passed in) to the instance (using timestamp). + * @method $this subRealCentury() Sub one century to the instance (using timestamp). + * @method CarbonPeriod centuriesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each century or every X centuries if a factor is given. + * @method $this addRealMillennia(int $value = 1) Add millennia (the $value count passed in) to the instance (using timestamp). + * @method $this addRealMillennium() Add one millennium to the instance (using timestamp). + * @method $this subRealMillennia(int $value = 1) Sub millennia (the $value count passed in) to the instance (using timestamp). + * @method $this subRealMillennium() Sub one millennium to the instance (using timestamp). + * @method CarbonPeriod millenniaUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millennium or every X millennia if a factor is given. + * @method $this roundYear(float $precision = 1, string $function = "round") Round the current instance year with given precision using the given function. + * @method $this roundYears(float $precision = 1, string $function = "round") Round the current instance year with given precision using the given function. + * @method $this floorYear(float $precision = 1) Truncate the current instance year with given precision. + * @method $this floorYears(float $precision = 1) Truncate the current instance year with given precision. + * @method $this ceilYear(float $precision = 1) Ceil the current instance year with given precision. + * @method $this ceilYears(float $precision = 1) Ceil the current instance year with given precision. + * @method $this roundMonth(float $precision = 1, string $function = "round") Round the current instance month with given precision using the given function. + * @method $this roundMonths(float $precision = 1, string $function = "round") Round the current instance month with given precision using the given function. + * @method $this floorMonth(float $precision = 1) Truncate the current instance month with given precision. + * @method $this floorMonths(float $precision = 1) Truncate the current instance month with given precision. + * @method $this ceilMonth(float $precision = 1) Ceil the current instance month with given precision. + * @method $this ceilMonths(float $precision = 1) Ceil the current instance month with given precision. + * @method $this roundDay(float $precision = 1, string $function = "round") Round the current instance day with given precision using the given function. + * @method $this roundDays(float $precision = 1, string $function = "round") Round the current instance day with given precision using the given function. + * @method $this floorDay(float $precision = 1) Truncate the current instance day with given precision. + * @method $this floorDays(float $precision = 1) Truncate the current instance day with given precision. + * @method $this ceilDay(float $precision = 1) Ceil the current instance day with given precision. + * @method $this ceilDays(float $precision = 1) Ceil the current instance day with given precision. + * @method $this roundHour(float $precision = 1, string $function = "round") Round the current instance hour with given precision using the given function. + * @method $this roundHours(float $precision = 1, string $function = "round") Round the current instance hour with given precision using the given function. + * @method $this floorHour(float $precision = 1) Truncate the current instance hour with given precision. + * @method $this floorHours(float $precision = 1) Truncate the current instance hour with given precision. + * @method $this ceilHour(float $precision = 1) Ceil the current instance hour with given precision. + * @method $this ceilHours(float $precision = 1) Ceil the current instance hour with given precision. + * @method $this roundMinute(float $precision = 1, string $function = "round") Round the current instance minute with given precision using the given function. + * @method $this roundMinutes(float $precision = 1, string $function = "round") Round the current instance minute with given precision using the given function. + * @method $this floorMinute(float $precision = 1) Truncate the current instance minute with given precision. + * @method $this floorMinutes(float $precision = 1) Truncate the current instance minute with given precision. + * @method $this ceilMinute(float $precision = 1) Ceil the current instance minute with given precision. + * @method $this ceilMinutes(float $precision = 1) Ceil the current instance minute with given precision. + * @method $this roundSecond(float $precision = 1, string $function = "round") Round the current instance second with given precision using the given function. + * @method $this roundSeconds(float $precision = 1, string $function = "round") Round the current instance second with given precision using the given function. + * @method $this floorSecond(float $precision = 1) Truncate the current instance second with given precision. + * @method $this floorSeconds(float $precision = 1) Truncate the current instance second with given precision. + * @method $this ceilSecond(float $precision = 1) Ceil the current instance second with given precision. + * @method $this ceilSeconds(float $precision = 1) Ceil the current instance second with given precision. + * @method $this roundMillennium(float $precision = 1, string $function = "round") Round the current instance millennium with given precision using the given function. + * @method $this roundMillennia(float $precision = 1, string $function = "round") Round the current instance millennium with given precision using the given function. + * @method $this floorMillennium(float $precision = 1) Truncate the current instance millennium with given precision. + * @method $this floorMillennia(float $precision = 1) Truncate the current instance millennium with given precision. + * @method $this ceilMillennium(float $precision = 1) Ceil the current instance millennium with given precision. + * @method $this ceilMillennia(float $precision = 1) Ceil the current instance millennium with given precision. + * @method $this roundCentury(float $precision = 1, string $function = "round") Round the current instance century with given precision using the given function. + * @method $this roundCenturies(float $precision = 1, string $function = "round") Round the current instance century with given precision using the given function. + * @method $this floorCentury(float $precision = 1) Truncate the current instance century with given precision. + * @method $this floorCenturies(float $precision = 1) Truncate the current instance century with given precision. + * @method $this ceilCentury(float $precision = 1) Ceil the current instance century with given precision. + * @method $this ceilCenturies(float $precision = 1) Ceil the current instance century with given precision. + * @method $this roundDecade(float $precision = 1, string $function = "round") Round the current instance decade with given precision using the given function. + * @method $this roundDecades(float $precision = 1, string $function = "round") Round the current instance decade with given precision using the given function. + * @method $this floorDecade(float $precision = 1) Truncate the current instance decade with given precision. + * @method $this floorDecades(float $precision = 1) Truncate the current instance decade with given precision. + * @method $this ceilDecade(float $precision = 1) Ceil the current instance decade with given precision. + * @method $this ceilDecades(float $precision = 1) Ceil the current instance decade with given precision. + * @method $this roundQuarter(float $precision = 1, string $function = "round") Round the current instance quarter with given precision using the given function. + * @method $this roundQuarters(float $precision = 1, string $function = "round") Round the current instance quarter with given precision using the given function. + * @method $this floorQuarter(float $precision = 1) Truncate the current instance quarter with given precision. + * @method $this floorQuarters(float $precision = 1) Truncate the current instance quarter with given precision. + * @method $this ceilQuarter(float $precision = 1) Ceil the current instance quarter with given precision. + * @method $this ceilQuarters(float $precision = 1) Ceil the current instance quarter with given precision. + * @method $this roundMillisecond(float $precision = 1, string $function = "round") Round the current instance millisecond with given precision using the given function. + * @method $this roundMilliseconds(float $precision = 1, string $function = "round") Round the current instance millisecond with given precision using the given function. + * @method $this floorMillisecond(float $precision = 1) Truncate the current instance millisecond with given precision. + * @method $this floorMilliseconds(float $precision = 1) Truncate the current instance millisecond with given precision. + * @method $this ceilMillisecond(float $precision = 1) Ceil the current instance millisecond with given precision. + * @method $this ceilMilliseconds(float $precision = 1) Ceil the current instance millisecond with given precision. + * @method $this roundMicrosecond(float $precision = 1, string $function = "round") Round the current instance microsecond with given precision using the given function. + * @method $this roundMicroseconds(float $precision = 1, string $function = "round") Round the current instance microsecond with given precision using the given function. + * @method $this floorMicrosecond(float $precision = 1) Truncate the current instance microsecond with given precision. + * @method $this floorMicroseconds(float $precision = 1) Truncate the current instance microsecond with given precision. + * @method $this ceilMicrosecond(float $precision = 1) Ceil the current instance microsecond with given precision. + * @method $this ceilMicroseconds(float $precision = 1) Ceil the current instance microsecond with given precision. + * @method string shortAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string longAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string shortRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string longRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string shortRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string longRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string shortRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string longRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method static static|false createFromFormat(string $format, string $time, DateTimeZone|string|false|null $timezone = null) Parse a string into a new Carbon object according to the specified format. + * @method static static __set_state(array $array) https://php.net/manual/en/datetime.set-state.php * * */ diff --git a/core/vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php b/core/vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php index 960d66c056..4c9c1cfef5 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php +++ b/core/vendor/nesbot/carbon/src/Carbon/CarbonImmutable.php @@ -33,477 +33,477 @@ * @property int $second * @property int $micro * @property int $microsecond - * @property int|float|string $timestamp seconds since the Unix Epoch - * @property string $englishDayOfWeek the day of week in English - * @property string $shortEnglishDayOfWeek the abbreviated day of week in English - * @property string $englishMonth the month in English - * @property string $shortEnglishMonth the abbreviated month in English + * @property int|float|string $timestamp seconds since the Unix Epoch + * @property string $englishDayOfWeek the day of week in English + * @property string $shortEnglishDayOfWeek the abbreviated day of week in English + * @property string $englishMonth the month in English + * @property string $shortEnglishMonth the abbreviated month in English * @property int $milliseconds * @property int $millisecond * @property int $milli - * @property int $week 1 through 53 - * @property int $isoWeek 1 through 53 - * @property int $weekYear year according to week format - * @property int $isoWeekYear year according to ISO week format - * @property int $dayOfYear 1 through 366 - * @property int $age does a diffInYears() with default parameters - * @property int $offset the timezone offset in seconds from UTC - * @property int $offsetMinutes the timezone offset in minutes from UTC - * @property int $offsetHours the timezone offset in hours from UTC - * @property CarbonTimeZone $timezone the current timezone - * @property CarbonTimeZone $tz alias of $timezone - * @property-read int $dayOfWeek 0 (for Sunday) through 6 (for Saturday) - * @property-read int $dayOfWeekIso 1 (for Monday) through 7 (for Sunday) - * @property-read int $weekOfYear ISO-8601 week number of year, weeks starting on Monday - * @property-read int $daysInMonth number of days in the given month - * @property-read string $latinMeridiem "am"/"pm" (Ante meridiem or Post meridiem latin lowercase mark) - * @property-read string $latinUpperMeridiem "AM"/"PM" (Ante meridiem or Post meridiem latin uppercase mark) - * @property-read string $timezoneAbbreviatedName the current timezone abbreviated name - * @property-read string $tzAbbrName alias of $timezoneAbbreviatedName - * @property-read string $dayName long name of weekday translated according to Carbon locale, in english if no translation available for current language - * @property-read string $shortDayName short name of weekday translated according to Carbon locale, in english if no translation available for current language - * @property-read string $minDayName very short name of weekday translated according to Carbon locale, in english if no translation available for current language - * @property-read string $monthName long name of month translated according to Carbon locale, in english if no translation available for current language - * @property-read string $shortMonthName short name of month translated according to Carbon locale, in english if no translation available for current language - * @property-read string $meridiem lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language - * @property-read string $upperMeridiem uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language - * @property-read int $noZeroHour current hour from 1 to 24 - * @property-read int $weeksInYear 51 through 53 - * @property-read int $isoWeeksInYear 51 through 53 - * @property-read int $weekOfMonth 1 through 5 - * @property-read int $weekNumberInMonth 1 through 5 - * @property-read int $firstWeekDay 0 through 6 - * @property-read int $lastWeekDay 0 through 6 - * @property-read int $daysInYear 365 or 366 - * @property-read int $quarter the quarter of this instance, 1 - 4 - * @property-read int $decade the decade of this instance - * @property-read int $century the century of this instance - * @property-read int $millennium the millennium of this instance - * @property-read bool $dst daylight savings time indicator, true if DST, false otherwise - * @property-read bool $local checks if the timezone is local, true if local, false otherwise - * @property-read bool $utc checks if the timezone is UTC, true if UTC, false otherwise - * @property-read string $timezoneName the current timezone name - * @property-read string $tzName alias of $timezoneName - * @property-read string $locale locale of the current instance + * @property int $week 1 through 53 + * @property int $isoWeek 1 through 53 + * @property int $weekYear year according to week format + * @property int $isoWeekYear year according to ISO week format + * @property int $dayOfYear 1 through 366 + * @property int $age does a diffInYears() with default parameters + * @property int $offset the timezone offset in seconds from UTC + * @property int $offsetMinutes the timezone offset in minutes from UTC + * @property int $offsetHours the timezone offset in hours from UTC + * @property CarbonTimeZone $timezone the current timezone + * @property CarbonTimeZone $tz alias of $timezone + * @property-read int $dayOfWeek 0 (for Sunday) through 6 (for Saturday) + * @property-read int $dayOfWeekIso 1 (for Monday) through 7 (for Sunday) + * @property-read int $weekOfYear ISO-8601 week number of year, weeks starting on Monday + * @property-read int $daysInMonth number of days in the given month + * @property-read string $latinMeridiem "am"/"pm" (Ante meridiem or Post meridiem latin lowercase mark) + * @property-read string $latinUpperMeridiem "AM"/"PM" (Ante meridiem or Post meridiem latin uppercase mark) + * @property-read string $timezoneAbbreviatedName the current timezone abbreviated name + * @property-read string $tzAbbrName alias of $timezoneAbbreviatedName + * @property-read string $dayName long name of weekday translated according to Carbon locale, in english if no translation available for current language + * @property-read string $shortDayName short name of weekday translated according to Carbon locale, in english if no translation available for current language + * @property-read string $minDayName very short name of weekday translated according to Carbon locale, in english if no translation available for current language + * @property-read string $monthName long name of month translated according to Carbon locale, in english if no translation available for current language + * @property-read string $shortMonthName short name of month translated according to Carbon locale, in english if no translation available for current language + * @property-read string $meridiem lowercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language + * @property-read string $upperMeridiem uppercase meridiem mark translated according to Carbon locale, in latin if no translation available for current language + * @property-read int $noZeroHour current hour from 1 to 24 + * @property-read int $weeksInYear 51 through 53 + * @property-read int $isoWeeksInYear 51 through 53 + * @property-read int $weekOfMonth 1 through 5 + * @property-read int $weekNumberInMonth 1 through 5 + * @property-read int $firstWeekDay 0 through 6 + * @property-read int $lastWeekDay 0 through 6 + * @property-read int $daysInYear 365 or 366 + * @property-read int $quarter the quarter of this instance, 1 - 4 + * @property-read int $decade the decade of this instance + * @property-read int $century the century of this instance + * @property-read int $millennium the millennium of this instance + * @property-read bool $dst daylight savings time indicator, true if DST, false otherwise + * @property-read bool $local checks if the timezone is local, true if local, false otherwise + * @property-read bool $utc checks if the timezone is UTC, true if UTC, false otherwise + * @property-read string $timezoneName the current timezone name + * @property-read string $tzName alias of $timezoneName + * @property-read string $locale locale of the current instance * - * @method bool isUtc() Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.) - * @method bool isLocal() Check if the current instance has non-UTC timezone. - * @method bool isValid() Check if the current instance is a valid date. - * @method bool isDST() Check if the current instance is in a daylight saving time. - * @method bool isSunday() Checks if the instance day is sunday. - * @method bool isMonday() Checks if the instance day is monday. - * @method bool isTuesday() Checks if the instance day is tuesday. - * @method bool isWednesday() Checks if the instance day is wednesday. - * @method bool isThursday() Checks if the instance day is thursday. - * @method bool isFriday() Checks if the instance day is friday. - * @method bool isSaturday() Checks if the instance day is saturday. - * @method bool isSameYear(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same year as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentYear() Checks if the instance is in the same year as the current moment. - * @method bool isNextYear() Checks if the instance is in the same year as the current moment next year. - * @method bool isLastYear() Checks if the instance is in the same year as the current moment last year. - * @method bool isSameWeek(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same week as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentWeek() Checks if the instance is in the same week as the current moment. - * @method bool isNextWeek() Checks if the instance is in the same week as the current moment next week. - * @method bool isLastWeek() Checks if the instance is in the same week as the current moment last week. - * @method bool isSameDay(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same day as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentDay() Checks if the instance is in the same day as the current moment. - * @method bool isNextDay() Checks if the instance is in the same day as the current moment next day. - * @method bool isLastDay() Checks if the instance is in the same day as the current moment last day. - * @method bool isSameHour(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same hour as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentHour() Checks if the instance is in the same hour as the current moment. - * @method bool isNextHour() Checks if the instance is in the same hour as the current moment next hour. - * @method bool isLastHour() Checks if the instance is in the same hour as the current moment last hour. - * @method bool isSameMinute(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same minute as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentMinute() Checks if the instance is in the same minute as the current moment. - * @method bool isNextMinute() Checks if the instance is in the same minute as the current moment next minute. - * @method bool isLastMinute() Checks if the instance is in the same minute as the current moment last minute. - * @method bool isSameSecond(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same second as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentSecond() Checks if the instance is in the same second as the current moment. - * @method bool isNextSecond() Checks if the instance is in the same second as the current moment next second. - * @method bool isLastSecond() Checks if the instance is in the same second as the current moment last second. - * @method bool isSameMicro(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentMicro() Checks if the instance is in the same microsecond as the current moment. - * @method bool isNextMicro() Checks if the instance is in the same microsecond as the current moment next microsecond. - * @method bool isLastMicro() Checks if the instance is in the same microsecond as the current moment last microsecond. - * @method bool isSameMicrosecond(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentMicrosecond() Checks if the instance is in the same microsecond as the current moment. - * @method bool isNextMicrosecond() Checks if the instance is in the same microsecond as the current moment next microsecond. - * @method bool isLastMicrosecond() Checks if the instance is in the same microsecond as the current moment last microsecond. - * @method bool isCurrentMonth() Checks if the instance is in the same month as the current moment. - * @method bool isNextMonth() Checks if the instance is in the same month as the current moment next month. - * @method bool isLastMonth() Checks if the instance is in the same month as the current moment last month. - * @method bool isCurrentQuarter() Checks if the instance is in the same quarter as the current moment. - * @method bool isNextQuarter() Checks if the instance is in the same quarter as the current moment next quarter. - * @method bool isLastQuarter() Checks if the instance is in the same quarter as the current moment last quarter. - * @method bool isSameDecade(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same decade as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentDecade() Checks if the instance is in the same decade as the current moment. - * @method bool isNextDecade() Checks if the instance is in the same decade as the current moment next decade. - * @method bool isLastDecade() Checks if the instance is in the same decade as the current moment last decade. - * @method bool isSameCentury(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same century as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentCentury() Checks if the instance is in the same century as the current moment. - * @method bool isNextCentury() Checks if the instance is in the same century as the current moment next century. - * @method bool isLastCentury() Checks if the instance is in the same century as the current moment last century. - * @method bool isSameMillennium(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same millennium as the instance. If null passed, compare to now (with the same timezone). - * @method bool isCurrentMillennium() Checks if the instance is in the same millennium as the current moment. - * @method bool isNextMillennium() Checks if the instance is in the same millennium as the current moment next millennium. - * @method bool isLastMillennium() Checks if the instance is in the same millennium as the current moment last millennium. - * @method CarbonImmutable years(int $value) Set current instance year to the given value. - * @method CarbonImmutable year(int $value) Set current instance year to the given value. - * @method CarbonImmutable setYears(int $value) Set current instance year to the given value. - * @method CarbonImmutable setYear(int $value) Set current instance year to the given value. - * @method CarbonImmutable months(int $value) Set current instance month to the given value. - * @method CarbonImmutable month(int $value) Set current instance month to the given value. - * @method CarbonImmutable setMonths(int $value) Set current instance month to the given value. - * @method CarbonImmutable setMonth(int $value) Set current instance month to the given value. - * @method CarbonImmutable days(int $value) Set current instance day to the given value. - * @method CarbonImmutable day(int $value) Set current instance day to the given value. - * @method CarbonImmutable setDays(int $value) Set current instance day to the given value. - * @method CarbonImmutable setDay(int $value) Set current instance day to the given value. - * @method CarbonImmutable hours(int $value) Set current instance hour to the given value. - * @method CarbonImmutable hour(int $value) Set current instance hour to the given value. - * @method CarbonImmutable setHours(int $value) Set current instance hour to the given value. - * @method CarbonImmutable setHour(int $value) Set current instance hour to the given value. - * @method CarbonImmutable minutes(int $value) Set current instance minute to the given value. - * @method CarbonImmutable minute(int $value) Set current instance minute to the given value. - * @method CarbonImmutable setMinutes(int $value) Set current instance minute to the given value. - * @method CarbonImmutable setMinute(int $value) Set current instance minute to the given value. - * @method CarbonImmutable seconds(int $value) Set current instance second to the given value. - * @method CarbonImmutable second(int $value) Set current instance second to the given value. - * @method CarbonImmutable setSeconds(int $value) Set current instance second to the given value. - * @method CarbonImmutable setSecond(int $value) Set current instance second to the given value. - * @method CarbonImmutable millis(int $value) Set current instance millisecond to the given value. - * @method CarbonImmutable milli(int $value) Set current instance millisecond to the given value. - * @method CarbonImmutable setMillis(int $value) Set current instance millisecond to the given value. - * @method CarbonImmutable setMilli(int $value) Set current instance millisecond to the given value. - * @method CarbonImmutable milliseconds(int $value) Set current instance millisecond to the given value. - * @method CarbonImmutable millisecond(int $value) Set current instance millisecond to the given value. - * @method CarbonImmutable setMilliseconds(int $value) Set current instance millisecond to the given value. - * @method CarbonImmutable setMillisecond(int $value) Set current instance millisecond to the given value. - * @method CarbonImmutable micros(int $value) Set current instance microsecond to the given value. - * @method CarbonImmutable micro(int $value) Set current instance microsecond to the given value. - * @method CarbonImmutable setMicros(int $value) Set current instance microsecond to the given value. - * @method CarbonImmutable setMicro(int $value) Set current instance microsecond to the given value. - * @method CarbonImmutable microseconds(int $value) Set current instance microsecond to the given value. - * @method CarbonImmutable microsecond(int $value) Set current instance microsecond to the given value. - * @method CarbonImmutable setMicroseconds(int $value) Set current instance microsecond to the given value. - * @method CarbonImmutable setMicrosecond(int $value) Set current instance microsecond to the given value. - * @method CarbonImmutable addYears(int $value = 1) Add years (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addYear() Add one year to the instance (using date interval). - * @method CarbonImmutable subYears(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subYear() Sub one year to the instance (using date interval). - * @method CarbonImmutable addYearsWithOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addYearWithOverflow() Add one year to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subYearsWithOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subYearWithOverflow() Sub one year to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addYearsWithoutOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addYearWithoutOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subYearsWithoutOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subYearWithoutOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addYearsWithNoOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addYearWithNoOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subYearsWithNoOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subYearWithNoOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addYearsNoOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addYearNoOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subYearsNoOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subYearNoOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMonths(int $value = 1) Add months (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addMonth() Add one month to the instance (using date interval). - * @method CarbonImmutable subMonths(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subMonth() Sub one month to the instance (using date interval). - * @method CarbonImmutable addMonthsWithOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addMonthWithOverflow() Add one month to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subMonthsWithOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subMonthWithOverflow() Sub one month to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addMonthsWithoutOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMonthWithoutOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMonthsWithoutOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMonthWithoutOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMonthsWithNoOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMonthWithNoOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMonthsWithNoOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMonthWithNoOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMonthsNoOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMonthNoOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMonthsNoOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMonthNoOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addDays(int $value = 1) Add days (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addDay() Add one day to the instance (using date interval). - * @method CarbonImmutable subDays(int $value = 1) Sub days (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subDay() Sub one day to the instance (using date interval). - * @method CarbonImmutable addHours(int $value = 1) Add hours (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addHour() Add one hour to the instance (using date interval). - * @method CarbonImmutable subHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subHour() Sub one hour to the instance (using date interval). - * @method CarbonImmutable addMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addMinute() Add one minute to the instance (using date interval). - * @method CarbonImmutable subMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subMinute() Sub one minute to the instance (using date interval). - * @method CarbonImmutable addSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addSecond() Add one second to the instance (using date interval). - * @method CarbonImmutable subSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subSecond() Sub one second to the instance (using date interval). - * @method CarbonImmutable addMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addMilli() Add one millisecond to the instance (using date interval). - * @method CarbonImmutable subMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subMilli() Sub one millisecond to the instance (using date interval). - * @method CarbonImmutable addMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addMillisecond() Add one millisecond to the instance (using date interval). - * @method CarbonImmutable subMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subMillisecond() Sub one millisecond to the instance (using date interval). - * @method CarbonImmutable addMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addMicro() Add one microsecond to the instance (using date interval). - * @method CarbonImmutable subMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subMicro() Sub one microsecond to the instance (using date interval). - * @method CarbonImmutable addMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addMicrosecond() Add one microsecond to the instance (using date interval). - * @method CarbonImmutable subMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subMicrosecond() Sub one microsecond to the instance (using date interval). - * @method CarbonImmutable addMillennia(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addMillennium() Add one millennium to the instance (using date interval). - * @method CarbonImmutable subMillennia(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subMillennium() Sub one millennium to the instance (using date interval). - * @method CarbonImmutable addMillenniaWithOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addMillenniumWithOverflow() Add one millennium to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subMillenniaWithOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subMillenniumWithOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addMillenniaWithoutOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMillenniumWithoutOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMillenniaWithoutOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMillenniumWithoutOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMillenniaWithNoOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMillenniumWithNoOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMillenniaWithNoOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMillenniumWithNoOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMillenniaNoOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addMillenniumNoOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMillenniaNoOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subMillenniumNoOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addCenturies(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addCentury() Add one century to the instance (using date interval). - * @method CarbonImmutable subCenturies(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subCentury() Sub one century to the instance (using date interval). - * @method CarbonImmutable addCenturiesWithOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addCenturyWithOverflow() Add one century to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subCenturiesWithOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subCenturyWithOverflow() Sub one century to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addCenturiesWithoutOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addCenturyWithoutOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subCenturiesWithoutOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subCenturyWithoutOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addCenturiesWithNoOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addCenturyWithNoOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subCenturiesWithNoOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subCenturyWithNoOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addCenturiesNoOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addCenturyNoOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subCenturiesNoOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subCenturyNoOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addDecades(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addDecade() Add one decade to the instance (using date interval). - * @method CarbonImmutable subDecades(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subDecade() Sub one decade to the instance (using date interval). - * @method CarbonImmutable addDecadesWithOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addDecadeWithOverflow() Add one decade to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subDecadesWithOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subDecadeWithOverflow() Sub one decade to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addDecadesWithoutOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addDecadeWithoutOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subDecadesWithoutOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subDecadeWithoutOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addDecadesWithNoOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addDecadeWithNoOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subDecadesWithNoOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subDecadeWithNoOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addDecadesNoOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addDecadeNoOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subDecadesNoOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subDecadeNoOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addQuarters(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addQuarter() Add one quarter to the instance (using date interval). - * @method CarbonImmutable subQuarters(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subQuarter() Sub one quarter to the instance (using date interval). - * @method CarbonImmutable addQuartersWithOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addQuarterWithOverflow() Add one quarter to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subQuartersWithOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable subQuarterWithOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly allowed. - * @method CarbonImmutable addQuartersWithoutOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addQuarterWithoutOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subQuartersWithoutOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subQuarterWithoutOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addQuartersWithNoOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addQuarterWithNoOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subQuartersWithNoOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subQuarterWithNoOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addQuartersNoOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addQuarterNoOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subQuartersNoOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable subQuarterNoOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. - * @method CarbonImmutable addWeeks(int $value = 1) Add weeks (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addWeek() Add one week to the instance (using date interval). - * @method CarbonImmutable subWeeks(int $value = 1) Sub weeks (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subWeek() Sub one week to the instance (using date interval). - * @method CarbonImmutable addWeekdays(int $value = 1) Add weekdays (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable addWeekday() Add one weekday to the instance (using date interval). - * @method CarbonImmutable subWeekdays(int $value = 1) Sub weekdays (the $value count passed in) to the instance (using date interval). - * @method CarbonImmutable subWeekday() Sub one weekday to the instance (using date interval). - * @method CarbonImmutable addRealMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealMicro() Add one microsecond to the instance (using timestamp). - * @method CarbonImmutable subRealMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealMicro() Sub one microsecond to the instance (using timestamp). - * @method CarbonPeriod microsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given. - * @method CarbonImmutable addRealMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealMicrosecond() Add one microsecond to the instance (using timestamp). - * @method CarbonImmutable subRealMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealMicrosecond() Sub one microsecond to the instance (using timestamp). - * @method CarbonPeriod microsecondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given. - * @method CarbonImmutable addRealMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealMilli() Add one millisecond to the instance (using timestamp). - * @method CarbonImmutable subRealMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealMilli() Sub one millisecond to the instance (using timestamp). - * @method CarbonPeriod millisUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given. - * @method CarbonImmutable addRealMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealMillisecond() Add one millisecond to the instance (using timestamp). - * @method CarbonImmutable subRealMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealMillisecond() Sub one millisecond to the instance (using timestamp). - * @method CarbonPeriod millisecondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given. - * @method CarbonImmutable addRealSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealSecond() Add one second to the instance (using timestamp). - * @method CarbonImmutable subRealSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealSecond() Sub one second to the instance (using timestamp). - * @method CarbonPeriod secondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each second or every X seconds if a factor is given. - * @method CarbonImmutable addRealMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealMinute() Add one minute to the instance (using timestamp). - * @method CarbonImmutable subRealMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealMinute() Sub one minute to the instance (using timestamp). - * @method CarbonPeriod minutesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each minute or every X minutes if a factor is given. - * @method CarbonImmutable addRealHours(int $value = 1) Add hours (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealHour() Add one hour to the instance (using timestamp). - * @method CarbonImmutable subRealHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealHour() Sub one hour to the instance (using timestamp). - * @method CarbonPeriod hoursUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each hour or every X hours if a factor is given. - * @method CarbonImmutable addRealDays(int $value = 1) Add days (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealDay() Add one day to the instance (using timestamp). - * @method CarbonImmutable subRealDays(int $value = 1) Sub days (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealDay() Sub one day to the instance (using timestamp). - * @method CarbonPeriod daysUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each day or every X days if a factor is given. - * @method CarbonImmutable addRealWeeks(int $value = 1) Add weeks (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealWeek() Add one week to the instance (using timestamp). - * @method CarbonImmutable subRealWeeks(int $value = 1) Sub weeks (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealWeek() Sub one week to the instance (using timestamp). - * @method CarbonPeriod weeksUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each week or every X weeks if a factor is given. - * @method CarbonImmutable addRealMonths(int $value = 1) Add months (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealMonth() Add one month to the instance (using timestamp). - * @method CarbonImmutable subRealMonths(int $value = 1) Sub months (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealMonth() Sub one month to the instance (using timestamp). - * @method CarbonPeriod monthsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each month or every X months if a factor is given. - * @method CarbonImmutable addRealQuarters(int $value = 1) Add quarters (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealQuarter() Add one quarter to the instance (using timestamp). - * @method CarbonImmutable subRealQuarters(int $value = 1) Sub quarters (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealQuarter() Sub one quarter to the instance (using timestamp). - * @method CarbonPeriod quartersUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each quarter or every X quarters if a factor is given. - * @method CarbonImmutable addRealYears(int $value = 1) Add years (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealYear() Add one year to the instance (using timestamp). - * @method CarbonImmutable subRealYears(int $value = 1) Sub years (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealYear() Sub one year to the instance (using timestamp). - * @method CarbonPeriod yearsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each year or every X years if a factor is given. - * @method CarbonImmutable addRealDecades(int $value = 1) Add decades (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealDecade() Add one decade to the instance (using timestamp). - * @method CarbonImmutable subRealDecades(int $value = 1) Sub decades (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealDecade() Sub one decade to the instance (using timestamp). - * @method CarbonPeriod decadesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each decade or every X decades if a factor is given. - * @method CarbonImmutable addRealCenturies(int $value = 1) Add centuries (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealCentury() Add one century to the instance (using timestamp). - * @method CarbonImmutable subRealCenturies(int $value = 1) Sub centuries (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealCentury() Sub one century to the instance (using timestamp). - * @method CarbonPeriod centuriesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each century or every X centuries if a factor is given. - * @method CarbonImmutable addRealMillennia(int $value = 1) Add millennia (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable addRealMillennium() Add one millennium to the instance (using timestamp). - * @method CarbonImmutable subRealMillennia(int $value = 1) Sub millennia (the $value count passed in) to the instance (using timestamp). - * @method CarbonImmutable subRealMillennium() Sub one millennium to the instance (using timestamp). - * @method CarbonPeriod millenniaUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millennium or every X millennia if a factor is given. - * @method CarbonImmutable roundYear(float $precision = 1, string $function = "round") Round the current instance year with given precision using the given function. - * @method CarbonImmutable roundYears(float $precision = 1, string $function = "round") Round the current instance year with given precision using the given function. - * @method CarbonImmutable floorYear(float $precision = 1) Truncate the current instance year with given precision. - * @method CarbonImmutable floorYears(float $precision = 1) Truncate the current instance year with given precision. - * @method CarbonImmutable ceilYear(float $precision = 1) Ceil the current instance year with given precision. - * @method CarbonImmutable ceilYears(float $precision = 1) Ceil the current instance year with given precision. - * @method CarbonImmutable roundMonth(float $precision = 1, string $function = "round") Round the current instance month with given precision using the given function. - * @method CarbonImmutable roundMonths(float $precision = 1, string $function = "round") Round the current instance month with given precision using the given function. - * @method CarbonImmutable floorMonth(float $precision = 1) Truncate the current instance month with given precision. - * @method CarbonImmutable floorMonths(float $precision = 1) Truncate the current instance month with given precision. - * @method CarbonImmutable ceilMonth(float $precision = 1) Ceil the current instance month with given precision. - * @method CarbonImmutable ceilMonths(float $precision = 1) Ceil the current instance month with given precision. - * @method CarbonImmutable roundDay(float $precision = 1, string $function = "round") Round the current instance day with given precision using the given function. - * @method CarbonImmutable roundDays(float $precision = 1, string $function = "round") Round the current instance day with given precision using the given function. - * @method CarbonImmutable floorDay(float $precision = 1) Truncate the current instance day with given precision. - * @method CarbonImmutable floorDays(float $precision = 1) Truncate the current instance day with given precision. - * @method CarbonImmutable ceilDay(float $precision = 1) Ceil the current instance day with given precision. - * @method CarbonImmutable ceilDays(float $precision = 1) Ceil the current instance day with given precision. - * @method CarbonImmutable roundHour(float $precision = 1, string $function = "round") Round the current instance hour with given precision using the given function. - * @method CarbonImmutable roundHours(float $precision = 1, string $function = "round") Round the current instance hour with given precision using the given function. - * @method CarbonImmutable floorHour(float $precision = 1) Truncate the current instance hour with given precision. - * @method CarbonImmutable floorHours(float $precision = 1) Truncate the current instance hour with given precision. - * @method CarbonImmutable ceilHour(float $precision = 1) Ceil the current instance hour with given precision. - * @method CarbonImmutable ceilHours(float $precision = 1) Ceil the current instance hour with given precision. - * @method CarbonImmutable roundMinute(float $precision = 1, string $function = "round") Round the current instance minute with given precision using the given function. - * @method CarbonImmutable roundMinutes(float $precision = 1, string $function = "round") Round the current instance minute with given precision using the given function. - * @method CarbonImmutable floorMinute(float $precision = 1) Truncate the current instance minute with given precision. - * @method CarbonImmutable floorMinutes(float $precision = 1) Truncate the current instance minute with given precision. - * @method CarbonImmutable ceilMinute(float $precision = 1) Ceil the current instance minute with given precision. - * @method CarbonImmutable ceilMinutes(float $precision = 1) Ceil the current instance minute with given precision. - * @method CarbonImmutable roundSecond(float $precision = 1, string $function = "round") Round the current instance second with given precision using the given function. - * @method CarbonImmutable roundSeconds(float $precision = 1, string $function = "round") Round the current instance second with given precision using the given function. - * @method CarbonImmutable floorSecond(float $precision = 1) Truncate the current instance second with given precision. - * @method CarbonImmutable floorSeconds(float $precision = 1) Truncate the current instance second with given precision. - * @method CarbonImmutable ceilSecond(float $precision = 1) Ceil the current instance second with given precision. - * @method CarbonImmutable ceilSeconds(float $precision = 1) Ceil the current instance second with given precision. - * @method CarbonImmutable roundMillennium(float $precision = 1, string $function = "round") Round the current instance millennium with given precision using the given function. - * @method CarbonImmutable roundMillennia(float $precision = 1, string $function = "round") Round the current instance millennium with given precision using the given function. - * @method CarbonImmutable floorMillennium(float $precision = 1) Truncate the current instance millennium with given precision. - * @method CarbonImmutable floorMillennia(float $precision = 1) Truncate the current instance millennium with given precision. - * @method CarbonImmutable ceilMillennium(float $precision = 1) Ceil the current instance millennium with given precision. - * @method CarbonImmutable ceilMillennia(float $precision = 1) Ceil the current instance millennium with given precision. - * @method CarbonImmutable roundCentury(float $precision = 1, string $function = "round") Round the current instance century with given precision using the given function. - * @method CarbonImmutable roundCenturies(float $precision = 1, string $function = "round") Round the current instance century with given precision using the given function. - * @method CarbonImmutable floorCentury(float $precision = 1) Truncate the current instance century with given precision. - * @method CarbonImmutable floorCenturies(float $precision = 1) Truncate the current instance century with given precision. - * @method CarbonImmutable ceilCentury(float $precision = 1) Ceil the current instance century with given precision. - * @method CarbonImmutable ceilCenturies(float $precision = 1) Ceil the current instance century with given precision. - * @method CarbonImmutable roundDecade(float $precision = 1, string $function = "round") Round the current instance decade with given precision using the given function. - * @method CarbonImmutable roundDecades(float $precision = 1, string $function = "round") Round the current instance decade with given precision using the given function. - * @method CarbonImmutable floorDecade(float $precision = 1) Truncate the current instance decade with given precision. - * @method CarbonImmutable floorDecades(float $precision = 1) Truncate the current instance decade with given precision. - * @method CarbonImmutable ceilDecade(float $precision = 1) Ceil the current instance decade with given precision. - * @method CarbonImmutable ceilDecades(float $precision = 1) Ceil the current instance decade with given precision. - * @method CarbonImmutable roundQuarter(float $precision = 1, string $function = "round") Round the current instance quarter with given precision using the given function. - * @method CarbonImmutable roundQuarters(float $precision = 1, string $function = "round") Round the current instance quarter with given precision using the given function. - * @method CarbonImmutable floorQuarter(float $precision = 1) Truncate the current instance quarter with given precision. - * @method CarbonImmutable floorQuarters(float $precision = 1) Truncate the current instance quarter with given precision. - * @method CarbonImmutable ceilQuarter(float $precision = 1) Ceil the current instance quarter with given precision. - * @method CarbonImmutable ceilQuarters(float $precision = 1) Ceil the current instance quarter with given precision. - * @method CarbonImmutable roundMillisecond(float $precision = 1, string $function = "round") Round the current instance millisecond with given precision using the given function. - * @method CarbonImmutable roundMilliseconds(float $precision = 1, string $function = "round") Round the current instance millisecond with given precision using the given function. - * @method CarbonImmutable floorMillisecond(float $precision = 1) Truncate the current instance millisecond with given precision. - * @method CarbonImmutable floorMilliseconds(float $precision = 1) Truncate the current instance millisecond with given precision. - * @method CarbonImmutable ceilMillisecond(float $precision = 1) Ceil the current instance millisecond with given precision. - * @method CarbonImmutable ceilMilliseconds(float $precision = 1) Ceil the current instance millisecond with given precision. - * @method CarbonImmutable roundMicrosecond(float $precision = 1, string $function = "round") Round the current instance microsecond with given precision using the given function. - * @method CarbonImmutable roundMicroseconds(float $precision = 1, string $function = "round") Round the current instance microsecond with given precision using the given function. - * @method CarbonImmutable floorMicrosecond(float $precision = 1) Truncate the current instance microsecond with given precision. - * @method CarbonImmutable floorMicroseconds(float $precision = 1) Truncate the current instance microsecond with given precision. - * @method CarbonImmutable ceilMicrosecond(float $precision = 1) Ceil the current instance microsecond with given precision. - * @method CarbonImmutable ceilMicroseconds(float $precision = 1) Ceil the current instance microsecond with given precision. - * @method string shortAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string longAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string shortRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string longRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string shortRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string longRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string shortRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method string longRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) - * @method static static|false createFromFormat(string $format, string $time, string|DateTimeZone $timezone = null) Parse a string into a new CarbonImmutable object according to the specified format. - * @method static static __set_state(array $array) https://php.net/manual/en/datetime.set-state.php + * @method bool isUtc() Check if the current instance has UTC timezone. (Both isUtc and isUTC cases are valid.) + * @method bool isLocal() Check if the current instance has non-UTC timezone. + * @method bool isValid() Check if the current instance is a valid date. + * @method bool isDST() Check if the current instance is in a daylight saving time. + * @method bool isSunday() Checks if the instance day is sunday. + * @method bool isMonday() Checks if the instance day is monday. + * @method bool isTuesday() Checks if the instance day is tuesday. + * @method bool isWednesday() Checks if the instance day is wednesday. + * @method bool isThursday() Checks if the instance day is thursday. + * @method bool isFriday() Checks if the instance day is friday. + * @method bool isSaturday() Checks if the instance day is saturday. + * @method bool isSameYear(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same year as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentYear() Checks if the instance is in the same year as the current moment. + * @method bool isNextYear() Checks if the instance is in the same year as the current moment next year. + * @method bool isLastYear() Checks if the instance is in the same year as the current moment last year. + * @method bool isSameWeek(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same week as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentWeek() Checks if the instance is in the same week as the current moment. + * @method bool isNextWeek() Checks if the instance is in the same week as the current moment next week. + * @method bool isLastWeek() Checks if the instance is in the same week as the current moment last week. + * @method bool isSameDay(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same day as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentDay() Checks if the instance is in the same day as the current moment. + * @method bool isNextDay() Checks if the instance is in the same day as the current moment next day. + * @method bool isLastDay() Checks if the instance is in the same day as the current moment last day. + * @method bool isSameHour(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same hour as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentHour() Checks if the instance is in the same hour as the current moment. + * @method bool isNextHour() Checks if the instance is in the same hour as the current moment next hour. + * @method bool isLastHour() Checks if the instance is in the same hour as the current moment last hour. + * @method bool isSameMinute(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same minute as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentMinute() Checks if the instance is in the same minute as the current moment. + * @method bool isNextMinute() Checks if the instance is in the same minute as the current moment next minute. + * @method bool isLastMinute() Checks if the instance is in the same minute as the current moment last minute. + * @method bool isSameSecond(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same second as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentSecond() Checks if the instance is in the same second as the current moment. + * @method bool isNextSecond() Checks if the instance is in the same second as the current moment next second. + * @method bool isLastSecond() Checks if the instance is in the same second as the current moment last second. + * @method bool isSameMicro(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentMicro() Checks if the instance is in the same microsecond as the current moment. + * @method bool isNextMicro() Checks if the instance is in the same microsecond as the current moment next microsecond. + * @method bool isLastMicro() Checks if the instance is in the same microsecond as the current moment last microsecond. + * @method bool isSameMicrosecond(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same microsecond as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentMicrosecond() Checks if the instance is in the same microsecond as the current moment. + * @method bool isNextMicrosecond() Checks if the instance is in the same microsecond as the current moment next microsecond. + * @method bool isLastMicrosecond() Checks if the instance is in the same microsecond as the current moment last microsecond. + * @method bool isCurrentMonth() Checks if the instance is in the same month as the current moment. + * @method bool isNextMonth() Checks if the instance is in the same month as the current moment next month. + * @method bool isLastMonth() Checks if the instance is in the same month as the current moment last month. + * @method bool isCurrentQuarter() Checks if the instance is in the same quarter as the current moment. + * @method bool isNextQuarter() Checks if the instance is in the same quarter as the current moment next quarter. + * @method bool isLastQuarter() Checks if the instance is in the same quarter as the current moment last quarter. + * @method bool isSameDecade(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same decade as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentDecade() Checks if the instance is in the same decade as the current moment. + * @method bool isNextDecade() Checks if the instance is in the same decade as the current moment next decade. + * @method bool isLastDecade() Checks if the instance is in the same decade as the current moment last decade. + * @method bool isSameCentury(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same century as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentCentury() Checks if the instance is in the same century as the current moment. + * @method bool isNextCentury() Checks if the instance is in the same century as the current moment next century. + * @method bool isLastCentury() Checks if the instance is in the same century as the current moment last century. + * @method bool isSameMillennium(Carbon|DateTimeInterface|string|null $date = null) Checks if the given date is in the same millennium as the instance. If null passed, compare to now (with the same timezone). + * @method bool isCurrentMillennium() Checks if the instance is in the same millennium as the current moment. + * @method bool isNextMillennium() Checks if the instance is in the same millennium as the current moment next millennium. + * @method bool isLastMillennium() Checks if the instance is in the same millennium as the current moment last millennium. + * @method CarbonImmutable years(int $value) Set current instance year to the given value. + * @method CarbonImmutable year(int $value) Set current instance year to the given value. + * @method CarbonImmutable setYears(int $value) Set current instance year to the given value. + * @method CarbonImmutable setYear(int $value) Set current instance year to the given value. + * @method CarbonImmutable months(int $value) Set current instance month to the given value. + * @method CarbonImmutable month(int $value) Set current instance month to the given value. + * @method CarbonImmutable setMonths(int $value) Set current instance month to the given value. + * @method CarbonImmutable setMonth(int $value) Set current instance month to the given value. + * @method CarbonImmutable days(int $value) Set current instance day to the given value. + * @method CarbonImmutable day(int $value) Set current instance day to the given value. + * @method CarbonImmutable setDays(int $value) Set current instance day to the given value. + * @method CarbonImmutable setDay(int $value) Set current instance day to the given value. + * @method CarbonImmutable hours(int $value) Set current instance hour to the given value. + * @method CarbonImmutable hour(int $value) Set current instance hour to the given value. + * @method CarbonImmutable setHours(int $value) Set current instance hour to the given value. + * @method CarbonImmutable setHour(int $value) Set current instance hour to the given value. + * @method CarbonImmutable minutes(int $value) Set current instance minute to the given value. + * @method CarbonImmutable minute(int $value) Set current instance minute to the given value. + * @method CarbonImmutable setMinutes(int $value) Set current instance minute to the given value. + * @method CarbonImmutable setMinute(int $value) Set current instance minute to the given value. + * @method CarbonImmutable seconds(int $value) Set current instance second to the given value. + * @method CarbonImmutable second(int $value) Set current instance second to the given value. + * @method CarbonImmutable setSeconds(int $value) Set current instance second to the given value. + * @method CarbonImmutable setSecond(int $value) Set current instance second to the given value. + * @method CarbonImmutable millis(int $value) Set current instance millisecond to the given value. + * @method CarbonImmutable milli(int $value) Set current instance millisecond to the given value. + * @method CarbonImmutable setMillis(int $value) Set current instance millisecond to the given value. + * @method CarbonImmutable setMilli(int $value) Set current instance millisecond to the given value. + * @method CarbonImmutable milliseconds(int $value) Set current instance millisecond to the given value. + * @method CarbonImmutable millisecond(int $value) Set current instance millisecond to the given value. + * @method CarbonImmutable setMilliseconds(int $value) Set current instance millisecond to the given value. + * @method CarbonImmutable setMillisecond(int $value) Set current instance millisecond to the given value. + * @method CarbonImmutable micros(int $value) Set current instance microsecond to the given value. + * @method CarbonImmutable micro(int $value) Set current instance microsecond to the given value. + * @method CarbonImmutable setMicros(int $value) Set current instance microsecond to the given value. + * @method CarbonImmutable setMicro(int $value) Set current instance microsecond to the given value. + * @method CarbonImmutable microseconds(int $value) Set current instance microsecond to the given value. + * @method CarbonImmutable microsecond(int $value) Set current instance microsecond to the given value. + * @method CarbonImmutable setMicroseconds(int $value) Set current instance microsecond to the given value. + * @method CarbonImmutable setMicrosecond(int $value) Set current instance microsecond to the given value. + * @method CarbonImmutable addYears(int $value = 1) Add years (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addYear() Add one year to the instance (using date interval). + * @method CarbonImmutable subYears(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subYear() Sub one year to the instance (using date interval). + * @method CarbonImmutable addYearsWithOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addYearWithOverflow() Add one year to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subYearsWithOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subYearWithOverflow() Sub one year to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addYearsWithoutOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addYearWithoutOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subYearsWithoutOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subYearWithoutOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addYearsWithNoOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addYearWithNoOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subYearsWithNoOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subYearWithNoOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addYearsNoOverflow(int $value = 1) Add years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addYearNoOverflow() Add one year to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subYearsNoOverflow(int $value = 1) Sub years (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subYearNoOverflow() Sub one year to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMonths(int $value = 1) Add months (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addMonth() Add one month to the instance (using date interval). + * @method CarbonImmutable subMonths(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subMonth() Sub one month to the instance (using date interval). + * @method CarbonImmutable addMonthsWithOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addMonthWithOverflow() Add one month to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subMonthsWithOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subMonthWithOverflow() Sub one month to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addMonthsWithoutOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMonthWithoutOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMonthsWithoutOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMonthWithoutOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMonthsWithNoOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMonthWithNoOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMonthsWithNoOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMonthWithNoOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMonthsNoOverflow(int $value = 1) Add months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMonthNoOverflow() Add one month to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMonthsNoOverflow(int $value = 1) Sub months (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMonthNoOverflow() Sub one month to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addDays(int $value = 1) Add days (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addDay() Add one day to the instance (using date interval). + * @method CarbonImmutable subDays(int $value = 1) Sub days (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subDay() Sub one day to the instance (using date interval). + * @method CarbonImmutable addHours(int $value = 1) Add hours (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addHour() Add one hour to the instance (using date interval). + * @method CarbonImmutable subHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subHour() Sub one hour to the instance (using date interval). + * @method CarbonImmutable addMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addMinute() Add one minute to the instance (using date interval). + * @method CarbonImmutable subMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subMinute() Sub one minute to the instance (using date interval). + * @method CarbonImmutable addSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addSecond() Add one second to the instance (using date interval). + * @method CarbonImmutable subSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subSecond() Sub one second to the instance (using date interval). + * @method CarbonImmutable addMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addMilli() Add one millisecond to the instance (using date interval). + * @method CarbonImmutable subMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subMilli() Sub one millisecond to the instance (using date interval). + * @method CarbonImmutable addMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addMillisecond() Add one millisecond to the instance (using date interval). + * @method CarbonImmutable subMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subMillisecond() Sub one millisecond to the instance (using date interval). + * @method CarbonImmutable addMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addMicro() Add one microsecond to the instance (using date interval). + * @method CarbonImmutable subMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subMicro() Sub one microsecond to the instance (using date interval). + * @method CarbonImmutable addMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addMicrosecond() Add one microsecond to the instance (using date interval). + * @method CarbonImmutable subMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subMicrosecond() Sub one microsecond to the instance (using date interval). + * @method CarbonImmutable addMillennia(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addMillennium() Add one millennium to the instance (using date interval). + * @method CarbonImmutable subMillennia(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subMillennium() Sub one millennium to the instance (using date interval). + * @method CarbonImmutable addMillenniaWithOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addMillenniumWithOverflow() Add one millennium to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subMillenniaWithOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subMillenniumWithOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addMillenniaWithoutOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMillenniumWithoutOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMillenniaWithoutOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMillenniumWithoutOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMillenniaWithNoOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMillenniumWithNoOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMillenniaWithNoOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMillenniumWithNoOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMillenniaNoOverflow(int $value = 1) Add millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addMillenniumNoOverflow() Add one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMillenniaNoOverflow(int $value = 1) Sub millennia (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subMillenniumNoOverflow() Sub one millennium to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addCenturies(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addCentury() Add one century to the instance (using date interval). + * @method CarbonImmutable subCenturies(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subCentury() Sub one century to the instance (using date interval). + * @method CarbonImmutable addCenturiesWithOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addCenturyWithOverflow() Add one century to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subCenturiesWithOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subCenturyWithOverflow() Sub one century to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addCenturiesWithoutOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addCenturyWithoutOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subCenturiesWithoutOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subCenturyWithoutOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addCenturiesWithNoOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addCenturyWithNoOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subCenturiesWithNoOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subCenturyWithNoOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addCenturiesNoOverflow(int $value = 1) Add centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addCenturyNoOverflow() Add one century to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subCenturiesNoOverflow(int $value = 1) Sub centuries (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subCenturyNoOverflow() Sub one century to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addDecades(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addDecade() Add one decade to the instance (using date interval). + * @method CarbonImmutable subDecades(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subDecade() Sub one decade to the instance (using date interval). + * @method CarbonImmutable addDecadesWithOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addDecadeWithOverflow() Add one decade to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subDecadesWithOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subDecadeWithOverflow() Sub one decade to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addDecadesWithoutOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addDecadeWithoutOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subDecadesWithoutOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subDecadeWithoutOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addDecadesWithNoOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addDecadeWithNoOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subDecadesWithNoOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subDecadeWithNoOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addDecadesNoOverflow(int $value = 1) Add decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addDecadeNoOverflow() Add one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subDecadesNoOverflow(int $value = 1) Sub decades (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subDecadeNoOverflow() Sub one decade to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addQuarters(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addQuarter() Add one quarter to the instance (using date interval). + * @method CarbonImmutable subQuarters(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subQuarter() Sub one quarter to the instance (using date interval). + * @method CarbonImmutable addQuartersWithOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addQuarterWithOverflow() Add one quarter to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subQuartersWithOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable subQuarterWithOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly allowed. + * @method CarbonImmutable addQuartersWithoutOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addQuarterWithoutOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subQuartersWithoutOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subQuarterWithoutOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addQuartersWithNoOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addQuarterWithNoOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subQuartersWithNoOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subQuarterWithNoOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addQuartersNoOverflow(int $value = 1) Add quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addQuarterNoOverflow() Add one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subQuartersNoOverflow(int $value = 1) Sub quarters (the $value count passed in) to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable subQuarterNoOverflow() Sub one quarter to the instance (using date interval) with overflow explicitly forbidden. + * @method CarbonImmutable addWeeks(int $value = 1) Add weeks (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addWeek() Add one week to the instance (using date interval). + * @method CarbonImmutable subWeeks(int $value = 1) Sub weeks (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subWeek() Sub one week to the instance (using date interval). + * @method CarbonImmutable addWeekdays(int $value = 1) Add weekdays (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable addWeekday() Add one weekday to the instance (using date interval). + * @method CarbonImmutable subWeekdays(int $value = 1) Sub weekdays (the $value count passed in) to the instance (using date interval). + * @method CarbonImmutable subWeekday() Sub one weekday to the instance (using date interval). + * @method CarbonImmutable addRealMicros(int $value = 1) Add microseconds (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealMicro() Add one microsecond to the instance (using timestamp). + * @method CarbonImmutable subRealMicros(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealMicro() Sub one microsecond to the instance (using timestamp). + * @method CarbonPeriod microsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given. + * @method CarbonImmutable addRealMicroseconds(int $value = 1) Add microseconds (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealMicrosecond() Add one microsecond to the instance (using timestamp). + * @method CarbonImmutable subRealMicroseconds(int $value = 1) Sub microseconds (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealMicrosecond() Sub one microsecond to the instance (using timestamp). + * @method CarbonPeriod microsecondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each microsecond or every X microseconds if a factor is given. + * @method CarbonImmutable addRealMillis(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealMilli() Add one millisecond to the instance (using timestamp). + * @method CarbonImmutable subRealMillis(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealMilli() Sub one millisecond to the instance (using timestamp). + * @method CarbonPeriod millisUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given. + * @method CarbonImmutable addRealMilliseconds(int $value = 1) Add milliseconds (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealMillisecond() Add one millisecond to the instance (using timestamp). + * @method CarbonImmutable subRealMilliseconds(int $value = 1) Sub milliseconds (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealMillisecond() Sub one millisecond to the instance (using timestamp). + * @method CarbonPeriod millisecondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millisecond or every X milliseconds if a factor is given. + * @method CarbonImmutable addRealSeconds(int $value = 1) Add seconds (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealSecond() Add one second to the instance (using timestamp). + * @method CarbonImmutable subRealSeconds(int $value = 1) Sub seconds (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealSecond() Sub one second to the instance (using timestamp). + * @method CarbonPeriod secondsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each second or every X seconds if a factor is given. + * @method CarbonImmutable addRealMinutes(int $value = 1) Add minutes (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealMinute() Add one minute to the instance (using timestamp). + * @method CarbonImmutable subRealMinutes(int $value = 1) Sub minutes (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealMinute() Sub one minute to the instance (using timestamp). + * @method CarbonPeriod minutesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each minute or every X minutes if a factor is given. + * @method CarbonImmutable addRealHours(int $value = 1) Add hours (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealHour() Add one hour to the instance (using timestamp). + * @method CarbonImmutable subRealHours(int $value = 1) Sub hours (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealHour() Sub one hour to the instance (using timestamp). + * @method CarbonPeriod hoursUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each hour or every X hours if a factor is given. + * @method CarbonImmutable addRealDays(int $value = 1) Add days (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealDay() Add one day to the instance (using timestamp). + * @method CarbonImmutable subRealDays(int $value = 1) Sub days (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealDay() Sub one day to the instance (using timestamp). + * @method CarbonPeriod daysUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each day or every X days if a factor is given. + * @method CarbonImmutable addRealWeeks(int $value = 1) Add weeks (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealWeek() Add one week to the instance (using timestamp). + * @method CarbonImmutable subRealWeeks(int $value = 1) Sub weeks (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealWeek() Sub one week to the instance (using timestamp). + * @method CarbonPeriod weeksUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each week or every X weeks if a factor is given. + * @method CarbonImmutable addRealMonths(int $value = 1) Add months (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealMonth() Add one month to the instance (using timestamp). + * @method CarbonImmutable subRealMonths(int $value = 1) Sub months (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealMonth() Sub one month to the instance (using timestamp). + * @method CarbonPeriod monthsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each month or every X months if a factor is given. + * @method CarbonImmutable addRealQuarters(int $value = 1) Add quarters (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealQuarter() Add one quarter to the instance (using timestamp). + * @method CarbonImmutable subRealQuarters(int $value = 1) Sub quarters (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealQuarter() Sub one quarter to the instance (using timestamp). + * @method CarbonPeriod quartersUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each quarter or every X quarters if a factor is given. + * @method CarbonImmutable addRealYears(int $value = 1) Add years (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealYear() Add one year to the instance (using timestamp). + * @method CarbonImmutable subRealYears(int $value = 1) Sub years (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealYear() Sub one year to the instance (using timestamp). + * @method CarbonPeriod yearsUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each year or every X years if a factor is given. + * @method CarbonImmutable addRealDecades(int $value = 1) Add decades (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealDecade() Add one decade to the instance (using timestamp). + * @method CarbonImmutable subRealDecades(int $value = 1) Sub decades (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealDecade() Sub one decade to the instance (using timestamp). + * @method CarbonPeriod decadesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each decade or every X decades if a factor is given. + * @method CarbonImmutable addRealCenturies(int $value = 1) Add centuries (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealCentury() Add one century to the instance (using timestamp). + * @method CarbonImmutable subRealCenturies(int $value = 1) Sub centuries (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealCentury() Sub one century to the instance (using timestamp). + * @method CarbonPeriod centuriesUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each century or every X centuries if a factor is given. + * @method CarbonImmutable addRealMillennia(int $value = 1) Add millennia (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable addRealMillennium() Add one millennium to the instance (using timestamp). + * @method CarbonImmutable subRealMillennia(int $value = 1) Sub millennia (the $value count passed in) to the instance (using timestamp). + * @method CarbonImmutable subRealMillennium() Sub one millennium to the instance (using timestamp). + * @method CarbonPeriod millenniaUntil($endDate = null, int $factor = 1) Return an iterable period from current date to given end (string, DateTime or Carbon instance) for each millennium or every X millennia if a factor is given. + * @method CarbonImmutable roundYear(float $precision = 1, string $function = "round") Round the current instance year with given precision using the given function. + * @method CarbonImmutable roundYears(float $precision = 1, string $function = "round") Round the current instance year with given precision using the given function. + * @method CarbonImmutable floorYear(float $precision = 1) Truncate the current instance year with given precision. + * @method CarbonImmutable floorYears(float $precision = 1) Truncate the current instance year with given precision. + * @method CarbonImmutable ceilYear(float $precision = 1) Ceil the current instance year with given precision. + * @method CarbonImmutable ceilYears(float $precision = 1) Ceil the current instance year with given precision. + * @method CarbonImmutable roundMonth(float $precision = 1, string $function = "round") Round the current instance month with given precision using the given function. + * @method CarbonImmutable roundMonths(float $precision = 1, string $function = "round") Round the current instance month with given precision using the given function. + * @method CarbonImmutable floorMonth(float $precision = 1) Truncate the current instance month with given precision. + * @method CarbonImmutable floorMonths(float $precision = 1) Truncate the current instance month with given precision. + * @method CarbonImmutable ceilMonth(float $precision = 1) Ceil the current instance month with given precision. + * @method CarbonImmutable ceilMonths(float $precision = 1) Ceil the current instance month with given precision. + * @method CarbonImmutable roundDay(float $precision = 1, string $function = "round") Round the current instance day with given precision using the given function. + * @method CarbonImmutable roundDays(float $precision = 1, string $function = "round") Round the current instance day with given precision using the given function. + * @method CarbonImmutable floorDay(float $precision = 1) Truncate the current instance day with given precision. + * @method CarbonImmutable floorDays(float $precision = 1) Truncate the current instance day with given precision. + * @method CarbonImmutable ceilDay(float $precision = 1) Ceil the current instance day with given precision. + * @method CarbonImmutable ceilDays(float $precision = 1) Ceil the current instance day with given precision. + * @method CarbonImmutable roundHour(float $precision = 1, string $function = "round") Round the current instance hour with given precision using the given function. + * @method CarbonImmutable roundHours(float $precision = 1, string $function = "round") Round the current instance hour with given precision using the given function. + * @method CarbonImmutable floorHour(float $precision = 1) Truncate the current instance hour with given precision. + * @method CarbonImmutable floorHours(float $precision = 1) Truncate the current instance hour with given precision. + * @method CarbonImmutable ceilHour(float $precision = 1) Ceil the current instance hour with given precision. + * @method CarbonImmutable ceilHours(float $precision = 1) Ceil the current instance hour with given precision. + * @method CarbonImmutable roundMinute(float $precision = 1, string $function = "round") Round the current instance minute with given precision using the given function. + * @method CarbonImmutable roundMinutes(float $precision = 1, string $function = "round") Round the current instance minute with given precision using the given function. + * @method CarbonImmutable floorMinute(float $precision = 1) Truncate the current instance minute with given precision. + * @method CarbonImmutable floorMinutes(float $precision = 1) Truncate the current instance minute with given precision. + * @method CarbonImmutable ceilMinute(float $precision = 1) Ceil the current instance minute with given precision. + * @method CarbonImmutable ceilMinutes(float $precision = 1) Ceil the current instance minute with given precision. + * @method CarbonImmutable roundSecond(float $precision = 1, string $function = "round") Round the current instance second with given precision using the given function. + * @method CarbonImmutable roundSeconds(float $precision = 1, string $function = "round") Round the current instance second with given precision using the given function. + * @method CarbonImmutable floorSecond(float $precision = 1) Truncate the current instance second with given precision. + * @method CarbonImmutable floorSeconds(float $precision = 1) Truncate the current instance second with given precision. + * @method CarbonImmutable ceilSecond(float $precision = 1) Ceil the current instance second with given precision. + * @method CarbonImmutable ceilSeconds(float $precision = 1) Ceil the current instance second with given precision. + * @method CarbonImmutable roundMillennium(float $precision = 1, string $function = "round") Round the current instance millennium with given precision using the given function. + * @method CarbonImmutable roundMillennia(float $precision = 1, string $function = "round") Round the current instance millennium with given precision using the given function. + * @method CarbonImmutable floorMillennium(float $precision = 1) Truncate the current instance millennium with given precision. + * @method CarbonImmutable floorMillennia(float $precision = 1) Truncate the current instance millennium with given precision. + * @method CarbonImmutable ceilMillennium(float $precision = 1) Ceil the current instance millennium with given precision. + * @method CarbonImmutable ceilMillennia(float $precision = 1) Ceil the current instance millennium with given precision. + * @method CarbonImmutable roundCentury(float $precision = 1, string $function = "round") Round the current instance century with given precision using the given function. + * @method CarbonImmutable roundCenturies(float $precision = 1, string $function = "round") Round the current instance century with given precision using the given function. + * @method CarbonImmutable floorCentury(float $precision = 1) Truncate the current instance century with given precision. + * @method CarbonImmutable floorCenturies(float $precision = 1) Truncate the current instance century with given precision. + * @method CarbonImmutable ceilCentury(float $precision = 1) Ceil the current instance century with given precision. + * @method CarbonImmutable ceilCenturies(float $precision = 1) Ceil the current instance century with given precision. + * @method CarbonImmutable roundDecade(float $precision = 1, string $function = "round") Round the current instance decade with given precision using the given function. + * @method CarbonImmutable roundDecades(float $precision = 1, string $function = "round") Round the current instance decade with given precision using the given function. + * @method CarbonImmutable floorDecade(float $precision = 1) Truncate the current instance decade with given precision. + * @method CarbonImmutable floorDecades(float $precision = 1) Truncate the current instance decade with given precision. + * @method CarbonImmutable ceilDecade(float $precision = 1) Ceil the current instance decade with given precision. + * @method CarbonImmutable ceilDecades(float $precision = 1) Ceil the current instance decade with given precision. + * @method CarbonImmutable roundQuarter(float $precision = 1, string $function = "round") Round the current instance quarter with given precision using the given function. + * @method CarbonImmutable roundQuarters(float $precision = 1, string $function = "round") Round the current instance quarter with given precision using the given function. + * @method CarbonImmutable floorQuarter(float $precision = 1) Truncate the current instance quarter with given precision. + * @method CarbonImmutable floorQuarters(float $precision = 1) Truncate the current instance quarter with given precision. + * @method CarbonImmutable ceilQuarter(float $precision = 1) Ceil the current instance quarter with given precision. + * @method CarbonImmutable ceilQuarters(float $precision = 1) Ceil the current instance quarter with given precision. + * @method CarbonImmutable roundMillisecond(float $precision = 1, string $function = "round") Round the current instance millisecond with given precision using the given function. + * @method CarbonImmutable roundMilliseconds(float $precision = 1, string $function = "round") Round the current instance millisecond with given precision using the given function. + * @method CarbonImmutable floorMillisecond(float $precision = 1) Truncate the current instance millisecond with given precision. + * @method CarbonImmutable floorMilliseconds(float $precision = 1) Truncate the current instance millisecond with given precision. + * @method CarbonImmutable ceilMillisecond(float $precision = 1) Ceil the current instance millisecond with given precision. + * @method CarbonImmutable ceilMilliseconds(float $precision = 1) Ceil the current instance millisecond with given precision. + * @method CarbonImmutable roundMicrosecond(float $precision = 1, string $function = "round") Round the current instance microsecond with given precision using the given function. + * @method CarbonImmutable roundMicroseconds(float $precision = 1, string $function = "round") Round the current instance microsecond with given precision using the given function. + * @method CarbonImmutable floorMicrosecond(float $precision = 1) Truncate the current instance microsecond with given precision. + * @method CarbonImmutable floorMicroseconds(float $precision = 1) Truncate the current instance microsecond with given precision. + * @method CarbonImmutable ceilMicrosecond(float $precision = 1) Ceil the current instance microsecond with given precision. + * @method CarbonImmutable ceilMicroseconds(float $precision = 1) Ceil the current instance microsecond with given precision. + * @method string shortAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string longAbsoluteDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'Absolute' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string shortRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string longRelativeDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'Relative' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string shortRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string longRelativeToNowDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'RelativeToNow' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string shortRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (short format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method string longRelativeToOtherDiffForHumans(DateTimeInterface $other = null, int $parts = 1) Get the difference (long format, 'RelativeToOther' mode) in a human readable format in the current locale. ($other and $parts parameters can be swapped.) + * @method static static|false createFromFormat(string $format, string $time, DateTimeZone|string|false|null $timezone = null) Parse a string into a new CarbonImmutable object according to the specified format. + * @method static static __set_state(array $array) https://php.net/manual/en/datetime.set-state.php * * */ diff --git a/core/vendor/nesbot/carbon/src/Carbon/CarbonInterface.php b/core/vendor/nesbot/carbon/src/Carbon/CarbonInterface.php index 4b6ce76c5b..d63c4b8af2 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/CarbonInterface.php +++ b/core/vendor/nesbot/carbon/src/Carbon/CarbonInterface.php @@ -702,15 +702,6 @@ public function __get($name); */ public function __isset($name); - /** - * Returns the values to dump on serialize() called on. - * - * Only used by PHP >= 7.4. - * - * @return array - */ - public function __serialize(): array; - /** * Set a part of the Carbon object * @@ -754,15 +745,6 @@ public function __sleep(); */ public function __toString(); - /** - * Set locale if specified on unserialize() called. - * - * Only used by PHP >= 7.4. - * - * @return void - */ - public function __unserialize(array $data): void; - /** * Add given units or interval to the current instance. * @@ -1059,13 +1041,13 @@ public function copy(); * If $hour is not null then the default values for $minute and $second * will be 0. * - * @param int|null $year - * @param int|null $month - * @param int|null $day - * @param int|null $hour - * @param int|null $minute - * @param int|null $second - * @param DateTimeZone|string|null $tz + * @param DateTimeInterface|int|null $year + * @param int|null $month + * @param int|null $day + * @param int|null $hour + * @param int|null $minute + * @param int|null $second + * @param DateTimeZone|string|null $tz * * @throws InvalidFormatException * @@ -2771,12 +2753,35 @@ public function isLastOfMonth(); public function isLeapYear(); /** - * Determines if the instance is a long year + * Determines if the instance is a long year (using ISO 8601 year). + * + * @example + * ``` + * Carbon::parse('2015-01-01')->isLongIsoYear(); // true + * Carbon::parse('2016-01-01')->isLongIsoYear(); // true + * Carbon::parse('2016-01-03')->isLongIsoYear(); // false + * Carbon::parse('2019-12-29')->isLongIsoYear(); // false + * Carbon::parse('2019-12-30')->isLongIsoYear(); // true + * ``` + * + * @see https://en.wikipedia.org/wiki/ISO_8601#Week_dates + * + * @return bool + */ + public function isLongIsoYear(); + + /** + * Determines if the instance is a long year (using calendar year). + * + * ⚠️ This method completely ignores month and day to use the numeric year number, + * it's not correct if the exact date matters. For instance as `2019-12-30` is already + * in the first week of the 2020 year, if you want to know from this date if ISO week + * year 2020 is a long year, use `isLongIsoYear` instead. * * @example * ``` - * Carbon::parse('2015-01-01')->isLongYear(); // true - * Carbon::parse('2016-01-01')->isLongYear(); // false + * Carbon::create(2015)->isLongYear(); // true + * Carbon::create(2016)->isLongYear(); // false * ``` * * @see https://en.wikipedia.org/wiki/ISO_8601#Week_dates @@ -5115,12 +5120,15 @@ public function weeksInYear($dayOfWeek = null, $dayOfYear = null); * * /!\ Use this method for unit tests only. * + * @template T + * * @param DateTimeInterface|Closure|static|string|false|null $testNow real or mock Carbon instance - * @param Closure|null $callback + * @param Closure(): T $callback * * @return mixed + * @phpstan-return T */ - public static function withTestNow($testNow = null, $callback = null); + public static function withTestNow($testNow, $callback); /** * Create a Carbon instance for yesterday. diff --git a/core/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php b/core/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php index 796f9cdcd0..9eb49c028f 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php +++ b/core/vendor/nesbot/carbon/src/Carbon/CarbonInterval.php @@ -28,6 +28,7 @@ use Carbon\Traits\ToStringFormat; use Closure; use DateInterval; +use DateMalformedIntervalStringException; use DateTimeInterface; use DateTimeZone; use Exception; @@ -1004,8 +1005,14 @@ protected static function makeFromString(string $interval) return static::fromString($interval); } - /** @var static $interval */ - $interval = static::createFromDateString($interval); + // @codeCoverageIgnoreStart + try { + /** @var static $interval */ + $interval = static::createFromDateString($interval); + } catch (DateMalformedIntervalStringException $e) { + return null; + } + // @codeCoverageIgnoreEnd return !$interval || $interval->isEmpty() ? null : $interval; } diff --git a/core/vendor/nesbot/carbon/src/Carbon/Factory.php b/core/vendor/nesbot/carbon/src/Carbon/Factory.php index a4a496c899..d497535f77 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Factory.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Factory.php @@ -231,7 +231,7 @@ * You should rather use the ->settings() method. * Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants * are available for quarters, years, decade, centuries, millennia (singular and plural forms). - * @method mixed withTestNow($testNow = null, $callback = null) Temporarily sets a static date to be used within the callback. + * @method mixed withTestNow($testNow, $callback) Temporarily sets a static date to be used within the callback. * Using setTestNow to set the date, executing the callback, then * clearing the test instance. * /!\ Use this method for unit tests only. diff --git a/core/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php b/core/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php index 67088f21c9..715f5e7868 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php +++ b/core/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php @@ -229,7 +229,7 @@ * You should rather use the ->settings() method. * Or you can use method variants: addYearsWithOverflow/addYearsNoOverflow, same variants * are available for quarters, years, decade, centuries, millennia (singular and plural forms). - * @method mixed withTestNow($testNow = null, $callback = null) Temporarily sets a static date to be used within the callback. + * @method mixed withTestNow($testNow, $callback) Temporarily sets a static date to be used within the callback. * Using setTestNow to set the date, executing the callback, then * clearing the test instance. * /!\ Use this method for unit tests only. diff --git a/core/vendor/nesbot/carbon/src/Carbon/Lang/en_CH.php b/core/vendor/nesbot/carbon/src/Carbon/Lang/en_CH.php index e2dd81db54..10d9cd8f1a 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Lang/en_CH.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Lang/en_CH.php @@ -11,4 +11,12 @@ return array_replace_recursive(require __DIR__.'/en.php', [ 'first_day_of_week' => 1, + 'formats' => [ + 'LT' => 'HH:mm', + 'LTS' => 'HH:mm:ss', + 'L' => 'DD.MM.YYYY', + 'LL' => 'D MMMM YYYY', + 'LLL' => 'D MMMM YYYY HH:mm', + 'LLLL' => 'dddd D MMMM YYYY HH:mm', + ], ]); diff --git a/core/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php b/core/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php index d73dad54da..184f81080a 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php @@ -19,6 +19,7 @@ use Carbon\Exceptions\OutOfRangeException; use Carbon\Translator; use Closure; +use DateMalformedStringException; use DateTimeInterface; use DateTimeZone; use Exception; @@ -184,7 +185,13 @@ public static function rawParse($time = null, $tz = null) try { return new static($time, $tz); } catch (Exception $exception) { - $date = @static::now($tz)->change($time); + // @codeCoverageIgnoreStart + try { + $date = @static::now($tz)->change($time); + } catch (DateMalformedStringException $ignoredException) { + $date = null; + } + // @codeCoverageIgnoreEnd if (!$date) { throw new InvalidFormatException("Could not parse '$time': ".$exception->getMessage(), 0, $exception); @@ -634,6 +641,10 @@ public static function rawCreateFromFormat($format, $time, $tz = null) $time = preg_replace('/^(.*)(am|pm|AM|PM)(.*)$/U', '$1$3 $2', $time); } + if ($tz === false) { + $tz = null; + } + // First attempt to create an instance, so that error messages are based on the unmodified format. $date = self::createFromFormatAndTimezone($format, $time, $tz); $lastErrors = parent::getLastErrors(); diff --git a/core/vendor/nesbot/carbon/src/Carbon/Traits/Options.php b/core/vendor/nesbot/carbon/src/Carbon/Traits/Options.php index 9bb3071f57..6f021942ac 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Traits/Options.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Traits/Options.php @@ -22,7 +22,7 @@ * * Depends on the following methods: * - * @method \Carbon\Carbon|\Carbon\CarbonImmutable shiftTimezone($timezone) Set the timezone + * @method static shiftTimezone($timezone) Set the timezone */ trait Options { diff --git a/core/vendor/nesbot/carbon/src/Carbon/Traits/Test.php b/core/vendor/nesbot/carbon/src/Carbon/Traits/Test.php index e0c9e80683..ffd01bd4e5 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Traits/Test.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Traits/Test.php @@ -119,12 +119,15 @@ public static function setTestNowAndTimezone($testNow = null, $tz = null) * * /!\ Use this method for unit tests only. * + * @template T + * * @param DateTimeInterface|Closure|static|string|false|null $testNow real or mock Carbon instance - * @param Closure|null $callback + * @param Closure(): T $callback * * @return mixed + * @phpstan-return T */ - public static function withTestNow($testNow = null, $callback = null) + public static function withTestNow($testNow, $callback) { static::setTestNow($testNow); diff --git a/core/vendor/nesbot/carbon/src/Carbon/Traits/Units.php b/core/vendor/nesbot/carbon/src/Carbon/Traits/Units.php index f4f797d9b3..7aadd65bde 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Traits/Units.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Traits/Units.php @@ -17,6 +17,7 @@ use Carbon\Exceptions\UnitException; use Closure; use DateInterval; +use DateMalformedStringException; use ReturnTypeWillChange; /** @@ -304,12 +305,17 @@ public function addUnit($unit, $value = 1, $overflow = null) $unit = 'second'; $value = $second; } - $date = $date->modify("$value $unit"); - if (isset($timeString)) { - $date = $date->setTimeFromTimeString($timeString); - } elseif (isset($canOverflow, $day) && $canOverflow && $day !== $date->day) { - $date = $date->modify('last day of previous month'); + try { + $date = $date->modify("$value $unit"); + + if (isset($timeString)) { + $date = $date->setTimeFromTimeString($timeString); + } elseif (isset($canOverflow, $day) && $canOverflow && $day !== $date->day) { + $date = $date->modify('last day of previous month'); + } + } catch (DateMalformedStringException $ignoredException) { // @codeCoverageIgnore + $date = null; // @codeCoverageIgnore } if (!$date) { diff --git a/core/vendor/predis/predis/src/Command/Redis/BITCOUNT.php b/core/vendor/predis/predis/src/Command/Redis/BITCOUNT.php new file mode 100644 index 0000000000..859daf4a67 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/BITCOUNT.php @@ -0,0 +1,34 @@ +parseNewResponseFormat($lines); + } else { + return $this->parseOldResponseFormat($lines); + } + } + + /** + * {@inheritdoc} + */ + public function parseNewResponseFormat($lines) + { + $info = []; + $current = null; + + foreach ($lines as $row) { + if ($row === '') { + continue; + } + + if (preg_match('/^# (\w+)$/', $row, $matches)) { + $info[$matches[1]] = []; + $current = &$info[$matches[1]]; + continue; + } + + [$k, $v] = $this->parseRow($row); + $current[$k] = $v; + } + + return $info; + } + + /** + * {@inheritdoc} + */ + public function parseOldResponseFormat($lines) + { + $info = []; + + foreach ($lines as $row) { + if (strpos($row, ':') === false) { + continue; + } + + [$k, $v] = $this->parseRow($row); + $info[$k] = $v; + } + + return $info; + } + + /** + * Parses a single row of the response and returns the key-value pair. + * + * @param string $row Single row of the response. + * + * @return array + */ + protected function parseRow($row) + { + [$k, $v] = explode(':', $row, 2); + + if (preg_match('/^db\d+$/', $k)) { + $v = $this->parseDatabaseStats($v); + } + + return [$k, $v]; + } + + /** + * Extracts the statistics of each logical DB from the string buffer. + * + * @param string $str Response buffer. + * + * @return array + */ + protected function parseDatabaseStats($str) + { + $db = []; + + foreach (explode(',', $str) as $dbvar) { + [$dbvk, $dbvv] = explode('=', $dbvar); + $db[trim($dbvk)] = $dbvv; + } + + return $db; + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/LPUSH.php b/core/vendor/predis/predis/src/Command/Redis/LPUSH.php new file mode 100644 index 0000000000..f3e0f9e73f --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/LPUSH.php @@ -0,0 +1,39 @@ +setAggregate($arguments); + $arguments = $this->getArguments(); + + $this->setWeights($arguments); + $arguments = $this->getArguments(); + + $this->setKeys($arguments); + } +} diff --git a/core/vendor/psr/container/.gitignore b/core/vendor/psr/container/.gitignore new file mode 100644 index 0000000000..b2395aa055 --- /dev/null +++ b/core/vendor/psr/container/.gitignore @@ -0,0 +1,3 @@ +composer.lock +composer.phar +/vendor/ diff --git a/core/vendor/psr/container/composer.json b/core/vendor/psr/container/composer.json index 017f41ea69..baf6cd1a03 100644 --- a/core/vendor/psr/container/composer.json +++ b/core/vendor/psr/container/composer.json @@ -18,5 +18,10 @@ "psr-4": { "Psr\\Container\\": "src/" } + }, + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } } } diff --git a/core/vendor/psr/container/src/ContainerInterface.php b/core/vendor/psr/container/src/ContainerInterface.php index cf8e7fd330..b2cad40153 100644 --- a/core/vendor/psr/container/src/ContainerInterface.php +++ b/core/vendor/psr/container/src/ContainerInterface.php @@ -32,5 +32,5 @@ public function get(string $id); * * @return bool */ - public function has(string $id); + public function has(string $id): bool; } diff --git a/core/vendor/psr/event-dispatcher/.gitignore b/core/vendor/psr/event-dispatcher/.gitignore new file mode 100644 index 0000000000..3a9875b460 --- /dev/null +++ b/core/vendor/psr/event-dispatcher/.gitignore @@ -0,0 +1,2 @@ +/vendor/ +composer.lock diff --git a/core/vendor/psr/log/Psr/Log/AbstractLogger.php b/core/vendor/psr/log/Psr/Log/AbstractLogger.php deleted file mode 100644 index e02f9daf3d..0000000000 --- a/core/vendor/psr/log/Psr/Log/AbstractLogger.php +++ /dev/null @@ -1,128 +0,0 @@ -log(LogLevel::EMERGENCY, $message, $context); - } - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function alert($message, array $context = array()) - { - $this->log(LogLevel::ALERT, $message, $context); - } - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function critical($message, array $context = array()) - { - $this->log(LogLevel::CRITICAL, $message, $context); - } - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function error($message, array $context = array()) - { - $this->log(LogLevel::ERROR, $message, $context); - } - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function warning($message, array $context = array()) - { - $this->log(LogLevel::WARNING, $message, $context); - } - - /** - * Normal but significant events. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function notice($message, array $context = array()) - { - $this->log(LogLevel::NOTICE, $message, $context); - } - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function info($message, array $context = array()) - { - $this->log(LogLevel::INFO, $message, $context); - } - - /** - * Detailed debug information. - * - * @param string $message - * @param mixed[] $context - * - * @return void - */ - public function debug($message, array $context = array()) - { - $this->log(LogLevel::DEBUG, $message, $context); - } -} diff --git a/core/vendor/psr/log/Psr/Log/Test/DummyTest.php b/core/vendor/psr/log/Psr/Log/Test/DummyTest.php deleted file mode 100644 index 9638c11018..0000000000 --- a/core/vendor/psr/log/Psr/Log/Test/DummyTest.php +++ /dev/null @@ -1,18 +0,0 @@ - ". - * - * Example ->error('Foo') would yield "error Foo". - * - * @return string[] - */ - abstract public function getLogs(); - - public function testImplements() - { - $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger()); - } - - /** - * @dataProvider provideLevelsAndMessages - */ - public function testLogsAtAllLevels($level, $message) - { - $logger = $this->getLogger(); - $logger->{$level}($message, array('user' => 'Bob')); - $logger->log($level, $message, array('user' => 'Bob')); - - $expected = array( - $level.' message of level '.$level.' with context: Bob', - $level.' message of level '.$level.' with context: Bob', - ); - $this->assertEquals($expected, $this->getLogs()); - } - - public function provideLevelsAndMessages() - { - return array( - LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'), - LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'), - LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'), - LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'), - LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'), - LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'), - LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'), - LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'), - ); - } - - /** - * @expectedException \Psr\Log\InvalidArgumentException - */ - public function testThrowsOnInvalidLevel() - { - $logger = $this->getLogger(); - $logger->log('invalid level', 'Foo'); - } - - public function testContextReplacement() - { - $logger = $this->getLogger(); - $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar')); - - $expected = array('info {Message {nothing} Bob Bar a}'); - $this->assertEquals($expected, $this->getLogs()); - } - - public function testObjectCastToString() - { - if (method_exists($this, 'createPartialMock')) { - $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString')); - } else { - $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString')); - } - $dummy->expects($this->once()) - ->method('__toString') - ->will($this->returnValue('DUMMY')); - - $this->getLogger()->warning($dummy); - - $expected = array('warning DUMMY'); - $this->assertEquals($expected, $this->getLogs()); - } - - public function testContextCanContainAnything() - { - $closed = fopen('php://memory', 'r'); - fclose($closed); - - $context = array( - 'bool' => true, - 'null' => null, - 'string' => 'Foo', - 'int' => 0, - 'float' => 0.5, - 'nested' => array('with object' => new DummyTest), - 'object' => new \DateTime, - 'resource' => fopen('php://memory', 'r'), - 'closed' => $closed, - ); - - $this->getLogger()->warning('Crazy context data', $context); - - $expected = array('warning Crazy context data'); - $this->assertEquals($expected, $this->getLogs()); - } - - public function testContextExceptionKeyCanBeExceptionOrOtherValues() - { - $logger = $this->getLogger(); - $logger->warning('Random message', array('exception' => 'oops')); - $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail'))); - - $expected = array( - 'warning Random message', - 'critical Uncaught Exception!' - ); - $this->assertEquals($expected, $this->getLogs()); - } -} diff --git a/core/vendor/psr/log/Psr/Log/Test/TestLogger.php b/core/vendor/psr/log/Psr/Log/Test/TestLogger.php deleted file mode 100644 index 1be3230496..0000000000 --- a/core/vendor/psr/log/Psr/Log/Test/TestLogger.php +++ /dev/null @@ -1,147 +0,0 @@ - $level, - 'message' => $message, - 'context' => $context, - ]; - - $this->recordsByLevel[$record['level']][] = $record; - $this->records[] = $record; - } - - public function hasRecords($level) - { - return isset($this->recordsByLevel[$level]); - } - - public function hasRecord($record, $level) - { - if (is_string($record)) { - $record = ['message' => $record]; - } - return $this->hasRecordThatPasses(function ($rec) use ($record) { - if ($rec['message'] !== $record['message']) { - return false; - } - if (isset($record['context']) && $rec['context'] !== $record['context']) { - return false; - } - return true; - }, $level); - } - - public function hasRecordThatContains($message, $level) - { - return $this->hasRecordThatPasses(function ($rec) use ($message) { - return strpos($rec['message'], $message) !== false; - }, $level); - } - - public function hasRecordThatMatches($regex, $level) - { - return $this->hasRecordThatPasses(function ($rec) use ($regex) { - return preg_match($regex, $rec['message']) > 0; - }, $level); - } - - public function hasRecordThatPasses(callable $predicate, $level) - { - if (!isset($this->recordsByLevel[$level])) { - return false; - } - foreach ($this->recordsByLevel[$level] as $i => $rec) { - if (call_user_func($predicate, $rec, $i)) { - return true; - } - } - return false; - } - - public function __call($method, $args) - { - if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) { - $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3]; - $level = strtolower($matches[2]); - if (method_exists($this, $genericMethod)) { - $args[] = $level; - return call_user_func_array([$this, $genericMethod], $args); - } - } - throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()'); - } - - public function reset() - { - $this->records = []; - $this->recordsByLevel = []; - } -} diff --git a/core/vendor/psr/log/src/AbstractLogger.php b/core/vendor/psr/log/src/AbstractLogger.php new file mode 100644 index 0000000000..d60a091aff --- /dev/null +++ b/core/vendor/psr/log/src/AbstractLogger.php @@ -0,0 +1,15 @@ +=5.3.0" + "php": ">=8.0.0" }, "autoload": { "psr-4": { @@ -19,7 +19,7 @@ }, "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } } } diff --git a/core/vendor/psr/simple-cache/src/CacheException.php b/core/vendor/psr/simple-cache/src/CacheException.php index eba53815c0..f61b24c2b4 100644 --- a/core/vendor/psr/simple-cache/src/CacheException.php +++ b/core/vendor/psr/simple-cache/src/CacheException.php @@ -5,6 +5,6 @@ /** * Interface used for all types of exceptions thrown by the implementing library. */ -interface CacheException +interface CacheException extends \Throwable { } diff --git a/core/vendor/psr/simple-cache/src/CacheInterface.php b/core/vendor/psr/simple-cache/src/CacheInterface.php index 99e8d95748..671e340c57 100644 --- a/core/vendor/psr/simple-cache/src/CacheInterface.php +++ b/core/vendor/psr/simple-cache/src/CacheInterface.php @@ -15,7 +15,7 @@ interface CacheInterface * @throws \Psr\SimpleCache\InvalidArgumentException * MUST be thrown if the $key string is not a legal value. */ - public function get($key, $default = null); + public function get(string $key, mixed $default = null): mixed; /** * Persists data in the cache, uniquely referenced by a key with an optional expiration TTL time. @@ -31,7 +31,7 @@ public function get($key, $default = null); * @throws \Psr\SimpleCache\InvalidArgumentException * MUST be thrown if the $key string is not a legal value. */ - public function set($key, $value, $ttl = null); + public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null): bool; /** * Delete an item from the cache by its unique key. @@ -43,28 +43,28 @@ public function set($key, $value, $ttl = null); * @throws \Psr\SimpleCache\InvalidArgumentException * MUST be thrown if the $key string is not a legal value. */ - public function delete($key); + public function delete(string $key): bool; /** * Wipes clean the entire cache's keys. * * @return bool True on success and false on failure. */ - public function clear(); + public function clear(): bool; /** * Obtains multiple cache items by their unique keys. * - * @param iterable $keys A list of keys that can obtained in a single operation. - * @param mixed $default Default value to return for keys that do not exist. + * @param iterable $keys A list of keys that can be obtained in a single operation. + * @param mixed $default Default value to return for keys that do not exist. * - * @return iterable A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value. + * @return iterable A list of key => value pairs. Cache keys that do not exist or are stale will have $default as value. * * @throws \Psr\SimpleCache\InvalidArgumentException * MUST be thrown if $keys is neither an array nor a Traversable, * or if any of the $keys are not a legal value. */ - public function getMultiple($keys, $default = null); + public function getMultiple(iterable $keys, mixed $default = null): iterable; /** * Persists a set of key => value pairs in the cache, with an optional TTL. @@ -80,12 +80,12 @@ public function getMultiple($keys, $default = null); * MUST be thrown if $values is neither an array nor a Traversable, * or if any of the $values are not a legal value. */ - public function setMultiple($values, $ttl = null); + public function setMultiple(iterable $values, null|int|\DateInterval $ttl = null): bool; /** * Deletes multiple cache items in a single operation. * - * @param iterable $keys A list of string-based keys to be deleted. + * @param iterable $keys A list of string-based keys to be deleted. * * @return bool True if the items were successfully removed. False if there was an error. * @@ -93,7 +93,7 @@ public function setMultiple($values, $ttl = null); * MUST be thrown if $keys is neither an array nor a Traversable, * or if any of the $keys are not a legal value. */ - public function deleteMultiple($keys); + public function deleteMultiple(iterable $keys): bool; /** * Determines whether an item is present in the cache. @@ -110,5 +110,5 @@ public function deleteMultiple($keys); * @throws \Psr\SimpleCache\InvalidArgumentException * MUST be thrown if the $key string is not a legal value. */ - public function has($key); + public function has(string $key): bool; } diff --git a/core/vendor/seld/phar-utils/.gitignore b/core/vendor/seld/phar-utils/.gitignore new file mode 100644 index 0000000000..42cd73d957 --- /dev/null +++ b/core/vendor/seld/phar-utils/.gitignore @@ -0,0 +1 @@ +/vendor/ \ No newline at end of file diff --git a/core/vendor/seld/signal-handler/.gitignore b/core/vendor/seld/signal-handler/.gitignore new file mode 100644 index 0000000000..d3e95a5a50 --- /dev/null +++ b/core/vendor/seld/signal-handler/.gitignore @@ -0,0 +1,5 @@ +/vendor +phpunit.xml +.php_cs.cache +composer.lock +.phpunit.result.cache \ No newline at end of file diff --git a/core/vendor/symfony/console/Application.php b/core/vendor/symfony/console/Application.php index 41548a3e9d..b7aaa6a29e 100644 --- a/core/vendor/symfony/console/Application.php +++ b/core/vendor/symfony/console/Application.php @@ -105,11 +105,14 @@ public function __construct(string $name = 'UNKNOWN', string $version = 'UNKNOWN /** * @final */ - public function setDispatcher(EventDispatcherInterface $dispatcher) + public function setDispatcher(EventDispatcherInterface $dispatcher): void { $this->dispatcher = $dispatcher; } + /** + * @return void + */ public function setCommandLoader(CommandLoaderInterface $commandLoader) { $this->commandLoader = $commandLoader; @@ -118,12 +121,15 @@ public function setCommandLoader(CommandLoaderInterface $commandLoader) public function getSignalRegistry(): SignalRegistry { if (!$this->signalRegistry) { - throw new RuntimeException('Signals are not supported. Make sure that the `pcntl` extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.'); + throw new RuntimeException('Signals are not supported. Make sure that the "pcntl" extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.'); } return $this->signalRegistry; } + /** + * @return void + */ public function setSignalsToDispatchEvent(int ...$signalsToDispatchEvent) { $this->signalsToDispatchEvent = $signalsToDispatchEvent; @@ -317,10 +323,16 @@ public function doRun(InputInterface $input, OutputInterface $output) return $exitCode; } + /** + * @return void + */ public function reset() { } + /** + * @return void + */ public function setHelperSet(HelperSet $helperSet) { $this->helperSet = $helperSet; @@ -334,6 +346,9 @@ public function getHelperSet(): HelperSet return $this->helperSet ??= $this->getDefaultHelperSet(); } + /** + * @return void + */ public function setDefinition(InputDefinition $definition) { $this->definition = $definition; @@ -404,6 +419,8 @@ public function areExceptionsCaught(): bool /** * Sets whether to catch exceptions or not during commands execution. + * + * @return void */ public function setCatchExceptions(bool $boolean) { @@ -420,6 +437,8 @@ public function isAutoExitEnabled(): bool /** * Sets whether to automatically exit after a command execution or not. + * + * @return void */ public function setAutoExit(bool $boolean) { @@ -436,7 +455,9 @@ public function getName(): string /** * Sets the application name. - **/ + * + * @return void + */ public function setName(string $name) { $this->name = $name; @@ -452,6 +473,8 @@ public function getVersion(): string /** * Sets the application version. + * + * @return void */ public function setVersion(string $version) { @@ -490,6 +513,8 @@ public function register(string $name): Command * If a Command is not enabled it will not be added. * * @param Command[] $commands An array of commands + * + * @return void */ public function addCommands(array $commands) { @@ -687,9 +712,7 @@ public function find(string $name) if ($alternatives = $this->findAlternatives($name, $allCommands)) { // remove hidden commands - $alternatives = array_filter($alternatives, function ($name) { - return !$this->get($name)->isHidden(); - }); + $alternatives = array_filter($alternatives, fn ($name) => !$this->get($name)->isHidden()); if (1 == \count($alternatives)) { $message .= "\n\nDid you mean this?\n "; @@ -840,9 +863,7 @@ protected function doRenderThrowable(\Throwable $e, OutputInterface $output): vo } if (str_contains($message, "@anonymous\0")) { - $message = preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) { - return class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0]; - }, $message); + $message = preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', fn ($m) => class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0], $message); } $width = $this->terminal->getWidth() ? $this->terminal->getWidth() - 1 : \PHP_INT_MAX; @@ -903,6 +924,8 @@ protected function doRenderThrowable(\Throwable $e, OutputInterface $output): vo /** * Configures the input and output instances based on the user arguments and options. + * + * @return void */ protected function configureIO(InputInterface $input, OutputInterface $output) { @@ -977,44 +1000,62 @@ protected function doRunCommand(Command $command, InputInterface $input, OutputI } } - if ($this->signalsToDispatchEvent) { - $commandSignals = $command instanceof SignalableCommandInterface ? $command->getSubscribedSignals() : []; - - if ($commandSignals || null !== $this->dispatcher) { - if (!$this->signalRegistry) { - throw new RuntimeException('Unable to subscribe to signal events. Make sure that the `pcntl` extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.'); - } + $commandSignals = $command instanceof SignalableCommandInterface ? $command->getSubscribedSignals() : []; + if ($commandSignals || $this->dispatcher && $this->signalsToDispatchEvent) { + if (!$this->signalRegistry) { + throw new RuntimeException('Unable to subscribe to signal events. Make sure that the "pcntl" extension is installed and that "pcntl_*" functions are not disabled by your php.ini\'s "disable_functions" directive.'); + } - if (Terminal::hasSttyAvailable()) { - $sttyMode = shell_exec('stty -g'); + if (Terminal::hasSttyAvailable()) { + $sttyMode = shell_exec('stty -g'); - foreach ([\SIGINT, \SIGTERM] as $signal) { - $this->signalRegistry->register($signal, static function () use ($sttyMode) { - shell_exec('stty '.$sttyMode); - }); - } + foreach ([\SIGINT, \SIGTERM] as $signal) { + $this->signalRegistry->register($signal, static fn () => shell_exec('stty '.$sttyMode)); } } - if (null !== $this->dispatcher) { + if ($this->dispatcher) { + // We register application signals, so that we can dispatch the event foreach ($this->signalsToDispatchEvent as $signal) { $event = new ConsoleSignalEvent($command, $input, $output, $signal); - $this->signalRegistry->register($signal, function ($signal, $hasNext) use ($event) { + $this->signalRegistry->register($signal, function ($signal) use ($event, $command, $commandSignals) { $this->dispatcher->dispatch($event, ConsoleEvents::SIGNAL); - - // No more handlers, we try to simulate PHP default behavior - if (!$hasNext) { - if (!\in_array($signal, [\SIGUSR1, \SIGUSR2], true)) { - exit(0); + $exitCode = $event->getExitCode(); + + // If the command is signalable, we call the handleSignal() method + if (\in_array($signal, $commandSignals, true)) { + $exitCode = $command->handleSignal($signal, $exitCode); + // BC layer for Symfony <= 5 + if (null === $exitCode) { + trigger_deprecation('symfony/console', '6.3', 'Not returning an exit code from "%s::handleSignal()" is deprecated, return "false" to keep the command running or "0" to exit successfully.', get_debug_type($command)); + $exitCode = 0; } } + + if (false !== $exitCode) { + exit($exitCode); + } }); } + + // then we register command signals, but not if already handled after the dispatcher + $commandSignals = array_diff($commandSignals, $this->signalsToDispatchEvent); } foreach ($commandSignals as $signal) { - $this->signalRegistry->register($signal, [$command, 'handleSignal']); + $this->signalRegistry->register($signal, function (int $signal) use ($command): void { + $exitCode = $command->handleSignal($signal); + // BC layer for Symfony <= 5 + if (null === $exitCode) { + trigger_deprecation('symfony/console', '6.3', 'Not returning an exit code from "%s::handleSignal()" is deprecated, return "false" to keep the command running or "0" to exit successfully.', get_debug_type($command)); + $exitCode = 0; + } + + if (false !== $exitCode) { + exit($exitCode); + } + }); } } @@ -1170,7 +1211,7 @@ private function findAlternatives(string $name, iterable $collection): array } } - $alternatives = array_filter($alternatives, function ($lev) use ($threshold) { return $lev < 2 * $threshold; }); + $alternatives = array_filter($alternatives, fn ($lev) => $lev < 2 * $threshold); ksort($alternatives, \SORT_NATURAL | \SORT_FLAG_CASE); return array_keys($alternatives); @@ -1261,7 +1302,7 @@ private function extractAllNamespaces(string $name): array return $namespaces; } - private function init() + private function init(): void { if ($this->initialized) { return; diff --git a/core/vendor/symfony/console/CHANGELOG.md b/core/vendor/symfony/console/CHANGELOG.md index 61c36b0e06..3428a57de3 100644 --- a/core/vendor/symfony/console/CHANGELOG.md +++ b/core/vendor/symfony/console/CHANGELOG.md @@ -1,6 +1,13 @@ CHANGELOG ========= +6.3 +--- + + * Add support for choosing exit code while handling signal, or to not exit at all + * Add `ProgressBar::setPlaceholderFormatter` to set a placeholder attached to a instance, instead of being global. + * Add `ReStructuredTextDescriptor` + 6.2 --- diff --git a/core/vendor/symfony/console/Command/Command.php b/core/vendor/symfony/console/Command/Command.php index 1e3c1a5a2b..704b112d1a 100644 --- a/core/vendor/symfony/console/Command/Command.php +++ b/core/vendor/symfony/console/Command/Command.php @@ -141,12 +141,17 @@ public function __construct(string $name = null) * Ignores validation errors. * * This is mainly useful for the help command. + * + * @return void */ public function ignoreValidationErrors() { $this->ignoreValidationErrors = true; } + /** + * @return void + */ public function setApplication(Application $application = null) { if (1 > \func_num_args()) { @@ -162,6 +167,9 @@ public function setApplication(Application $application = null) $this->fullDefinition = null; } + /** + * @return void + */ public function setHelperSet(HelperSet $helperSet) { $this->helperSet = $helperSet; @@ -198,6 +206,8 @@ public function isEnabled() /** * Configures the current command. + * + * @return void */ protected function configure() { @@ -228,6 +238,8 @@ protected function execute(InputInterface $input, OutputInterface $output) * This method is executed before the InputDefinition is validated. * This means that this is the only place where the command can * interactively ask for values of missing required arguments. + * + * @return void */ protected function interact(InputInterface $input, OutputInterface $output) { @@ -242,6 +254,8 @@ protected function interact(InputInterface $input, OutputInterface $output) * * @see InputInterface::bind() * @see InputInterface::validate() + * + * @return void */ protected function initialize(InputInterface $input, OutputInterface $output) { @@ -378,7 +392,7 @@ public function setCode(callable $code): static * * @internal */ - public function mergeApplicationDefinition(bool $mergeArgs = true) + public function mergeApplicationDefinition(bool $mergeArgs = true): void { if (null === $this->application) { return; @@ -702,7 +716,7 @@ public function getHelper(string $name): mixed * * @throws InvalidArgumentException When the name is invalid */ - private function validateName(string $name) + private function validateName(string $name): void { if (!preg_match('/^[^\:]++(\:[^\:]++)*$/', $name)) { throw new InvalidArgumentException(sprintf('Command name "%s" is invalid.', $name)); diff --git a/core/vendor/symfony/console/Command/CompleteCommand.php b/core/vendor/symfony/console/Command/CompleteCommand.php index e65b334ce8..058578d8b4 100644 --- a/core/vendor/symfony/console/Command/CompleteCommand.php +++ b/core/vendor/symfony/console/Command/CompleteCommand.php @@ -74,7 +74,7 @@ protected function configure(): void ; } - protected function initialize(InputInterface $input, OutputInterface $output) + protected function initialize(InputInterface $input, OutputInterface $output): void { $this->isDebug = filter_var(getenv('SYMFONY_COMPLETION_DEBUG'), \FILTER_VALIDATE_BOOL); } @@ -134,12 +134,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int $completionInput->bind($command->getDefinition()); if (CompletionInput::TYPE_OPTION_NAME === $completionInput->getCompletionType()) { - $this->log(' Completing option names for the '.\get_class($command instanceof LazyCommand ? $command->getCommand() : $command).' command.'); + $this->log(' Completing option names for the '.($command instanceof LazyCommand ? $command->getCommand() : $command)::class.' command.'); $suggestions->suggestOptions($command->getDefinition()->getOptions()); } else { $this->log([ - ' Completing using the '.\get_class($command instanceof LazyCommand ? $command->getCommand() : $command).' class.', + ' Completing using the '.($command instanceof LazyCommand ? $command->getCommand() : $command)::class.' class.', ' Completing '.$completionInput->getCompletionType().' for '.$completionInput->getCompletionName().'', ]); if (null !== $compval = $completionInput->getCompletionValue()) { @@ -155,7 +155,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $this->log('Suggestions:'); if ($options = $suggestions->getOptionSuggestions()) { - $this->log(' --'.implode(' --', array_map(function ($o) { return $o->getName(); }, $options))); + $this->log(' --'.implode(' --', array_map(fn ($o) => $o->getName(), $options))); } elseif ($values = $suggestions->getValueSuggestions()) { $this->log(' '.implode(' ', $values)); } else { @@ -173,10 +173,10 @@ protected function execute(InputInterface $input, OutputInterface $output): int throw $e; } - return self::FAILURE; + return 2; } - return self::SUCCESS; + return 0; } private function createCompletionInput(InputInterface $input): CompletionInput diff --git a/core/vendor/symfony/console/Command/DumpCompletionCommand.php b/core/vendor/symfony/console/Command/DumpCompletionCommand.php index 10280f73ab..51b613a140 100644 --- a/core/vendor/symfony/console/Command/DumpCompletionCommand.php +++ b/core/vendor/symfony/console/Command/DumpCompletionCommand.php @@ -39,7 +39,7 @@ final class DumpCompletionCommand extends Command private array $supportedShells; - protected function configure() + protected function configure(): void { $fullCommand = $_SERVER['PHP_SELF']; $commandName = basename($fullCommand); @@ -96,7 +96,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int if ($input->getOption('debug')) { $this->tailDebugLog($commandName, $output); - return self::SUCCESS; + return 0; } $shell = $input->getArgument('shell') ?? self::guessShell(); @@ -113,12 +113,12 @@ protected function execute(InputInterface $input, OutputInterface $output): int $output->writeln(sprintf('Shell not detected, Symfony shell completion only supports "%s").', implode('", "', $supportedShells))); } - return self::INVALID; + return 2; } $output->write(str_replace(['{{ COMMAND_NAME }}', '{{ VERSION }}'], [$commandName, CompleteCommand::COMPLETION_API_VERSION], file_get_contents($completionFile))); - return self::SUCCESS; + return 0; } private static function guessShell(): string diff --git a/core/vendor/symfony/console/Command/HelpCommand.php b/core/vendor/symfony/console/Command/HelpCommand.php index d4134e170b..e6447b0506 100644 --- a/core/vendor/symfony/console/Command/HelpCommand.php +++ b/core/vendor/symfony/console/Command/HelpCommand.php @@ -27,6 +27,9 @@ class HelpCommand extends Command { private Command $command; + /** + * @return void + */ protected function configure() { $this->ignoreValidationErrors(); @@ -34,12 +37,8 @@ protected function configure() $this ->setName('help') ->setDefinition([ - new InputArgument('command_name', InputArgument::OPTIONAL, 'The command name', 'help', function () { - return array_keys((new ApplicationDescription($this->getApplication()))->getCommands()); - }), - new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt', function () { - return (new DescriptorHelper())->getFormats(); - }), + new InputArgument('command_name', InputArgument::OPTIONAL, 'The command name', 'help', fn () => array_keys((new ApplicationDescription($this->getApplication()))->getCommands())), + new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt', fn () => (new DescriptorHelper())->getFormats()), new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command help'), ]) ->setDescription('Display help for a command') @@ -58,6 +57,9 @@ protected function configure() ; } + /** + * @return void + */ public function setCommand(Command $command) { $this->command = $command; diff --git a/core/vendor/symfony/console/Command/ListCommand.php b/core/vendor/symfony/console/Command/ListCommand.php index cab88b4392..5850c3d7b8 100644 --- a/core/vendor/symfony/console/Command/ListCommand.php +++ b/core/vendor/symfony/console/Command/ListCommand.php @@ -25,18 +25,17 @@ */ class ListCommand extends Command { + /** + * @return void + */ protected function configure() { $this ->setName('list') ->setDefinition([ - new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name', null, function () { - return array_keys((new ApplicationDescription($this->getApplication()))->getNamespaces()); - }), + new InputArgument('namespace', InputArgument::OPTIONAL, 'The namespace name', null, fn () => array_keys((new ApplicationDescription($this->getApplication()))->getNamespaces())), new InputOption('raw', null, InputOption::VALUE_NONE, 'To output raw command list'), - new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt', function () { - return (new DescriptorHelper())->getFormats(); - }), + new InputOption('format', null, InputOption::VALUE_REQUIRED, 'The output format (txt, xml, json, or md)', 'txt', fn () => (new DescriptorHelper())->getFormats()), new InputOption('short', null, InputOption::VALUE_NONE, 'To skip describing commands\' arguments'), ]) ->setDescription('List commands') diff --git a/core/vendor/symfony/console/Command/LockableTrait.php b/core/vendor/symfony/console/Command/LockableTrait.php index 67923a9e81..c1006a65c0 100644 --- a/core/vendor/symfony/console/Command/LockableTrait.php +++ b/core/vendor/symfony/console/Command/LockableTrait.php @@ -32,7 +32,7 @@ trait LockableTrait private function lock(string $name = null, bool $blocking = false): bool { if (!class_exists(SemaphoreStore::class)) { - throw new LogicException('To enable the locking feature you must install the symfony/lock component.'); + throw new LogicException('To enable the locking feature you must install the symfony/lock component. Try running "composer require symfony/lock".'); } if (null !== $this->lock) { @@ -58,7 +58,7 @@ private function lock(string $name = null, bool $blocking = false): bool /** * Releases the command lock if there is one. */ - private function release() + private function release(): void { if ($this->lock) { $this->lock->release(); diff --git a/core/vendor/symfony/console/Command/SignalableCommandInterface.php b/core/vendor/symfony/console/Command/SignalableCommandInterface.php index d439728b65..4d0876003d 100644 --- a/core/vendor/symfony/console/Command/SignalableCommandInterface.php +++ b/core/vendor/symfony/console/Command/SignalableCommandInterface.php @@ -25,6 +25,10 @@ public function getSubscribedSignals(): array; /** * The method will be called when the application is signaled. + * + * @param int|false $previousExitCode + + * @return int|false The exit code to return or false to continue the normal execution */ - public function handleSignal(int $signal): void; + public function handleSignal(int $signal, /* int|false $previousExitCode = 0 */); } diff --git a/core/vendor/symfony/console/Completion/CompletionInput.php b/core/vendor/symfony/console/Completion/CompletionInput.php index 3ef8db5d1e..800b7235a9 100644 --- a/core/vendor/symfony/console/Completion/CompletionInput.php +++ b/core/vendor/symfony/console/Completion/CompletionInput.php @@ -34,7 +34,7 @@ final class CompletionInput extends ArgvInput private $tokens; private $currentIndex; private $completionType; - private $completionName = null; + private $completionName; private $completionValue = ''; /** diff --git a/core/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php b/core/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php index 62c80c3b06..27705ddb63 100644 --- a/core/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php +++ b/core/vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php @@ -29,6 +29,9 @@ */ class AddConsoleCommandPass implements CompilerPassInterface { + /** + * @return void + */ public function process(ContainerBuilder $container) { $commandServices = $container->findTaggedServiceIds('console.command', true); diff --git a/core/vendor/symfony/console/Descriptor/ApplicationDescription.php b/core/vendor/symfony/console/Descriptor/ApplicationDescription.php index 2158339ec4..f8ed180451 100644 --- a/core/vendor/symfony/console/Descriptor/ApplicationDescription.php +++ b/core/vendor/symfony/console/Descriptor/ApplicationDescription.php @@ -79,7 +79,7 @@ public function getCommand(string $name): Command return $this->commands[$name] ?? $this->aliases[$name]; } - private function inspectApplication() + private function inspectApplication(): void { $this->commands = []; $this->namespaces = []; diff --git a/core/vendor/symfony/console/Descriptor/Descriptor.php b/core/vendor/symfony/console/Descriptor/Descriptor.php index 1476f57557..7b2509c601 100644 --- a/core/vendor/symfony/console/Descriptor/Descriptor.php +++ b/core/vendor/symfony/console/Descriptor/Descriptor.php @@ -26,12 +26,9 @@ */ abstract class Descriptor implements DescriptorInterface { - /** - * @var OutputInterface - */ - protected $output; + protected OutputInterface $output; - public function describe(OutputInterface $output, object $object, array $options = []) + public function describe(OutputInterface $output, object $object, array $options = []): void { $this->output = $output; @@ -45,10 +42,7 @@ public function describe(OutputInterface $output, object $object, array $options }; } - /** - * Writes content to output. - */ - protected function write(string $content, bool $decorated = false) + protected function write(string $content, bool $decorated = false): void { $this->output->write($content, false, $decorated ? OutputInterface::OUTPUT_NORMAL : OutputInterface::OUTPUT_RAW); } @@ -56,25 +50,25 @@ protected function write(string $content, bool $decorated = false) /** * Describes an InputArgument instance. */ - abstract protected function describeInputArgument(InputArgument $argument, array $options = []); + abstract protected function describeInputArgument(InputArgument $argument, array $options = []): void; /** * Describes an InputOption instance. */ - abstract protected function describeInputOption(InputOption $option, array $options = []); + abstract protected function describeInputOption(InputOption $option, array $options = []): void; /** * Describes an InputDefinition instance. */ - abstract protected function describeInputDefinition(InputDefinition $definition, array $options = []); + abstract protected function describeInputDefinition(InputDefinition $definition, array $options = []): void; /** * Describes a Command instance. */ - abstract protected function describeCommand(Command $command, array $options = []); + abstract protected function describeCommand(Command $command, array $options = []): void; /** * Describes an Application instance. */ - abstract protected function describeApplication(Application $application, array $options = []); + abstract protected function describeApplication(Application $application, array $options = []): void; } diff --git a/core/vendor/symfony/console/Descriptor/DescriptorInterface.php b/core/vendor/symfony/console/Descriptor/DescriptorInterface.php index ebea30367e..ab468a2562 100644 --- a/core/vendor/symfony/console/Descriptor/DescriptorInterface.php +++ b/core/vendor/symfony/console/Descriptor/DescriptorInterface.php @@ -20,5 +20,8 @@ */ interface DescriptorInterface { + /** + * @return void + */ public function describe(OutputInterface $output, object $object, array $options = []); } diff --git a/core/vendor/symfony/console/Descriptor/JsonDescriptor.php b/core/vendor/symfony/console/Descriptor/JsonDescriptor.php index 6f79a17a9d..9563037096 100644 --- a/core/vendor/symfony/console/Descriptor/JsonDescriptor.php +++ b/core/vendor/symfony/console/Descriptor/JsonDescriptor.php @@ -26,12 +26,12 @@ */ class JsonDescriptor extends Descriptor { - protected function describeInputArgument(InputArgument $argument, array $options = []) + protected function describeInputArgument(InputArgument $argument, array $options = []): void { $this->writeData($this->getInputArgumentData($argument), $options); } - protected function describeInputOption(InputOption $option, array $options = []) + protected function describeInputOption(InputOption $option, array $options = []): void { $this->writeData($this->getInputOptionData($option), $options); if ($option->isNegatable()) { @@ -39,17 +39,17 @@ protected function describeInputOption(InputOption $option, array $options = []) } } - protected function describeInputDefinition(InputDefinition $definition, array $options = []) + protected function describeInputDefinition(InputDefinition $definition, array $options = []): void { $this->writeData($this->getInputDefinitionData($definition), $options); } - protected function describeCommand(Command $command, array $options = []) + protected function describeCommand(Command $command, array $options = []): void { $this->writeData($this->getCommandData($command, $options['short'] ?? false), $options); } - protected function describeApplication(Application $application, array $options = []) + protected function describeApplication(Application $application, array $options = []): void { $describedNamespace = $options['namespace'] ?? null; $description = new ApplicationDescription($application, $describedNamespace, true); @@ -81,7 +81,7 @@ protected function describeApplication(Application $application, array $options /** * Writes data as json. */ - private function writeData(array $data, array $options) + private function writeData(array $data, array $options): void { $flags = $options['json_encoding'] ?? 0; diff --git a/core/vendor/symfony/console/Descriptor/MarkdownDescriptor.php b/core/vendor/symfony/console/Descriptor/MarkdownDescriptor.php index fbd9c53461..b3f16ee904 100644 --- a/core/vendor/symfony/console/Descriptor/MarkdownDescriptor.php +++ b/core/vendor/symfony/console/Descriptor/MarkdownDescriptor.php @@ -28,7 +28,7 @@ */ class MarkdownDescriptor extends Descriptor { - public function describe(OutputInterface $output, object $object, array $options = []) + public function describe(OutputInterface $output, object $object, array $options = []): void { $decorated = $output->isDecorated(); $output->setDecorated(false); @@ -38,12 +38,12 @@ public function describe(OutputInterface $output, object $object, array $options $output->setDecorated($decorated); } - protected function write(string $content, bool $decorated = true) + protected function write(string $content, bool $decorated = true): void { parent::write($content, $decorated); } - protected function describeInputArgument(InputArgument $argument, array $options = []) + protected function describeInputArgument(InputArgument $argument, array $options = []): void { $this->write( '#### `'.($argument->getName() ?: '')."`\n\n" @@ -54,7 +54,7 @@ protected function describeInputArgument(InputArgument $argument, array $options ); } - protected function describeInputOption(InputOption $option, array $options = []) + protected function describeInputOption(InputOption $option, array $options = []): void { $name = '--'.$option->getName(); if ($option->isNegatable()) { @@ -75,15 +75,13 @@ protected function describeInputOption(InputOption $option, array $options = []) ); } - protected function describeInputDefinition(InputDefinition $definition, array $options = []) + protected function describeInputDefinition(InputDefinition $definition, array $options = []): void { if ($showArguments = \count($definition->getArguments()) > 0) { $this->write('### Arguments'); foreach ($definition->getArguments() as $argument) { $this->write("\n\n"); - if (null !== $describeInputArgument = $this->describeInputArgument($argument)) { - $this->write($describeInputArgument); - } + $this->describeInputArgument($argument); } } @@ -95,14 +93,12 @@ protected function describeInputDefinition(InputDefinition $definition, array $o $this->write('### Options'); foreach ($definition->getOptions() as $option) { $this->write("\n\n"); - if (null !== $describeInputOption = $this->describeInputOption($option)) { - $this->write($describeInputOption); - } + $this->describeInputOption($option); } } } - protected function describeCommand(Command $command, array $options = []) + protected function describeCommand(Command $command, array $options = []): void { if ($options['short'] ?? false) { $this->write( @@ -110,9 +106,7 @@ protected function describeCommand(Command $command, array $options = []) .str_repeat('-', Helper::width($command->getName()) + 2)."\n\n" .($command->getDescription() ? $command->getDescription()."\n\n" : '') .'### Usage'."\n\n" - .array_reduce($command->getAliases(), function ($carry, $usage) { - return $carry.'* `'.$usage.'`'."\n"; - }) + .array_reduce($command->getAliases(), fn ($carry, $usage) => $carry.'* `'.$usage.'`'."\n") ); return; @@ -125,9 +119,7 @@ protected function describeCommand(Command $command, array $options = []) .str_repeat('-', Helper::width($command->getName()) + 2)."\n\n" .($command->getDescription() ? $command->getDescription()."\n\n" : '') .'### Usage'."\n\n" - .array_reduce(array_merge([$command->getSynopsis()], $command->getAliases(), $command->getUsages()), function ($carry, $usage) { - return $carry.'* `'.$usage.'`'."\n"; - }) + .array_reduce(array_merge([$command->getSynopsis()], $command->getAliases(), $command->getUsages()), fn ($carry, $usage) => $carry.'* `'.$usage.'`'."\n") ); if ($help = $command->getProcessedHelp()) { @@ -142,7 +134,7 @@ protected function describeCommand(Command $command, array $options = []) } } - protected function describeApplication(Application $application, array $options = []) + protected function describeApplication(Application $application, array $options = []): void { $describedNamespace = $options['namespace'] ?? null; $description = new ApplicationDescription($application, $describedNamespace); @@ -157,16 +149,12 @@ protected function describeApplication(Application $application, array $options } $this->write("\n\n"); - $this->write(implode("\n", array_map(function ($commandName) use ($description) { - return sprintf('* [`%s`](#%s)', $commandName, str_replace(':', '', $description->getCommand($commandName)->getName())); - }, $namespace['commands']))); + $this->write(implode("\n", array_map(fn ($commandName) => sprintf('* [`%s`](#%s)', $commandName, str_replace(':', '', $description->getCommand($commandName)->getName())), $namespace['commands']))); } foreach ($description->getCommands() as $command) { $this->write("\n\n"); - if (null !== $describeCommand = $this->describeCommand($command, $options)) { - $this->write($describeCommand); - } + $this->describeCommand($command, $options); } } diff --git a/core/vendor/symfony/console/Descriptor/ReStructuredTextDescriptor.php b/core/vendor/symfony/console/Descriptor/ReStructuredTextDescriptor.php new file mode 100644 index 0000000000..d4423fd348 --- /dev/null +++ b/core/vendor/symfony/console/Descriptor/ReStructuredTextDescriptor.php @@ -0,0 +1,272 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Console\Descriptor; + +use Symfony\Component\Console\Application; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Helper\Helper; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputDefinition; +use Symfony\Component\Console\Input\InputOption; +use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\String\UnicodeString; + +class ReStructuredTextDescriptor extends Descriptor +{ + //

+ private string $partChar = '='; + //

+ private string $chapterChar = '-'; + //

+ private string $sectionChar = '~'; + //

+ private string $subsectionChar = '.'; + //

+ private string $subsubsectionChar = '^'; + //
+ private string $paragraphsChar = '"'; + + private array $visibleNamespaces = []; + + public function describe(OutputInterface $output, object $object, array $options = []): void + { + $decorated = $output->isDecorated(); + $output->setDecorated(false); + + parent::describe($output, $object, $options); + + $output->setDecorated($decorated); + } + + /** + * Override parent method to set $decorated = true. + */ + protected function write(string $content, bool $decorated = true): void + { + parent::write($content, $decorated); + } + + protected function describeInputArgument(InputArgument $argument, array $options = []): void + { + $this->write( + $argument->getName() ?: ''."\n".str_repeat($this->paragraphsChar, Helper::width($argument->getName()))."\n\n" + .($argument->getDescription() ? preg_replace('/\s*[\r\n]\s*/', "\n", $argument->getDescription())."\n\n" : '') + .'- **Is required**: '.($argument->isRequired() ? 'yes' : 'no')."\n" + .'- **Is array**: '.($argument->isArray() ? 'yes' : 'no')."\n" + .'- **Default**: ``'.str_replace("\n", '', var_export($argument->getDefault(), true)).'``' + ); + } + + protected function describeInputOption(InputOption $option, array $options = []): void + { + $name = '\-\-'.$option->getName(); + if ($option->isNegatable()) { + $name .= '|\-\-no-'.$option->getName(); + } + if ($option->getShortcut()) { + $name .= '|-'.str_replace('|', '|-', $option->getShortcut()); + } + + $optionDescription = $option->getDescription() ? preg_replace('/\s*[\r\n]\s*/', "\n\n", $option->getDescription())."\n\n" : ''; + $optionDescription = (new UnicodeString($optionDescription))->ascii(); + $this->write( + $name."\n".str_repeat($this->paragraphsChar, Helper::width($name))."\n\n" + .$optionDescription + .'- **Accept value**: '.($option->acceptValue() ? 'yes' : 'no')."\n" + .'- **Is value required**: '.($option->isValueRequired() ? 'yes' : 'no')."\n" + .'- **Is multiple**: '.($option->isArray() ? 'yes' : 'no')."\n" + .'- **Is negatable**: '.($option->isNegatable() ? 'yes' : 'no')."\n" + .'- **Default**: ``'.str_replace("\n", '', var_export($option->getDefault(), true)).'``'."\n" + ); + } + + protected function describeInputDefinition(InputDefinition $definition, array $options = []): void + { + if ($showArguments = ((bool) $definition->getArguments())) { + $this->write("Arguments\n".str_repeat($this->subsubsectionChar, 9))."\n\n"; + foreach ($definition->getArguments() as $argument) { + $this->write("\n\n"); + $this->describeInputArgument($argument); + } + } + + if ($nonDefaultOptions = $this->getNonDefaultOptions($definition)) { + if ($showArguments) { + $this->write("\n\n"); + } + + $this->write("Options\n".str_repeat($this->subsubsectionChar, 7)."\n\n"); + foreach ($nonDefaultOptions as $option) { + $this->describeInputOption($option); + $this->write("\n"); + } + } + } + + protected function describeCommand(Command $command, array $options = []): void + { + if ($options['short'] ?? false) { + $this->write( + '``'.$command->getName()."``\n" + .str_repeat($this->subsectionChar, Helper::width($command->getName()))."\n\n" + .($command->getDescription() ? $command->getDescription()."\n\n" : '') + ."Usage\n".str_repeat($this->paragraphsChar, 5)."\n\n" + .array_reduce($command->getAliases(), static fn ($carry, $usage) => $carry.'- ``'.$usage.'``'."\n") + ); + + return; + } + + $command->mergeApplicationDefinition(false); + + foreach ($command->getAliases() as $alias) { + $this->write('.. _'.$alias.":\n\n"); + } + $this->write( + $command->getName()."\n" + .str_repeat($this->subsectionChar, Helper::width($command->getName()))."\n\n" + .($command->getDescription() ? $command->getDescription()."\n\n" : '') + ."Usage\n".str_repeat($this->subsubsectionChar, 5)."\n\n" + .array_reduce(array_merge([$command->getSynopsis()], $command->getAliases(), $command->getUsages()), static fn ($carry, $usage) => $carry.'- ``'.$usage.'``'."\n") + ); + + if ($help = $command->getProcessedHelp()) { + $this->write("\n"); + $this->write($help); + } + + $definition = $command->getDefinition(); + if ($definition->getOptions() || $definition->getArguments()) { + $this->write("\n\n"); + $this->describeInputDefinition($definition); + } + } + + protected function describeApplication(Application $application, array $options = []): void + { + $description = new ApplicationDescription($application, $options['namespace'] ?? null); + $title = $this->getApplicationTitle($application); + + $this->write($title."\n".str_repeat($this->partChar, Helper::width($title))); + $this->createTableOfContents($description, $application); + $this->describeCommands($application, $options); + } + + private function getApplicationTitle(Application $application): string + { + if ('UNKNOWN' === $application->getName()) { + return 'Console Tool'; + } + if ('UNKNOWN' !== $application->getVersion()) { + return sprintf('%s %s', $application->getName(), $application->getVersion()); + } + + return $application->getName(); + } + + private function describeCommands($application, array $options): void + { + $title = 'Commands'; + $this->write("\n\n$title\n".str_repeat($this->chapterChar, Helper::width($title))."\n\n"); + foreach ($this->visibleNamespaces as $namespace) { + if ('_global' === $namespace) { + $commands = $application->all(''); + $this->write('Global'."\n".str_repeat($this->sectionChar, Helper::width('Global'))."\n\n"); + } else { + $commands = $application->all($namespace); + $this->write($namespace."\n".str_repeat($this->sectionChar, Helper::width($namespace))."\n\n"); + } + + foreach ($this->removeAliasesAndHiddenCommands($commands) as $command) { + $this->describeCommand($command, $options); + $this->write("\n\n"); + } + } + } + + private function createTableOfContents(ApplicationDescription $description, Application $application): void + { + $this->setVisibleNamespaces($description); + $chapterTitle = 'Table of Contents'; + $this->write("\n\n$chapterTitle\n".str_repeat($this->chapterChar, Helper::width($chapterTitle))."\n\n"); + foreach ($this->visibleNamespaces as $namespace) { + if ('_global' === $namespace) { + $commands = $application->all(''); + } else { + $commands = $application->all($namespace); + $this->write("\n\n"); + $this->write($namespace."\n".str_repeat($this->sectionChar, Helper::width($namespace))."\n\n"); + } + $commands = $this->removeAliasesAndHiddenCommands($commands); + + $this->write("\n\n"); + $this->write(implode("\n", array_map(static fn ($commandName) => sprintf('- `%s`_', $commandName), array_keys($commands)))); + } + } + + private function getNonDefaultOptions(InputDefinition $definition): array + { + $globalOptions = [ + 'help', + 'quiet', + 'verbose', + 'version', + 'ansi', + 'no-interaction', + ]; + $nonDefaultOptions = []; + foreach ($definition->getOptions() as $option) { + // Skip global options. + if (!\in_array($option->getName(), $globalOptions)) { + $nonDefaultOptions[] = $option; + } + } + + return $nonDefaultOptions; + } + + private function setVisibleNamespaces(ApplicationDescription $description): void + { + $commands = $description->getCommands(); + foreach ($description->getNamespaces() as $namespace) { + try { + $namespaceCommands = $namespace['commands']; + foreach ($namespaceCommands as $key => $commandName) { + if (!\array_key_exists($commandName, $commands)) { + // If the array key does not exist, then this is an alias. + unset($namespaceCommands[$key]); + } elseif ($commands[$commandName]->isHidden()) { + unset($namespaceCommands[$key]); + } + } + if (!$namespaceCommands) { + // If the namespace contained only aliases or hidden commands, skip the namespace. + continue; + } + } catch (\Exception) { + } + $this->visibleNamespaces[] = $namespace['id']; + } + } + + private function removeAliasesAndHiddenCommands(array $commands): array + { + foreach ($commands as $key => $command) { + if ($command->isHidden() || \in_array($key, $command->getAliases(), true)) { + unset($commands[$key]); + } + } + unset($commands['completion']); + + return $commands; + } +} diff --git a/core/vendor/symfony/console/Descriptor/TextDescriptor.php b/core/vendor/symfony/console/Descriptor/TextDescriptor.php index 48a0b42af9..d04d10238b 100644 --- a/core/vendor/symfony/console/Descriptor/TextDescriptor.php +++ b/core/vendor/symfony/console/Descriptor/TextDescriptor.php @@ -28,7 +28,7 @@ */ class TextDescriptor extends Descriptor { - protected function describeInputArgument(InputArgument $argument, array $options = []) + protected function describeInputArgument(InputArgument $argument, array $options = []): void { if (null !== $argument->getDefault() && (!\is_array($argument->getDefault()) || \count($argument->getDefault()))) { $default = sprintf(' [default: %s]', $this->formatDefaultValue($argument->getDefault())); @@ -48,7 +48,7 @@ protected function describeInputArgument(InputArgument $argument, array $options ), $options); } - protected function describeInputOption(InputOption $option, array $options = []) + protected function describeInputOption(InputOption $option, array $options = []): void { if ($option->acceptValue() && null !== $option->getDefault() && (!\is_array($option->getDefault()) || \count($option->getDefault()))) { $default = sprintf(' [default: %s]', $this->formatDefaultValue($option->getDefault())); @@ -83,7 +83,7 @@ protected function describeInputOption(InputOption $option, array $options = []) ), $options); } - protected function describeInputDefinition(InputDefinition $definition, array $options = []) + protected function describeInputDefinition(InputDefinition $definition, array $options = []): void { $totalWidth = $this->calculateTotalWidthForOptions($definition->getOptions()); foreach ($definition->getArguments() as $argument) { @@ -122,7 +122,7 @@ protected function describeInputDefinition(InputDefinition $definition, array $o } } - protected function describeCommand(Command $command, array $options = []) + protected function describeCommand(Command $command, array $options = []): void { $command->mergeApplicationDefinition(false); @@ -157,7 +157,7 @@ protected function describeCommand(Command $command, array $options = []) } } - protected function describeApplication(Application $application, array $options = []) + protected function describeApplication(Application $application, array $options = []): void { $describedNamespace = $options['namespace'] ?? null; $description = new ApplicationDescription($application, $describedNamespace); @@ -193,9 +193,7 @@ protected function describeApplication(Application $application, array $options } // calculate max. width based on available commands per namespace - $width = $this->getColumnWidth(array_merge(...array_values(array_map(function ($namespace) use ($commands) { - return array_intersect($namespace['commands'], array_keys($commands)); - }, array_values($namespaces))))); + $width = $this->getColumnWidth(array_merge(...array_values(array_map(fn ($namespace) => array_intersect($namespace['commands'], array_keys($commands)), array_values($namespaces))))); if ($describedNamespace) { $this->writeText(sprintf('Available commands for the "%s" namespace:', $describedNamespace), $options); @@ -204,9 +202,7 @@ protected function describeApplication(Application $application, array $options } foreach ($namespaces as $namespace) { - $namespace['commands'] = array_filter($namespace['commands'], function ($name) use ($commands) { - return isset($commands[$name]); - }); + $namespace['commands'] = array_filter($namespace['commands'], fn ($name) => isset($commands[$name])); if (!$namespace['commands']) { continue; @@ -230,7 +226,7 @@ protected function describeApplication(Application $application, array $options } } - private function writeText(string $content, array $options = []) + private function writeText(string $content, array $options = []): void { $this->write( isset($options['raw_text']) && $options['raw_text'] ? strip_tags($content) : $content, diff --git a/core/vendor/symfony/console/Descriptor/XmlDescriptor.php b/core/vendor/symfony/console/Descriptor/XmlDescriptor.php index f4643a9ac7..72580fd985 100644 --- a/core/vendor/symfony/console/Descriptor/XmlDescriptor.php +++ b/core/vendor/symfony/console/Descriptor/XmlDescriptor.php @@ -120,27 +120,27 @@ public function getApplicationDocument(Application $application, string $namespa return $dom; } - protected function describeInputArgument(InputArgument $argument, array $options = []) + protected function describeInputArgument(InputArgument $argument, array $options = []): void { $this->writeDocument($this->getInputArgumentDocument($argument)); } - protected function describeInputOption(InputOption $option, array $options = []) + protected function describeInputOption(InputOption $option, array $options = []): void { $this->writeDocument($this->getInputOptionDocument($option)); } - protected function describeInputDefinition(InputDefinition $definition, array $options = []) + protected function describeInputDefinition(InputDefinition $definition, array $options = []): void { $this->writeDocument($this->getInputDefinitionDocument($definition)); } - protected function describeCommand(Command $command, array $options = []) + protected function describeCommand(Command $command, array $options = []): void { $this->writeDocument($this->getCommandDocument($command, $options['short'] ?? false)); } - protected function describeApplication(Application $application, array $options = []) + protected function describeApplication(Application $application, array $options = []): void { $this->writeDocument($this->getApplicationDocument($application, $options['namespace'] ?? null, $options['short'] ?? false)); } @@ -148,7 +148,7 @@ protected function describeApplication(Application $application, array $options /** * Appends document children to parent node. */ - private function appendDocument(\DOMNode $parentNode, \DOMNode $importedParent) + private function appendDocument(\DOMNode $parentNode, \DOMNode $importedParent): void { foreach ($importedParent->childNodes as $childNode) { $parentNode->appendChild($parentNode->ownerDocument->importNode($childNode, true)); @@ -158,7 +158,7 @@ private function appendDocument(\DOMNode $parentNode, \DOMNode $importedParent) /** * Writes DOM document. */ - private function writeDocument(\DOMDocument $dom) + private function writeDocument(\DOMDocument $dom): void { $dom->formatOutput = true; $this->write($dom->saveXML()); diff --git a/core/vendor/symfony/console/Event/ConsoleSignalEvent.php b/core/vendor/symfony/console/Event/ConsoleSignalEvent.php index 766af691aa..95af1f915d 100644 --- a/core/vendor/symfony/console/Event/ConsoleSignalEvent.php +++ b/core/vendor/symfony/console/Event/ConsoleSignalEvent.php @@ -21,15 +21,36 @@ final class ConsoleSignalEvent extends ConsoleEvent { private int $handlingSignal; + private int|false $exitCode; - public function __construct(Command $command, InputInterface $input, OutputInterface $output, int $handlingSignal) + public function __construct(Command $command, InputInterface $input, OutputInterface $output, int $handlingSignal, int|false $exitCode = 0) { parent::__construct($command, $input, $output); $this->handlingSignal = $handlingSignal; + $this->exitCode = $exitCode; } public function getHandlingSignal(): int { return $this->handlingSignal; } + + public function setExitCode(int $exitCode): void + { + if ($exitCode < 0 || $exitCode > 255) { + throw new \InvalidArgumentException('Exit code must be between 0 and 255.'); + } + + $this->exitCode = $exitCode; + } + + public function abortExit(): void + { + $this->exitCode = false; + } + + public function getExitCode(): int|false + { + return $this->exitCode; + } } diff --git a/core/vendor/symfony/console/EventListener/ErrorListener.php b/core/vendor/symfony/console/EventListener/ErrorListener.php index 773a13a1c0..9925a5f746 100644 --- a/core/vendor/symfony/console/EventListener/ErrorListener.php +++ b/core/vendor/symfony/console/EventListener/ErrorListener.php @@ -31,6 +31,9 @@ public function __construct(LoggerInterface $logger = null) $this->logger = $logger; } + /** + * @return void + */ public function onConsoleError(ConsoleErrorEvent $event) { if (null === $this->logger) { @@ -48,6 +51,9 @@ public function onConsoleError(ConsoleErrorEvent $event) $this->logger->critical('Error thrown while running command "{command}". Message: "{message}"', ['exception' => $error, 'command' => $inputString, 'message' => $error->getMessage()]); } + /** + * @return void + */ public function onConsoleTerminate(ConsoleTerminateEvent $event) { if (null === $this->logger) { diff --git a/core/vendor/symfony/console/Formatter/OutputFormatter.php b/core/vendor/symfony/console/Formatter/OutputFormatter.php index 38e75c3178..9cb6310484 100644 --- a/core/vendor/symfony/console/Formatter/OutputFormatter.php +++ b/core/vendor/symfony/console/Formatter/OutputFormatter.php @@ -81,6 +81,9 @@ public function __construct(bool $decorated = false, array $styles = []) $this->styleStack = new OutputFormatterStyleStack(); } + /** + * @return void + */ public function setDecorated(bool $decorated) { $this->decorated = $decorated; @@ -91,6 +94,9 @@ public function isDecorated(): bool return $this->decorated; } + /** + * @return void + */ public function setStyle(string $name, OutputFormatterStyleInterface $style) { $this->styles[strtolower($name)] = $style; @@ -115,6 +121,9 @@ public function format(?string $message): ?string return $this->formatAndWrap($message, 0); } + /** + * @return string + */ public function formatAndWrap(?string $message, int $width) { if (null === $message) { diff --git a/core/vendor/symfony/console/Formatter/OutputFormatterInterface.php b/core/vendor/symfony/console/Formatter/OutputFormatterInterface.php index b94e51dedb..433cd41978 100644 --- a/core/vendor/symfony/console/Formatter/OutputFormatterInterface.php +++ b/core/vendor/symfony/console/Formatter/OutputFormatterInterface.php @@ -20,6 +20,8 @@ interface OutputFormatterInterface { /** * Sets the decorated flag. + * + * @return void */ public function setDecorated(bool $decorated); @@ -30,6 +32,8 @@ public function isDecorated(): bool; /** * Sets a new style. + * + * @return void */ public function setStyle(string $name, OutputFormatterStyleInterface $style); diff --git a/core/vendor/symfony/console/Formatter/OutputFormatterStyle.php b/core/vendor/symfony/console/Formatter/OutputFormatterStyle.php index 3394c9ada9..346a474c61 100644 --- a/core/vendor/symfony/console/Formatter/OutputFormatterStyle.php +++ b/core/vendor/symfony/console/Formatter/OutputFormatterStyle.php @@ -38,6 +38,9 @@ public function __construct(string $foreground = null, string $background = null $this->color = new Color($this->foreground = $foreground ?: '', $this->background = $background ?: '', $this->options = $options); } + /** + * @return void + */ public function setForeground(string $color = null) { if (1 > \func_num_args()) { @@ -46,6 +49,9 @@ public function setForeground(string $color = null) $this->color = new Color($this->foreground = $color ?: '', $this->background, $this->options); } + /** + * @return void + */ public function setBackground(string $color = null) { if (1 > \func_num_args()) { @@ -59,12 +65,18 @@ public function setHref(string $url): void $this->href = $url; } + /** + * @return void + */ public function setOption(string $option) { $this->options[] = $option; $this->color = new Color($this->foreground, $this->background, $this->options); } + /** + * @return void + */ public function unsetOption(string $option) { $pos = array_search($option, $this->options); @@ -75,6 +87,9 @@ public function unsetOption(string $option) $this->color = new Color($this->foreground, $this->background, $this->options); } + /** + * @return void + */ public function setOptions(array $options) { $this->color = new Color($this->foreground, $this->background, $this->options = $options); diff --git a/core/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php b/core/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php index 7ed67d9a11..3b15098cbe 100644 --- a/core/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php +++ b/core/vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php @@ -20,26 +20,36 @@ interface OutputFormatterStyleInterface { /** * Sets style foreground color. + * + * @return void */ public function setForeground(?string $color); /** * Sets style background color. + * + * @return void */ public function setBackground(?string $color); /** * Sets some specific style option. + * + * @return void */ public function setOption(string $option); /** * Unsets some specific style option. + * + * @return void */ public function unsetOption(string $option); /** * Sets multiple style options at once. + * + * @return void */ public function setOptions(array $options); diff --git a/core/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php b/core/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php index 2c5cdf9b80..f98c2eff7c 100644 --- a/core/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php +++ b/core/vendor/symfony/console/Formatter/OutputFormatterStyleStack.php @@ -34,6 +34,8 @@ public function __construct(OutputFormatterStyleInterface $emptyStyle = null) /** * Resets stack (ie. empty internal arrays). + * + * @return void */ public function reset() { @@ -42,6 +44,8 @@ public function reset() /** * Pushes a style in the stack. + * + * @return void */ public function push(OutputFormatterStyleInterface $style) { diff --git a/core/vendor/symfony/console/Helper/DescriptorHelper.php b/core/vendor/symfony/console/Helper/DescriptorHelper.php index 3015ff08d2..eb32bce8fc 100644 --- a/core/vendor/symfony/console/Helper/DescriptorHelper.php +++ b/core/vendor/symfony/console/Helper/DescriptorHelper.php @@ -14,6 +14,7 @@ use Symfony\Component\Console\Descriptor\DescriptorInterface; use Symfony\Component\Console\Descriptor\JsonDescriptor; use Symfony\Component\Console\Descriptor\MarkdownDescriptor; +use Symfony\Component\Console\Descriptor\ReStructuredTextDescriptor; use Symfony\Component\Console\Descriptor\TextDescriptor; use Symfony\Component\Console\Descriptor\XmlDescriptor; use Symfony\Component\Console\Exception\InvalidArgumentException; @@ -38,6 +39,7 @@ public function __construct() ->register('xml', new XmlDescriptor()) ->register('json', new JsonDescriptor()) ->register('md', new MarkdownDescriptor()) + ->register('rst', new ReStructuredTextDescriptor()) ; } @@ -48,6 +50,8 @@ public function __construct() * * format: string, the output format name * * raw_text: boolean, sets output type as raw * + * @return void + * * @throws InvalidArgumentException when the given format is not supported */ public function describe(OutputInterface $output, ?object $object, array $options = []) diff --git a/core/vendor/symfony/console/Helper/Dumper.php b/core/vendor/symfony/console/Helper/Dumper.php index ac7571ceaf..8c6a94d51f 100644 --- a/core/vendor/symfony/console/Helper/Dumper.php +++ b/core/vendor/symfony/console/Helper/Dumper.php @@ -40,14 +40,12 @@ public function __construct(OutputInterface $output, CliDumper $dumper = null, C return rtrim($dumper->dump(($this->cloner ??= new VarCloner())->cloneVar($var)->withRefHandles(false), true)); }; } else { - $this->handler = function ($var): string { - return match (true) { - null === $var => 'null', - true === $var => 'true', - false === $var => 'false', - \is_string($var) => '"'.$var.'"', - default => rtrim(print_r($var, true)), - }; + $this->handler = fn ($var): string => match (true) { + null === $var => 'null', + true === $var => 'true', + false === $var => 'false', + \is_string($var) => '"'.$var.'"', + default => rtrim(print_r($var, true)), }; } } diff --git a/core/vendor/symfony/console/Helper/Helper.php b/core/vendor/symfony/console/Helper/Helper.php index 920196e0fe..3631b30f69 100644 --- a/core/vendor/symfony/console/Helper/Helper.php +++ b/core/vendor/symfony/console/Helper/Helper.php @@ -21,8 +21,11 @@ */ abstract class Helper implements HelperInterface { - protected $helperSet = null; + protected $helperSet; + /** + * @return void + */ public function setHelperSet(HelperSet $helperSet = null) { if (1 > \func_num_args()) { @@ -88,6 +91,9 @@ public static function substr(?string $string, int $from, int $length = null): s return mb_substr($string, $from, $length, $encoding); } + /** + * @return string + */ public static function formatTime(int|float $secs) { static $timeFormats = [ @@ -117,6 +123,9 @@ public static function formatTime(int|float $secs) } } + /** + * @return string + */ public static function formatMemory(int $memory) { if ($memory >= 1024 * 1024 * 1024) { @@ -134,6 +143,9 @@ public static function formatMemory(int $memory) return sprintf('%d B', $memory); } + /** + * @return string + */ public static function removeDecoration(OutputFormatterInterface $formatter, ?string $string) { $isDecorated = $formatter->isDecorated(); diff --git a/core/vendor/symfony/console/Helper/HelperInterface.php b/core/vendor/symfony/console/Helper/HelperInterface.php index 2762cdf05c..ab626c9385 100644 --- a/core/vendor/symfony/console/Helper/HelperInterface.php +++ b/core/vendor/symfony/console/Helper/HelperInterface.php @@ -20,6 +20,8 @@ interface HelperInterface { /** * Sets the helper set associated with this helper. + * + * @return void */ public function setHelperSet(?HelperSet $helperSet); diff --git a/core/vendor/symfony/console/Helper/HelperSet.php b/core/vendor/symfony/console/Helper/HelperSet.php index cefe62be3c..dc5d499caa 100644 --- a/core/vendor/symfony/console/Helper/HelperSet.php +++ b/core/vendor/symfony/console/Helper/HelperSet.php @@ -35,6 +35,9 @@ public function __construct(array $helpers = []) } } + /** + * @return void + */ public function set(HelperInterface $helper, string $alias = null) { $this->helpers[$helper->getName()] = $helper; diff --git a/core/vendor/symfony/console/Helper/InputAwareHelper.php b/core/vendor/symfony/console/Helper/InputAwareHelper.php index ba81e37713..6f8225973c 100644 --- a/core/vendor/symfony/console/Helper/InputAwareHelper.php +++ b/core/vendor/symfony/console/Helper/InputAwareHelper.php @@ -23,6 +23,9 @@ abstract class InputAwareHelper extends Helper implements InputAwareInterface { protected $input; + /** + * @return void + */ public function setInput(InputInterface $input) { $this->input = $input; diff --git a/core/vendor/symfony/console/Helper/ProgressBar.php b/core/vendor/symfony/console/Helper/ProgressBar.php index 0d1126097e..19faea47c0 100644 --- a/core/vendor/symfony/console/Helper/ProgressBar.php +++ b/core/vendor/symfony/console/Helper/ProgressBar.php @@ -59,6 +59,7 @@ final class ProgressBar private Terminal $terminal; private ?string $previousMessage = null; private Cursor $cursor; + private array $placeholders = []; private static array $formatters; private static array $formats; @@ -94,12 +95,12 @@ public function __construct(OutputInterface $output, int $max = 0, float $minSec } /** - * Sets a placeholder formatter for a given name. + * Sets a placeholder formatter for a given name, globally for all instances of ProgressBar. * * This method also allow you to override an existing placeholder. * - * @param string $name The placeholder name (including the delimiter char like %) - * @param callable $callable A PHP callable + * @param string $name The placeholder name (including the delimiter char like %) + * @param callable(ProgressBar):string $callable A PHP callable */ public static function setPlaceholderFormatterDefinition(string $name, callable $callable): void { @@ -120,6 +121,26 @@ public static function getPlaceholderFormatterDefinition(string $name): ?callabl return self::$formatters[$name] ?? null; } + /** + * Sets a placeholder formatter for a given name, for this instance only. + * + * @param callable(ProgressBar):string $callable A PHP callable + */ + public function setPlaceholderFormatter(string $name, callable $callable): void + { + $this->placeholders[$name] = $callable; + } + + /** + * Gets the placeholder formatter for a given name. + * + * @param string $name The placeholder name (including the delimiter char like %) + */ + public function getPlaceholderFormatter(string $name): ?callable + { + return $this->placeholders[$name] ?? $this::getPlaceholderFormatterDefinition($name); + } + /** * Sets a format for a given name. * @@ -157,12 +178,12 @@ public static function getFormatDefinition(string $name): ?string * @param string $message The text to associate with the placeholder * @param string $name The name of the placeholder */ - public function setMessage(string $message, string $name = 'message') + public function setMessage(string $message, string $name = 'message'): void { $this->messages[$name] = $message; } - public function getMessage(string $name = 'message') + public function getMessage(string $name = 'message'): string { return $this->messages[$name]; } @@ -215,7 +236,7 @@ public function getRemaining(): float return round((time() - $this->startTime) / ($this->step - $this->startingStep) * ($this->max - $this->step)); } - public function setBarWidth(int $size) + public function setBarWidth(int $size): void { $this->barWidth = max(1, $size); } @@ -225,7 +246,7 @@ public function getBarWidth(): int return $this->barWidth; } - public function setBarCharacter(string $char) + public function setBarCharacter(string $char): void { $this->barChar = $char; } @@ -235,7 +256,7 @@ public function getBarCharacter(): string return $this->barChar ?? ($this->max ? '=' : $this->emptyBarChar); } - public function setEmptyBarCharacter(string $char) + public function setEmptyBarCharacter(string $char): void { $this->emptyBarChar = $char; } @@ -245,7 +266,7 @@ public function getEmptyBarCharacter(): string return $this->emptyBarChar; } - public function setProgressCharacter(string $char) + public function setProgressCharacter(string $char): void { $this->progressChar = $char; } @@ -255,7 +276,7 @@ public function getProgressCharacter(): string return $this->progressChar; } - public function setFormat(string $format) + public function setFormat(string $format): void { $this->format = null; $this->internalFormat = $format; @@ -266,7 +287,7 @@ public function setFormat(string $format) * * @param int|null $freq The frequency in steps */ - public function setRedrawFrequency(?int $freq) + public function setRedrawFrequency(?int $freq): void { $this->redrawFreq = null !== $freq ? max(1, $freq) : null; } @@ -325,7 +346,7 @@ public function start(int $max = null, int $startAt = 0): void * * @param int $step Number of steps to advance */ - public function advance(int $step = 1) + public function advance(int $step = 1): void { $this->setProgress($this->step + $step); } @@ -333,12 +354,12 @@ public function advance(int $step = 1) /** * Sets whether to overwrite the progressbar, false for new line. */ - public function setOverwrite(bool $overwrite) + public function setOverwrite(bool $overwrite): void { $this->overwrite = $overwrite; } - public function setProgress(int $step) + public function setProgress(int $step): void { if ($this->max && $step > $this->max) { $this->max = $step; @@ -371,7 +392,7 @@ public function setProgress(int $step) } } - public function setMaxSteps(int $max) + public function setMaxSteps(int $max): void { $this->format = null; $this->max = max(0, $max); @@ -431,7 +452,7 @@ public function clear(): void $this->overwrite(''); } - private function setRealFormat(string $format) + private function setRealFormat(string $format): void { // try to use the _nomax variant if available if (!$this->max && null !== self::getFormatDefinition($format.'_nomax')) { @@ -513,9 +534,7 @@ private static function initPlaceholderFormatters(): array return $display; }, - 'elapsed' => function (self $bar) { - return Helper::formatTime(time() - $bar->getStartTime()); - }, + 'elapsed' => fn (self $bar) => Helper::formatTime(time() - $bar->getStartTime()), 'remaining' => function (self $bar) { if (!$bar->getMaxSteps()) { throw new LogicException('Unable to display the remaining time if the maximum number of steps is not set.'); @@ -530,18 +549,10 @@ private static function initPlaceholderFormatters(): array return Helper::formatTime($bar->getEstimated()); }, - 'memory' => function (self $bar) { - return Helper::formatMemory(memory_get_usage(true)); - }, - 'current' => function (self $bar) { - return str_pad($bar->getProgress(), $bar->getStepWidth(), ' ', \STR_PAD_LEFT); - }, - 'max' => function (self $bar) { - return $bar->getMaxSteps(); - }, - 'percent' => function (self $bar) { - return floor($bar->getProgressPercent() * 100); - }, + 'memory' => fn (self $bar) => Helper::formatMemory(memory_get_usage(true)), + 'current' => fn (self $bar) => str_pad($bar->getProgress(), $bar->getStepWidth(), ' ', \STR_PAD_LEFT), + 'max' => fn (self $bar) => $bar->getMaxSteps(), + 'percent' => fn (self $bar) => floor($bar->getProgressPercent() * 100), ]; } @@ -568,7 +579,7 @@ private function buildLine(): string $regex = "{%([a-z\-_]+)(?:\:([^%]+))?%}i"; $callback = function ($matches) { - if ($formatter = $this::getPlaceholderFormatterDefinition($matches[1])) { + if ($formatter = $this->getPlaceholderFormatter($matches[1])) { $text = $formatter($this, $this->output); } elseif (isset($this->messages[$matches[1]])) { $text = $this->messages[$matches[1]]; @@ -585,9 +596,7 @@ private function buildLine(): string $line = preg_replace_callback($regex, $callback, $this->format); // gets string length for each sub line with multiline format - $linesLength = array_map(function ($subLine) { - return Helper::width(Helper::removeDecoration($this->output->getFormatter(), rtrim($subLine, "\r"))); - }, explode("\n", $line)); + $linesLength = array_map(fn ($subLine) => Helper::width(Helper::removeDecoration($this->output->getFormatter(), rtrim($subLine, "\r"))), explode("\n", $line)); $linesWidth = max($linesLength); diff --git a/core/vendor/symfony/console/Helper/ProgressIndicator.php b/core/vendor/symfony/console/Helper/ProgressIndicator.php index b5fa24c467..84dbef950c 100644 --- a/core/vendor/symfony/console/Helper/ProgressIndicator.php +++ b/core/vendor/symfony/console/Helper/ProgressIndicator.php @@ -70,6 +70,8 @@ public function __construct(OutputInterface $output, string $format = null, int /** * Sets the current indicator message. + * + * @return void */ public function setMessage(?string $message) { @@ -80,6 +82,8 @@ public function setMessage(?string $message) /** * Starts the indicator output. + * + * @return void */ public function start(string $message) { @@ -98,6 +102,8 @@ public function start(string $message) /** * Advances the indicator. + * + * @return void */ public function advance() { @@ -123,6 +129,8 @@ public function advance() /** * Finish the indicator with message. + * + * @return void */ public function finish(string $message) { @@ -148,6 +156,8 @@ public static function getFormatDefinition(string $name): ?string * Sets a placeholder formatter for a given name. * * This method also allow you to override an existing placeholder. + * + * @return void */ public static function setPlaceholderFormatterDefinition(string $name, callable $callable) { @@ -166,7 +176,7 @@ public static function getPlaceholderFormatterDefinition(string $name): ?callabl return self::$formatters[$name] ?? null; } - private function display() + private function display(): void { if (OutputInterface::VERBOSITY_QUIET === $this->output->getVerbosity()) { return; @@ -195,7 +205,7 @@ private function determineBestFormat(): string /** * Overwrites a previous message to the output. */ - private function overwrite(string $message) + private function overwrite(string $message): void { if ($this->output->isDecorated()) { $this->output->write("\x0D\x1B[2K"); @@ -216,18 +226,10 @@ private function getCurrentTimeInMilliseconds(): float private static function initPlaceholderFormatters(): array { return [ - 'indicator' => function (self $indicator) { - return $indicator->indicatorValues[$indicator->indicatorCurrent % \count($indicator->indicatorValues)]; - }, - 'message' => function (self $indicator) { - return $indicator->message; - }, - 'elapsed' => function (self $indicator) { - return Helper::formatTime(time() - $indicator->startTime); - }, - 'memory' => function () { - return Helper::formatMemory(memory_get_usage(true)); - }, + 'indicator' => fn (self $indicator) => $indicator->indicatorValues[$indicator->indicatorCurrent % \count($indicator->indicatorValues)], + 'message' => fn (self $indicator) => $indicator->message, + 'elapsed' => fn (self $indicator) => Helper::formatTime(time() - $indicator->startTime), + 'memory' => fn () => Helper::formatMemory(memory_get_usage(true)), ]; } } diff --git a/core/vendor/symfony/console/Helper/QuestionHelper.php b/core/vendor/symfony/console/Helper/QuestionHelper.php index c345b4af77..f32813c6c5 100644 --- a/core/vendor/symfony/console/Helper/QuestionHelper.php +++ b/core/vendor/symfony/console/Helper/QuestionHelper.php @@ -68,9 +68,7 @@ public function ask(InputInterface $input, OutputInterface $output, Question $qu return $this->doAsk($output, $question); } - $interviewer = function () use ($output, $question) { - return $this->doAsk($output, $question); - }; + $interviewer = fn () => $this->doAsk($output, $question); return $this->validateAttempts($interviewer, $output, $question); } catch (MissingInputException $exception) { @@ -91,6 +89,8 @@ public function getName(): string /** * Prevents usage of stty. + * + * @return void */ public static function disableStty() { @@ -123,7 +123,18 @@ private function doAsk(OutputInterface $output, Question $question): mixed } if (false === $ret) { + $isBlocked = stream_get_meta_data($inputStream)['blocked'] ?? true; + + if (!$isBlocked) { + stream_set_blocking($inputStream, true); + } + $ret = $this->readInput($inputStream, $question); + + if (!$isBlocked) { + stream_set_blocking($inputStream, false); + } + if (false === $ret) { throw new MissingInputException('Aborted.'); } @@ -159,7 +170,7 @@ private function getDefaultAnswer(Question $question): mixed } if ($validator = $question->getValidator()) { - return \call_user_func($question->getValidator(), $default); + return \call_user_func($validator, $default); } elseif ($question instanceof ChoiceQuestion) { $choices = $question->getChoices(); @@ -179,6 +190,8 @@ private function getDefaultAnswer(Question $question): mixed /** * Outputs the question prompt. + * + * @return void */ protected function writePrompt(OutputInterface $output, Question $question) { @@ -215,6 +228,8 @@ protected function formatChoiceQuestionChoices(ChoiceQuestion $question, string /** * Outputs an error message. + * + * @return void */ protected function writeError(OutputInterface $output, \Exception $error) { @@ -314,9 +329,7 @@ private function autocomplete(OutputInterface $output, Question $question, $inpu $matches = array_filter( $autocomplete($ret), - function ($match) use ($ret) { - return '' === $ret || str_starts_with($match, $ret); - } + fn ($match) => '' === $ret || str_starts_with($match, $ret) ); $numMatches = \count($matches); $ofs = -1; @@ -496,13 +509,11 @@ private function isInteractiveInput($inputStream): bool return self::$stdinIsInteractive = @posix_isatty(fopen('php://stdin', 'r')); } - if (!\function_exists('exec')) { + if (!\function_exists('shell_exec')) { return self::$stdinIsInteractive = true; } - exec('stty 2> /dev/null', $output, $status); - - return self::$stdinIsInteractive = 1 !== $status; + return self::$stdinIsInteractive = (bool) shell_exec('stty 2> '.('\\' === \DIRECTORY_SEPARATOR ? 'NUL' : '/dev/null')); } /** diff --git a/core/vendor/symfony/console/Helper/SymfonyQuestionHelper.php b/core/vendor/symfony/console/Helper/SymfonyQuestionHelper.php index 109045d043..8ebc84376b 100644 --- a/core/vendor/symfony/console/Helper/SymfonyQuestionHelper.php +++ b/core/vendor/symfony/console/Helper/SymfonyQuestionHelper.php @@ -25,6 +25,9 @@ */ class SymfonyQuestionHelper extends QuestionHelper { + /** + * @return void + */ protected function writePrompt(OutputInterface $output, Question $question) { $text = OutputFormatter::escapeTrailingBackslash($question->getQuestion()); @@ -80,6 +83,9 @@ protected function writePrompt(OutputInterface $output, Question $question) $output->write($prompt); } + /** + * @return void + */ protected function writeError(OutputInterface $output, \Exception $error) { if ($output instanceof SymfonyStyle) { diff --git a/core/vendor/symfony/console/Helper/Table.php b/core/vendor/symfony/console/Helper/Table.php index 907c9f505c..cf714873f5 100644 --- a/core/vendor/symfony/console/Helper/Table.php +++ b/core/vendor/symfony/console/Helper/Table.php @@ -66,6 +66,8 @@ public function __construct(OutputInterface $output) /** * Sets a style definition. + * + * @return void */ public static function setStyleDefinition(string $name, TableStyle $style) { @@ -310,6 +312,8 @@ public function setVertical(bool $vertical = true): static * | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens | * | 960-425-059-0 | The Lord of the Rings | J. R. R. Tolkien | * +---------------+-----------------------+------------------+ + * + * @return void */ public function render() { @@ -450,7 +454,7 @@ public function render() * * +-----+-----------+-------+ */ - private function renderRowSeparator(int $type = self::SEPARATOR_MID, string $title = null, string $titleFormat = null) + private function renderRowSeparator(int $type = self::SEPARATOR_MID, string $title = null, string $titleFormat = null): void { if (!$count = $this->numberOfColumns) { return; @@ -515,7 +519,7 @@ private function renderColumnSeparator(int $type = self::BORDER_OUTSIDE): string * * | 9971-5-0210-0 | A Tale of Two Cities | Charles Dickens | */ - private function renderRow(array $row, string $cellFormat, string $firstCellFormat = null) + private function renderRow(array $row, string $cellFormat, string $firstCellFormat = null): void { $rowContent = $this->renderColumnSeparator(self::BORDER_OUTSIDE); $columns = $this->getRowColumns($row); @@ -588,7 +592,7 @@ private function renderCell(array $row, int $column, string $cellFormat): string /** * Calculate number of columns for this table. */ - private function calculateNumberOfColumns(array $rows) + private function calculateNumberOfColumns(array $rows): void { $columns = [0]; foreach ($rows as $row) { @@ -727,7 +731,7 @@ private function fillNextRows(array $rows, int $line): array /** * fill cells for a row that contains colspan > 1. */ - private function fillCells(iterable $row) + private function fillCells(iterable $row): iterable { $newRow = []; @@ -789,7 +793,7 @@ private function getRowColumns(array $row): array /** * Calculates columns widths. */ - private function calculateColumnsWidth(iterable $groups) + private function calculateColumnsWidth(iterable $groups): void { for ($column = 0; $column < $this->numberOfColumns; ++$column) { $lengths = []; @@ -843,7 +847,7 @@ private function getCellWidth(array $row, int $column): int /** * Called after rendering to cleanup cache data. */ - private function cleanup() + private function cleanup(): void { $this->effectiveColumnWidths = []; unset($this->numberOfColumns); diff --git a/core/vendor/symfony/console/Helper/TableCellStyle.php b/core/vendor/symfony/console/Helper/TableCellStyle.php index 65ae9e7281..9419dcb402 100644 --- a/core/vendor/symfony/console/Helper/TableCellStyle.php +++ b/core/vendor/symfony/console/Helper/TableCellStyle.php @@ -67,9 +67,7 @@ public function getTagOptions(): array { return array_filter( $this->getOptions(), - function ($key) { - return \in_array($key, self::TAG_OPTIONS) && isset($this->options[$key]); - }, + fn ($key) => \in_array($key, self::TAG_OPTIONS) && isset($this->options[$key]), \ARRAY_FILTER_USE_KEY ); } diff --git a/core/vendor/symfony/console/Input/ArgvInput.php b/core/vendor/symfony/console/Input/ArgvInput.php index c0c28bb581..59f9217ec5 100644 --- a/core/vendor/symfony/console/Input/ArgvInput.php +++ b/core/vendor/symfony/console/Input/ArgvInput.php @@ -55,11 +55,17 @@ public function __construct(array $argv = null, InputDefinition $definition = nu parent::__construct($definition); } + /** + * @return void + */ protected function setTokens(array $tokens) { $this->tokens = $tokens; } + /** + * @return void + */ protected function parse() { $parseOptions = true; @@ -89,7 +95,7 @@ protected function parseToken(string $token, bool $parseOptions): bool /** * Parses a short option. */ - private function parseShortOption(string $token) + private function parseShortOption(string $token): void { $name = substr($token, 1); @@ -110,7 +116,7 @@ private function parseShortOption(string $token) * * @throws RuntimeException When option given doesn't exist */ - private function parseShortOptionSet(string $name) + private function parseShortOptionSet(string $name): void { $len = \strlen($name); for ($i = 0; $i < $len; ++$i) { @@ -133,7 +139,7 @@ private function parseShortOptionSet(string $name) /** * Parses a long option. */ - private function parseLongOption(string $token) + private function parseLongOption(string $token): void { $name = substr($token, 2); @@ -152,7 +158,7 @@ private function parseLongOption(string $token) * * @throws RuntimeException When too many arguments are given */ - private function parseArgument(string $token) + private function parseArgument(string $token): void { $c = \count($this->arguments); @@ -196,7 +202,7 @@ private function parseArgument(string $token) * * @throws RuntimeException When option given doesn't exist */ - private function addShortOption(string $shortcut, mixed $value) + private function addShortOption(string $shortcut, mixed $value): void { if (!$this->definition->hasShortcut($shortcut)) { throw new RuntimeException(sprintf('The "-%s" option does not exist.', $shortcut)); @@ -210,7 +216,7 @@ private function addShortOption(string $shortcut, mixed $value) * * @throws RuntimeException When option given doesn't exist */ - private function addLongOption(string $name, mixed $value) + private function addLongOption(string $name, mixed $value): void { if (!$this->definition->hasOption($name)) { if (!$this->definition->hasNegation($name)) { diff --git a/core/vendor/symfony/console/Input/ArrayInput.php b/core/vendor/symfony/console/Input/ArrayInput.php index 02fb4e8eef..355de61dd6 100644 --- a/core/vendor/symfony/console/Input/ArrayInput.php +++ b/core/vendor/symfony/console/Input/ArrayInput.php @@ -113,6 +113,9 @@ public function __toString(): string return implode(' ', $params); } + /** + * @return void + */ protected function parse() { foreach ($this->parameters as $key => $value) { @@ -134,7 +137,7 @@ protected function parse() * * @throws InvalidOptionException When option given doesn't exist */ - private function addShortOption(string $shortcut, mixed $value) + private function addShortOption(string $shortcut, mixed $value): void { if (!$this->definition->hasShortcut($shortcut)) { throw new InvalidOptionException(sprintf('The "-%s" option does not exist.', $shortcut)); @@ -149,7 +152,7 @@ private function addShortOption(string $shortcut, mixed $value) * @throws InvalidOptionException When option given doesn't exist * @throws InvalidOptionException When a required value is missing */ - private function addLongOption(string $name, mixed $value) + private function addLongOption(string $name, mixed $value): void { if (!$this->definition->hasOption($name)) { if (!$this->definition->hasNegation($name)) { @@ -182,7 +185,7 @@ private function addLongOption(string $name, mixed $value) * * @throws InvalidArgumentException When argument given doesn't exist */ - private function addArgument(string|int $name, mixed $value) + private function addArgument(string|int $name, mixed $value): void { if (!$this->definition->hasArgument($name)) { throw new InvalidArgumentException(sprintf('The "%s" argument does not exist.', $name)); diff --git a/core/vendor/symfony/console/Input/Input.php b/core/vendor/symfony/console/Input/Input.php index 7b90713c86..0f5617cd17 100644 --- a/core/vendor/symfony/console/Input/Input.php +++ b/core/vendor/symfony/console/Input/Input.php @@ -43,6 +43,9 @@ public function __construct(InputDefinition $definition = null) } } + /** + * @return void + */ public function bind(InputDefinition $definition) { $this->arguments = []; @@ -54,17 +57,20 @@ public function bind(InputDefinition $definition) /** * Processes command line arguments. + * + * @return void */ abstract protected function parse(); + /** + * @return void + */ public function validate() { $definition = $this->definition; $givenArguments = $this->arguments; - $missingArguments = array_filter(array_keys($definition->getArguments()), function ($argument) use ($definition, $givenArguments) { - return !\array_key_exists($argument, $givenArguments) && $definition->getArgument($argument)->isRequired(); - }); + $missingArguments = array_filter(array_keys($definition->getArguments()), fn ($argument) => !\array_key_exists($argument, $givenArguments) && $definition->getArgument($argument)->isRequired()); if (\count($missingArguments) > 0) { throw new RuntimeException(sprintf('Not enough arguments (missing: "%s").', implode(', ', $missingArguments))); @@ -76,6 +82,9 @@ public function isInteractive(): bool return $this->interactive; } + /** + * @return void + */ public function setInteractive(bool $interactive) { $this->interactive = $interactive; @@ -95,6 +104,9 @@ public function getArgument(string $name): mixed return $this->arguments[$name] ?? $this->definition->getArgument($name)->getDefault(); } + /** + * @return void + */ public function setArgument(string $name, mixed $value) { if (!$this->definition->hasArgument($name)) { @@ -131,6 +143,9 @@ public function getOption(string $name): mixed return \array_key_exists($name, $this->options) ? $this->options[$name] : $this->definition->getOption($name)->getDefault(); } + /** + * @return void + */ public function setOption(string $name, mixed $value) { if ($this->definition->hasNegation($name)) { @@ -157,11 +172,19 @@ public function escapeToken(string $token): string return preg_match('{^[\w-]+$}', $token) ? $token : escapeshellarg($token); } + /** + * @param resource $stream + * + * @return void + */ public function setStream($stream) { $this->stream = $stream; } + /** + * @return resource + */ public function getStream() { return $this->stream; diff --git a/core/vendor/symfony/console/Input/InputArgument.php b/core/vendor/symfony/console/Input/InputArgument.php index a130c41226..5cb151488d 100644 --- a/core/vendor/symfony/console/Input/InputArgument.php +++ b/core/vendor/symfony/console/Input/InputArgument.php @@ -37,7 +37,7 @@ class InputArgument /** * @param string $name The argument name - * @param int|null $mode The argument mode: self::REQUIRED or self::OPTIONAL + * @param int|null $mode The argument mode: a bit mask of self::REQUIRED, self::OPTIONAL and self::IS_ARRAY * @param string $description A description text * @param string|bool|int|float|array|null $default The default value (for self::OPTIONAL mode only) * @param array|\Closure(CompletionInput,CompletionSuggestions):list $suggestedValues The values used for input completion @@ -91,6 +91,8 @@ public function isArray(): bool /** * Sets the default value. * + * @return void + * * @throws LogicException When incorrect default value is given */ public function setDefault(string|bool|int|float|array $default = null) diff --git a/core/vendor/symfony/console/Input/InputAwareInterface.php b/core/vendor/symfony/console/Input/InputAwareInterface.php index 5a288de5d4..0ad27b4558 100644 --- a/core/vendor/symfony/console/Input/InputAwareInterface.php +++ b/core/vendor/symfony/console/Input/InputAwareInterface.php @@ -21,6 +21,8 @@ interface InputAwareInterface { /** * Sets the Console Input. + * + * @return void */ public function setInput(InputInterface $input); } diff --git a/core/vendor/symfony/console/Input/InputDefinition.php b/core/vendor/symfony/console/Input/InputDefinition.php index f4b14a1c89..b7162d7706 100644 --- a/core/vendor/symfony/console/Input/InputDefinition.php +++ b/core/vendor/symfony/console/Input/InputDefinition.php @@ -46,6 +46,8 @@ public function __construct(array $definition = []) /** * Sets the definition of the input. + * + * @return void */ public function setDefinition(array $definition) { @@ -67,6 +69,8 @@ public function setDefinition(array $definition) * Sets the InputArgument objects. * * @param InputArgument[] $arguments An array of InputArgument objects + * + * @return void */ public function setArguments(array $arguments = []) { @@ -81,6 +85,8 @@ public function setArguments(array $arguments = []) * Adds an array of InputArgument objects. * * @param InputArgument[] $arguments An array of InputArgument objects + * + * @return void */ public function addArguments(?array $arguments = []) { @@ -92,6 +98,8 @@ public function addArguments(?array $arguments = []) } /** + * @return void + * * @throws LogicException When incorrect argument is given */ public function addArgument(InputArgument $argument) @@ -190,6 +198,8 @@ public function getArgumentDefaults(): array * Sets the InputOption objects. * * @param InputOption[] $options An array of InputOption objects + * + * @return void */ public function setOptions(array $options = []) { @@ -203,6 +213,8 @@ public function setOptions(array $options = []) * Adds an array of InputOption objects. * * @param InputOption[] $options An array of InputOption objects + * + * @return void */ public function addOptions(array $options = []) { @@ -212,6 +224,8 @@ public function addOptions(array $options = []) } /** + * @return void + * * @throws LogicException When option given already exist */ public function addOption(InputOption $option) diff --git a/core/vendor/symfony/console/Input/InputInterface.php b/core/vendor/symfony/console/Input/InputInterface.php index 3af991a76f..aaed5fd01d 100644 --- a/core/vendor/symfony/console/Input/InputInterface.php +++ b/core/vendor/symfony/console/Input/InputInterface.php @@ -61,6 +61,8 @@ public function getParameterOption(string|array $values, string|bool|int|float|a /** * Binds the current Input instance with the given arguments and options. * + * @return void + * * @throws RuntimeException */ public function bind(InputDefinition $definition); @@ -68,6 +70,8 @@ public function bind(InputDefinition $definition); /** * Validates the input. * + * @return void + * * @throws RuntimeException When not enough arguments are given */ public function validate(); @@ -91,6 +95,8 @@ public function getArgument(string $name); /** * Sets an argument value by name. * + * @return void + * * @throws InvalidArgumentException When argument given doesn't exist */ public function setArgument(string $name, mixed $value); @@ -119,6 +125,8 @@ public function getOption(string $name); /** * Sets an option value by name. * + * @return void + * * @throws InvalidArgumentException When option given doesn't exist */ public function setOption(string $name, mixed $value); @@ -135,6 +143,8 @@ public function isInteractive(): bool; /** * Sets the input interactivity. + * + * @return void */ public function setInteractive(bool $interactive); } diff --git a/core/vendor/symfony/console/Input/InputOption.php b/core/vendor/symfony/console/Input/InputOption.php index 9a7032a030..fdf88dcc27 100644 --- a/core/vendor/symfony/console/Input/InputOption.php +++ b/core/vendor/symfony/console/Input/InputOption.php @@ -178,6 +178,9 @@ public function isNegatable(): bool return self::VALUE_NEGATABLE === (self::VALUE_NEGATABLE & $this->mode); } + /** + * @return void + */ public function setDefault(string|bool|int|float|array $default = null) { if (1 > \func_num_args()) { diff --git a/core/vendor/symfony/console/Input/StreamableInputInterface.php b/core/vendor/symfony/console/Input/StreamableInputInterface.php index d7e462f244..4b95fcb11e 100644 --- a/core/vendor/symfony/console/Input/StreamableInputInterface.php +++ b/core/vendor/symfony/console/Input/StreamableInputInterface.php @@ -25,6 +25,8 @@ interface StreamableInputInterface extends InputInterface * This is mainly useful for testing purpose. * * @param resource $stream The input stream + * + * @return void */ public function setStream($stream); diff --git a/core/vendor/symfony/console/Output/AnsiColorMode.php b/core/vendor/symfony/console/Output/AnsiColorMode.php index c6cc5c12f0..5f9f744fe6 100644 --- a/core/vendor/symfony/console/Output/AnsiColorMode.php +++ b/core/vendor/symfony/console/Output/AnsiColorMode.php @@ -26,7 +26,7 @@ enum AnsiColorMode case Ansi4; /* - * 8-bit Ansi colors (240 differents colors + 16 duplicate color codes, ensuring backward compatibility). + * 8-bit Ansi colors (240 different colors + 16 duplicate color codes, ensuring backward compatibility). * Output syntax is: "ESC[38;5;${foreGroundColorcode};48;5;${backGroundColorcode}m" * Should be compatible with most terminals. */ @@ -78,25 +78,7 @@ private function convertFromRGB(int $r, int $g, int $b): int private function degradeHexColorToAnsi4(int $r, int $g, int $b): int { - if (0 === round($this->getSaturation($r, $g, $b) / 50)) { - return 0; - } - - return (int) ((round($b / 255) << 2) | (round($g / 255) << 1) | round($r / 255)); - } - - private function getSaturation(int $r, int $g, int $b): int - { - $r = $r / 255; - $g = $g / 255; - $b = $b / 255; - $v = max($r, $g, $b); - - if (0 === $diff = $v - min($r, $g, $b)) { - return 0; - } - - return (int) ((int) $diff * 100 / $v); + return round($b / 255) << 2 | (round($g / 255) << 1) | round($r / 255); } /** diff --git a/core/vendor/symfony/console/Output/BufferedOutput.php b/core/vendor/symfony/console/Output/BufferedOutput.php index 94d4e414a0..ef5099bfd6 100644 --- a/core/vendor/symfony/console/Output/BufferedOutput.php +++ b/core/vendor/symfony/console/Output/BufferedOutput.php @@ -29,6 +29,9 @@ public function fetch(): string return $content; } + /** + * @return void + */ protected function doWrite(string $message, bool $newline) { $this->buffer .= $message; diff --git a/core/vendor/symfony/console/Output/ConsoleOutput.php b/core/vendor/symfony/console/Output/ConsoleOutput.php index e3aa92c7fc..c1eb7cd14b 100644 --- a/core/vendor/symfony/console/Output/ConsoleOutput.php +++ b/core/vendor/symfony/console/Output/ConsoleOutput.php @@ -64,18 +64,27 @@ public function section(): ConsoleSectionOutput return new ConsoleSectionOutput($this->getStream(), $this->consoleSectionOutputs, $this->getVerbosity(), $this->isDecorated(), $this->getFormatter()); } + /** + * @return void + */ public function setDecorated(bool $decorated) { parent::setDecorated($decorated); $this->stderr->setDecorated($decorated); } + /** + * @return void + */ public function setFormatter(OutputFormatterInterface $formatter) { parent::setFormatter($formatter); $this->stderr->setFormatter($formatter); } + /** + * @return void + */ public function setVerbosity(int $level) { parent::setVerbosity($level); @@ -87,6 +96,9 @@ public function getErrorOutput(): OutputInterface return $this->stderr; } + /** + * @return void + */ public function setErrorOutput(OutputInterface $error) { $this->stderr = $error; diff --git a/core/vendor/symfony/console/Output/ConsoleOutputInterface.php b/core/vendor/symfony/console/Output/ConsoleOutputInterface.php index 6b4babc6dd..9c0049c8f9 100644 --- a/core/vendor/symfony/console/Output/ConsoleOutputInterface.php +++ b/core/vendor/symfony/console/Output/ConsoleOutputInterface.php @@ -24,6 +24,9 @@ interface ConsoleOutputInterface extends OutputInterface */ public function getErrorOutput(): OutputInterface; + /** + * @return void + */ public function setErrorOutput(OutputInterface $error); public function section(): ConsoleSectionOutput; diff --git a/core/vendor/symfony/console/Output/ConsoleSectionOutput.php b/core/vendor/symfony/console/Output/ConsoleSectionOutput.php index c813c811ce..3f3f1434be 100644 --- a/core/vendor/symfony/console/Output/ConsoleSectionOutput.php +++ b/core/vendor/symfony/console/Output/ConsoleSectionOutput.php @@ -60,6 +60,8 @@ public function setMaxHeight(int $maxHeight): void * Clears previous output for this section. * * @param int $lines Number of lines to clear. If null, then the entire output of this section is cleared + * + * @return void */ public function clear(int $lines = null) { @@ -81,6 +83,8 @@ public function clear(int $lines = null) /** * Overwrites the previous output with a new message. + * + * @return void */ public function overwrite(string|iterable $message) { @@ -153,12 +157,15 @@ public function addContent(string $input, bool $newline = true): int /** * @internal */ - public function addNewLineOfInputSubmit() + public function addNewLineOfInputSubmit(): void { $this->content[] = \PHP_EOL; ++$this->lines; } + /** + * @return void + */ protected function doWrite(string $message, bool $newline) { if (!$this->isDecorated()) { diff --git a/core/vendor/symfony/console/Output/NullOutput.php b/core/vendor/symfony/console/Output/NullOutput.php index 4884cbad90..f3aa15b1d4 100644 --- a/core/vendor/symfony/console/Output/NullOutput.php +++ b/core/vendor/symfony/console/Output/NullOutput.php @@ -26,6 +26,9 @@ class NullOutput implements OutputInterface { private NullOutputFormatter $formatter; + /** + * @return void + */ public function setFormatter(OutputFormatterInterface $formatter) { // do nothing @@ -37,6 +40,9 @@ public function getFormatter(): OutputFormatterInterface return $this->formatter ??= new NullOutputFormatter(); } + /** + * @return void + */ public function setDecorated(bool $decorated) { // do nothing @@ -47,6 +53,9 @@ public function isDecorated(): bool return false; } + /** + * @return void + */ public function setVerbosity(int $level) { // do nothing @@ -77,11 +86,17 @@ public function isDebug(): bool return false; } + /** + * @return void + */ public function writeln(string|iterable $messages, int $options = self::OUTPUT_NORMAL) { // do nothing } + /** + * @return void + */ public function write(string|iterable $messages, bool $newline = false, int $options = self::OUTPUT_NORMAL) { // do nothing diff --git a/core/vendor/symfony/console/Output/Output.php b/core/vendor/symfony/console/Output/Output.php index 4cb71acbad..3a06311a8b 100644 --- a/core/vendor/symfony/console/Output/Output.php +++ b/core/vendor/symfony/console/Output/Output.php @@ -44,6 +44,9 @@ public function __construct(?int $verbosity = self::VERBOSITY_NORMAL, bool $deco $this->formatter->setDecorated($decorated); } + /** + * @return void + */ public function setFormatter(OutputFormatterInterface $formatter) { $this->formatter = $formatter; @@ -54,6 +57,9 @@ public function getFormatter(): OutputFormatterInterface return $this->formatter; } + /** + * @return void + */ public function setDecorated(bool $decorated) { $this->formatter->setDecorated($decorated); @@ -64,6 +70,9 @@ public function isDecorated(): bool return $this->formatter->isDecorated(); } + /** + * @return void + */ public function setVerbosity(int $level) { $this->verbosity = $level; @@ -94,11 +103,17 @@ public function isDebug(): bool return self::VERBOSITY_DEBUG <= $this->verbosity; } + /** + * @return void + */ public function writeln(string|iterable $messages, int $options = self::OUTPUT_NORMAL) { $this->write($messages, true, $options); } + /** + * @return void + */ public function write(string|iterable $messages, bool $newline = false, int $options = self::OUTPUT_NORMAL) { if (!is_iterable($messages)) { @@ -133,6 +148,8 @@ public function write(string|iterable $messages, bool $newline = false, int $opt /** * Writes a message to the output. + * + * @return void */ abstract protected function doWrite(string $message, bool $newline); } diff --git a/core/vendor/symfony/console/Output/OutputInterface.php b/core/vendor/symfony/console/Output/OutputInterface.php index bc927c51e9..fb1557720f 100644 --- a/core/vendor/symfony/console/Output/OutputInterface.php +++ b/core/vendor/symfony/console/Output/OutputInterface.php @@ -36,6 +36,8 @@ interface OutputInterface * @param bool $newline Whether to add a newline * @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), * 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL + * + * @return void */ public function write(string|iterable $messages, bool $newline = false, int $options = 0); @@ -44,11 +46,15 @@ public function write(string|iterable $messages, bool $newline = false, int $opt * * @param int $options A bitmask of options (one of the OUTPUT or VERBOSITY constants), * 0 is considered the same as self::OUTPUT_NORMAL | self::VERBOSITY_NORMAL + * + * @return void */ public function writeln(string|iterable $messages, int $options = 0); /** * Sets the verbosity of the output. + * + * @return void */ public function setVerbosity(int $level); @@ -79,6 +85,8 @@ public function isDebug(): bool; /** * Sets the decorated flag. + * + * @return void */ public function setDecorated(bool $decorated); @@ -87,6 +95,9 @@ public function setDecorated(bool $decorated); */ public function isDecorated(): bool; + /** + * @return void + */ public function setFormatter(OutputFormatterInterface $formatter); /** diff --git a/core/vendor/symfony/console/Output/StreamOutput.php b/core/vendor/symfony/console/Output/StreamOutput.php index 9ec524e4d2..155066ea0e 100644 --- a/core/vendor/symfony/console/Output/StreamOutput.php +++ b/core/vendor/symfony/console/Output/StreamOutput.php @@ -62,6 +62,9 @@ public function getStream() return $this->stream; } + /** + * @return void + */ protected function doWrite(string $message, bool $newline) { if ($newline) { diff --git a/core/vendor/symfony/console/Output/TrimmedBufferOutput.php b/core/vendor/symfony/console/Output/TrimmedBufferOutput.php index 1ca5a13e82..b00445ece8 100644 --- a/core/vendor/symfony/console/Output/TrimmedBufferOutput.php +++ b/core/vendor/symfony/console/Output/TrimmedBufferOutput.php @@ -45,6 +45,9 @@ public function fetch(): string return $content; } + /** + * @return void + */ protected function doWrite(string $message, bool $newline) { $this->buffer .= $message; diff --git a/core/vendor/symfony/console/Question/Question.php b/core/vendor/symfony/console/Question/Question.php index b06db9459b..26896bb531 100644 --- a/core/vendor/symfony/console/Question/Question.php +++ b/core/vendor/symfony/console/Question/Question.php @@ -146,12 +146,11 @@ public function setAutocompleterValues(?iterable $values): static if (\is_array($values)) { $values = $this->isAssoc($values) ? array_merge(array_keys($values), array_values($values)) : array_values($values); - $callback = static function () use ($values) { - return $values; - }; + $callback = static fn () => $values; } elseif ($values instanceof \Traversable) { - $valueCache = null; - $callback = static function () use ($values, &$valueCache) { + $callback = static function () use ($values) { + static $valueCache; + return $valueCache ??= iterator_to_array($values, false); }; } else { @@ -267,6 +266,9 @@ public function getNormalizer(): ?callable return $this->normalizer; } + /** + * @return bool + */ protected function isAssoc(array $array) { return (bool) \count(array_filter(array_keys($array), 'is_string')); diff --git a/core/vendor/symfony/console/README.md b/core/vendor/symfony/console/README.md index c89b4a1a20..bfd4881092 100644 --- a/core/vendor/symfony/console/README.md +++ b/core/vendor/symfony/console/README.md @@ -4,6 +4,18 @@ Console Component The Console component eases the creation of beautiful and testable command line interfaces. +Sponsor +------- + +The Console component for Symfony 6.3 is [backed][1] by [Les-Tilleuls.coop][2]. + +Les-Tilleuls.coop is a team of 70+ Symfony experts who can help you design, develop and +fix your projects. They provide a wide range of professional services including development, +consulting, coaching, training and audits. They also are highly skilled in JS, Go and DevOps. +They are a worker cooperative! + +Help Symfony by [sponsoring][3] its development! + Resources --------- @@ -18,3 +30,7 @@ Credits `Resources/bin/hiddeninput.exe` is a third party binary provided within this component. Find sources and license at https://github.com/Seldaek/hidden-input. + +[1]: https://symfony.com/backers +[2]: https://les-tilleuls.coop +[3]: https://symfony.com/sponsor diff --git a/core/vendor/symfony/console/Resources/completion.bash b/core/vendor/symfony/console/Resources/completion.bash index ad69eab0ff..0d76eacc3b 100644 --- a/core/vendor/symfony/console/Resources/completion.bash +++ b/core/vendor/symfony/console/Resources/completion.bash @@ -6,6 +6,16 @@ # https://symfony.com/doc/current/contributing/code/license.html _sf_{{ COMMAND_NAME }}() { + + # Use the default completion for shell redirect operators. + for w in '>' '>>' '&>' '<'; do + if [[ $w = "${COMP_WORDS[COMP_CWORD-1]}" ]]; then + compopt -o filenames + COMPREPLY=($(compgen -f -- "${COMP_WORDS[COMP_CWORD]}")) + return 0 + fi + done + # Use newline as only separator to allow space in completion values IFS=$'\n' local sf_cmd="${COMP_WORDS[0]}" diff --git a/core/vendor/symfony/console/Style/OutputStyle.php b/core/vendor/symfony/console/Style/OutputStyle.php index b694bb53a7..ddfa8decc2 100644 --- a/core/vendor/symfony/console/Style/OutputStyle.php +++ b/core/vendor/symfony/console/Style/OutputStyle.php @@ -30,6 +30,9 @@ public function __construct(OutputInterface $output) $this->output = $output; } + /** + * @return void + */ public function newLine(int $count = 1) { $this->output->write(str_repeat(\PHP_EOL, $count)); @@ -40,16 +43,25 @@ public function createProgressBar(int $max = 0): ProgressBar return new ProgressBar($this->output, $max); } + /** + * @return void + */ public function write(string|iterable $messages, bool $newline = false, int $type = self::OUTPUT_NORMAL) { $this->output->write($messages, $newline, $type); } + /** + * @return void + */ public function writeln(string|iterable $messages, int $type = self::OUTPUT_NORMAL) { $this->output->writeln($messages, $type); } + /** + * @return void + */ public function setVerbosity(int $level) { $this->output->setVerbosity($level); @@ -60,6 +72,9 @@ public function getVerbosity(): int return $this->output->getVerbosity(); } + /** + * @return void + */ public function setDecorated(bool $decorated) { $this->output->setDecorated($decorated); @@ -70,6 +85,9 @@ public function isDecorated(): bool return $this->output->isDecorated(); } + /** + * @return void + */ public function setFormatter(OutputFormatterInterface $formatter) { $this->output->setFormatter($formatter); @@ -100,6 +118,9 @@ public function isDebug(): bool return $this->output->isDebug(); } + /** + * @return OutputInterface + */ protected function getErrorOutput() { if (!$this->output instanceof ConsoleOutputInterface) { diff --git a/core/vendor/symfony/console/Style/StyleInterface.php b/core/vendor/symfony/console/Style/StyleInterface.php index 0bb1233946..e25a65bd24 100644 --- a/core/vendor/symfony/console/Style/StyleInterface.php +++ b/core/vendor/symfony/console/Style/StyleInterface.php @@ -20,51 +20,71 @@ interface StyleInterface { /** * Formats a command title. + * + * @return void */ public function title(string $message); /** * Formats a section title. + * + * @return void */ public function section(string $message); /** * Formats a list. + * + * @return void */ public function listing(array $elements); /** * Formats informational text. + * + * @return void */ public function text(string|array $message); /** * Formats a success result bar. + * + * @return void */ public function success(string|array $message); /** * Formats an error result bar. + * + * @return void */ public function error(string|array $message); /** * Formats an warning result bar. + * + * @return void */ public function warning(string|array $message); /** * Formats a note admonition. + * + * @return void */ public function note(string|array $message); /** * Formats a caution admonition. + * + * @return void */ public function caution(string|array $message); /** * Formats a table. + * + * @return void */ public function table(array $headers, array $rows); @@ -90,21 +110,29 @@ public function choice(string $question, array $choices, mixed $default = null): /** * Add newline(s). + * + * @return void */ public function newLine(int $count = 1); /** * Starts the progress output. + * + * @return void */ public function progressStart(int $max = 0); /** * Advances the progress output X steps. + * + * @return void */ public function progressAdvance(int $step = 1); /** * Finishes the progress output. + * + * @return void */ public function progressFinish(); } diff --git a/core/vendor/symfony/console/Style/SymfonyStyle.php b/core/vendor/symfony/console/Style/SymfonyStyle.php index 8fd6f849f9..cecce6c01b 100644 --- a/core/vendor/symfony/console/Style/SymfonyStyle.php +++ b/core/vendor/symfony/console/Style/SymfonyStyle.php @@ -60,6 +60,8 @@ public function __construct(InputInterface $input, OutputInterface $output) /** * Formats a message as a block of text. + * + * @return void */ public function block(string|array $messages, string $type = null, string $style = null, string $prefix = ' ', bool $padding = false, bool $escape = true) { @@ -70,6 +72,9 @@ public function block(string|array $messages, string $type = null, string $style $this->newLine(); } + /** + * @return void + */ public function title(string $message) { $this->autoPrependBlock(); @@ -80,6 +85,9 @@ public function title(string $message) $this->newLine(); } + /** + * @return void + */ public function section(string $message) { $this->autoPrependBlock(); @@ -90,17 +98,21 @@ public function section(string $message) $this->newLine(); } + /** + * @return void + */ public function listing(array $elements) { $this->autoPrependText(); - $elements = array_map(function ($element) { - return sprintf(' * %s', $element); - }, $elements); + $elements = array_map(fn ($element) => sprintf(' * %s', $element), $elements); $this->writeln($elements); $this->newLine(); } + /** + * @return void + */ public function text(string|array $message) { $this->autoPrependText(); @@ -113,27 +125,41 @@ public function text(string|array $message) /** * Formats a command comment. + * + * @return void */ public function comment(string|array $message) { $this->block($message, null, null, ' // ', false, false); } + /** + * @return void + */ public function success(string|array $message) { $this->block($message, 'OK', 'fg=black;bg=green', ' ', true); } + /** + * @return void + */ public function error(string|array $message) { $this->block($message, 'ERROR', 'fg=white;bg=red', ' ', true); } + /** + * @return void + */ public function warning(string|array $message) { $this->block($message, 'WARNING', 'fg=black;bg=yellow', ' ', true); } + /** + * @return void + */ public function note(string|array $message) { $this->block($message, 'NOTE', 'fg=yellow', ' ! '); @@ -141,17 +167,25 @@ public function note(string|array $message) /** * Formats an info message. + * + * @return void */ public function info(string|array $message) { $this->block($message, 'INFO', 'fg=green', ' ', true); } + /** + * @return void + */ public function caution(string|array $message) { $this->block($message, 'CAUTION', 'fg=white;bg=red', ' ! ', true); } + /** + * @return void + */ public function table(array $headers, array $rows) { $this->createTable() @@ -165,6 +199,8 @@ public function table(array $headers, array $rows) /** * Formats a horizontal table. + * + * @return void */ public function horizontalTable(array $headers, array $rows) { @@ -185,6 +221,8 @@ public function horizontalTable(array $headers, array $rows) * * 'A title' * * ['key' => 'value'] * * new TableSeparator() + * + * @return void */ public function definitionList(string|array|TableSeparator ...$list) { @@ -247,17 +285,26 @@ public function choice(string $question, array $choices, mixed $default = null, return $this->askQuestion($questionChoice); } + /** + * @return void + */ public function progressStart(int $max = 0) { $this->progressBar = $this->createProgressBar($max); $this->progressBar->start(); } + /** + * @return void + */ public function progressAdvance(int $step = 1) { $this->getProgressBar()->advance($step); } + /** + * @return void + */ public function progressFinish() { $this->getProgressBar()->finish(); @@ -311,6 +358,9 @@ public function askQuestion(Question $question): mixed return $answer; } + /** + * @return void + */ public function writeln(string|iterable $messages, int $type = self::OUTPUT_NORMAL) { if (!is_iterable($messages)) { @@ -323,6 +373,9 @@ public function writeln(string|iterable $messages, int $type = self::OUTPUT_NORM } } + /** + * @return void + */ public function write(string|iterable $messages, bool $newline = false, int $type = self::OUTPUT_NORMAL) { if (!is_iterable($messages)) { @@ -335,6 +388,9 @@ public function write(string|iterable $messages, bool $newline = false, int $typ } } + /** + * @return void + */ public function newLine(int $count = 1) { parent::newLine($count); @@ -381,7 +437,7 @@ private function autoPrependText(): void { $fetched = $this->bufferedOutput->fetch(); // Prepend new line if last char isn't EOL: - if (!str_ends_with($fetched, "\n")) { + if ($fetched && !str_ends_with($fetched, "\n")) { $this->newLine(); } } diff --git a/core/vendor/symfony/console/Terminal.php b/core/vendor/symfony/console/Terminal.php index 7d10b13ad5..3eda0376be 100644 --- a/core/vendor/symfony/console/Terminal.php +++ b/core/vendor/symfony/console/Terminal.php @@ -123,17 +123,15 @@ public static function hasSttyAvailable(): bool return self::$stty; } - // skip check if exec function is disabled - if (!\function_exists('exec')) { + // skip check if shell_exec function is disabled + if (!\function_exists('shell_exec')) { return false; } - exec('stty 2>&1', $output, $exitcode); - - return self::$stty = 0 === $exitcode; + return self::$stty = (bool) shell_exec('stty 2> '.('\\' === \DIRECTORY_SEPARATOR ? 'NUL' : '/dev/null')); } - private static function initDimensions() + private static function initDimensions(): void { if ('\\' === \DIRECTORY_SEPARATOR) { $ansicon = getenv('ANSICON'); @@ -167,7 +165,7 @@ private static function hasVt100Support(): bool /** * Initializes dimensions using the output of an stty columns line. */ - private static function initDimensionsUsingStty() + private static function initDimensionsUsingStty(): void { if ($sttyString = self::getSttyColumns()) { if (preg_match('/rows.(\d+);.columns.(\d+);/is', $sttyString, $matches)) { diff --git a/core/vendor/symfony/console/Tester/TesterTrait.php b/core/vendor/symfony/console/Tester/TesterTrait.php index 9670a49686..497b8c8c77 100644 --- a/core/vendor/symfony/console/Tester/TesterTrait.php +++ b/core/vendor/symfony/console/Tester/TesterTrait.php @@ -128,7 +128,7 @@ public function setInputs(array $inputs): static * * verbosity: Sets the output verbosity flag * * capture_stderr_separately: Make output of stdOut and stdErr separately available */ - private function initOutput(array $options) + private function initOutput(array $options): void { $this->captureStreamsIndependently = \array_key_exists('capture_stderr_separately', $options) && $options['capture_stderr_separately']; if (!$this->captureStreamsIndependently) { diff --git a/core/vendor/symfony/console/composer.json b/core/vendor/symfony/console/composer.json index 6cc6166d58..c34421299e 100644 --- a/core/vendor/symfony/console/composer.json +++ b/core/vendor/symfony/console/composer.json @@ -17,9 +17,9 @@ ], "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/string": "^5.4|^6.0" }, "require-dev": { @@ -34,12 +34,6 @@ "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, - "suggest": { - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "", - "psr/log": "For using the console logger" - }, "conflict": { "symfony/dependency-injection": "<5.4", "symfony/dotenv": "<5.4", diff --git a/core/vendor/symfony/deprecation-contracts/composer.json b/core/vendor/symfony/deprecation-contracts/composer.json index 774200fdcd..c6d02d8749 100644 --- a/core/vendor/symfony/deprecation-contracts/composer.json +++ b/core/vendor/symfony/deprecation-contracts/composer.json @@ -25,7 +25,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", diff --git a/core/vendor/symfony/deprecation-contracts/function.php b/core/vendor/symfony/deprecation-contracts/function.php index d4371504a0..2d56512ba3 100644 --- a/core/vendor/symfony/deprecation-contracts/function.php +++ b/core/vendor/symfony/deprecation-contracts/function.php @@ -20,7 +20,7 @@ * * @author Nicolas Grekas */ - function trigger_deprecation(string $package, string $version, string $message, ...$args): void + function trigger_deprecation(string $package, string $version, string $message, mixed ...$args): void { @trigger_error(($package || $version ? "Since $package $version: " : '').($args ? vsprintf($message, $args) : $message), \E_USER_DEPRECATED); } diff --git a/core/vendor/symfony/error-handler/CHANGELOG.md b/core/vendor/symfony/error-handler/CHANGELOG.md index 9d2ee803f9..d753991b3a 100644 --- a/core/vendor/symfony/error-handler/CHANGELOG.md +++ b/core/vendor/symfony/error-handler/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +6.3 +--- + + * Display exception properties in the HTML error page + 6.1 --- diff --git a/core/vendor/symfony/error-handler/DebugClassLoader.php b/core/vendor/symfony/error-handler/DebugClassLoader.php index 1b4aae1d9b..16af2d0632 100644 --- a/core/vendor/symfony/error-handler/DebugClassLoader.php +++ b/core/vendor/symfony/error-handler/DebugClassLoader.php @@ -21,7 +21,6 @@ use Prophecy\Prophecy\ProphecySubjectInterface; use ProxyManager\Proxy\ProxyInterface; use Symfony\Component\ErrorHandler\Internal\TentativeTypes; -use Symfony\Component\HttpClient\HttplugClient; use Symfony\Component\VarExporter\LazyObjectInterface; /** @@ -135,7 +134,7 @@ public function __construct(callable $classLoader) { $this->classLoader = $classLoader; $this->isFinder = \is_array($classLoader) && method_exists($classLoader[0], 'findFile'); - parse_str(getenv('SYMFONY_PATCH_TYPE_DECLARATIONS') ?: '', $this->patchTypes); + parse_str($_ENV['SYMFONY_PATCH_TYPE_DECLARATIONS'] ?? $_SERVER['SYMFONY_PATCH_TYPE_DECLARATIONS'] ?? getenv('SYMFONY_PATCH_TYPE_DECLARATIONS') ?: '', $this->patchTypes); $this->patchTypes += [ 'force' => null, 'php' => \PHP_MAJOR_VERSION.'.'.\PHP_MINOR_VERSION, @@ -385,7 +384,7 @@ public function checkAnnotations(\ReflectionClass $refl, string $class): array // Detect annotations on the class if ($doc = $this->parsePhpDoc($refl)) { - $classIsTemplate = isset($doc['template']); + $classIsTemplate = isset($doc['template']) || isset($doc['template-covariant']); foreach (['final', 'deprecated', 'internal'] as $annotation) { if (null !== $description = $doc[$annotation][0] ?? null) { @@ -422,9 +421,7 @@ public function checkAnnotations(\ReflectionClass $refl, string $class): array if (!isset(self::$checkedClasses[$use])) { $this->checkClass($use); } - if (isset(self::$deprecated[$use]) && strncmp($vendor, str_replace('_', '\\', $use), $vendorLen) && !isset(self::$deprecated[$class]) - && !(HttplugClient::class === $class && \in_array($use, [\Http\Message\RequestFactory::class, \Http\Message\StreamFactory::class, \Http\Message\UriFactory::class], true)) - ) { + if (isset(self::$deprecated[$use]) && strncmp($vendor, str_replace('_', '\\', $use), $vendorLen) && !isset(self::$deprecated[$class])) { $type = class_exists($class, false) ? 'class' : (interface_exists($class, false) ? 'interface' : 'trait'); $verb = class_exists($use, false) || interface_exists($class, false) ? 'extends' : (interface_exists($use, false) ? 'implements' : 'uses'); @@ -534,7 +531,7 @@ public function checkAnnotations(\ReflectionClass $refl, string $class): array // To read method annotations $doc = $this->parsePhpDoc($method); - if (($classIsTemplate || isset($doc['template'])) && $method->hasReturnType()) { + if (($classIsTemplate || isset($doc['template']) || isset($doc['template-covariant'])) && $method->hasReturnType()) { unset($doc['return']); } @@ -761,7 +758,7 @@ private function darwinRealpath(string $real): string if ('.' !== $f[0]) { $dirFiles[$f] = $f; if ($f === $file) { - $kFile = $k = $file; + $kFile = $file; } elseif ($f !== $k = strtolower($f)) { $dirFiles[$k] = $f; } @@ -933,7 +930,7 @@ private function normalizeType(string $type, string $class, ?string $parent, ?\R /** * Utility method to add #[ReturnTypeWillChange] where php triggers deprecations. */ - private function patchReturnTypeWillChange(\ReflectionMethod $method) + private function patchReturnTypeWillChange(\ReflectionMethod $method): void { if (\count($method->getAttributes(\ReturnTypeWillChange::class))) { return; @@ -961,7 +958,7 @@ private function patchReturnTypeWillChange(\ReflectionMethod $method) /** * Utility method to add @return annotations to the Symfony code-base where it triggers self-deprecations. */ - private function patchMethod(\ReflectionMethod $method, string $returnType, string $declaringFile, string $normalizedType) + private function patchMethod(\ReflectionMethod $method, string $returnType, string $declaringFile, string $normalizedType): void { static $patchedMethods = []; static $useStatements = []; @@ -1100,7 +1097,7 @@ private static function getUseStatements(string $file): array return [$namespace, $useOffset, $useMap]; } - private function fixReturnStatements(\ReflectionMethod $method, string $returnType) + private function fixReturnStatements(\ReflectionMethod $method, string $returnType): void { if ('docblock' !== $this->patchTypes['force']) { if ('7.1' === $this->patchTypes['php'] && 'object' === ltrim($returnType, '?')) { diff --git a/core/vendor/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php b/core/vendor/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php index 153819f2a0..2191e63bb0 100644 --- a/core/vendor/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php +++ b/core/vendor/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php @@ -140,7 +140,7 @@ private function convertFileToClass(string $path, string $file, string $prefix): ]; if ($prefix) { - $candidates = array_filter($candidates, function ($candidate) use ($prefix) { return str_starts_with($candidate, $prefix); }); + $candidates = array_filter($candidates, fn ($candidate) => str_starts_with($candidate, $prefix)); } // We cannot use the autoloader here as most of them use require; but if the class diff --git a/core/vendor/symfony/error-handler/ErrorHandler.php b/core/vendor/symfony/error-handler/ErrorHandler.php index 0bf1ef6aec..bda939a828 100644 --- a/core/vendor/symfony/error-handler/ErrorHandler.php +++ b/core/vendor/symfony/error-handler/ErrorHandler.php @@ -452,11 +452,10 @@ public function handleError(int $type, string $message, string $file, int $line) if ($throw || $this->tracedErrors & $type) { $backtrace = $errorAsException->getTrace(); - $lightTrace = $this->cleanTrace($backtrace, $type, $file, $line, $throw); - ($this->configureException)($errorAsException, $lightTrace, $file, $line); + $backtrace = $this->cleanTrace($backtrace, $type, $file, $line, $throw); + ($this->configureException)($errorAsException, $backtrace, $file, $line); } else { ($this->configureException)($errorAsException, []); - $backtrace = []; } } @@ -484,7 +483,7 @@ public function handleError(int $type, string $message, string $file, int $line) * * @internal */ - public function handleException(\Throwable $exception) + public function handleException(\Throwable $exception): void { $handlerException = null; @@ -535,7 +534,9 @@ public function handleException(\Throwable $exception) try { if (null !== $exceptionHandler) { - return $exceptionHandler($exception); + $exceptionHandler($exception); + + return; } $handlerException ??= $exception; } catch (\Throwable $handlerException) { @@ -722,8 +723,6 @@ private function cleanTrace(array $backtrace, int $type, string &$file, int &$li */ private function parseAnonymousClass(string $message): string { - return preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', static function ($m) { - return class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0]; - }, $message); + return preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', static fn ($m) => class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0], $message); } } diff --git a/core/vendor/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php b/core/vendor/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php index 57f34d8fca..ac50cd8c7e 100644 --- a/core/vendor/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php +++ b/core/vendor/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php @@ -17,6 +17,8 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Debug\FileLinkFormatter; use Symfony\Component\HttpKernel\Log\DebugLoggerInterface; +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Dumper\HtmlDumper; /** * @author Yonel Ceruto @@ -67,7 +69,7 @@ public function render(\Throwable $exception): FlattenException $headers['X-Debug-Exception-File'] = rawurlencode($exception->getFile()).':'.$exception->getLine(); } - $exception = FlattenException::createFromThrowable($exception, null, $headers); + $exception = FlattenException::createWithDataRepresentation($exception, null, $headers); return $exception->setAsString($this->renderException($exception)); } @@ -147,6 +149,14 @@ private function renderException(FlattenException $exception, string $debugTempl ]); } + private function dumpValue(Data $value): string + { + $dumper = new HtmlDumper(); + $dumper->setTheme('light'); + + return $dumper->dump($value, true); + } + private function formatArgs(array $args): string { $result = []; @@ -171,7 +181,7 @@ private function formatArgs(array $args): string return implode(', ', $result); } - private function formatArgsAsText(array $args) + private function formatArgsAsText(array $args): string { return strip_tags($this->formatArgs($args)); } @@ -255,9 +265,7 @@ private function fileExcerpt(string $file, int $line, int $srcContext = 3): stri // remove main code/span tags $code = preg_replace('#^\s*(.*)\s*#s', '\\1', $code); // split multiline spans - $code = preg_replace_callback('#]++)>((?:[^<]*+
)++[^<]*+)
#', function ($m) { - return "".str_replace('
', "

", $m[2]).''; - }, $code); + $code = preg_replace_callback('#]++)>((?:[^<]*+
)++[^<]*+)
#', fn ($m) => "".str_replace('
', "

", $m[2]).'', $code); $content = explode('
', $code); $lines = []; @@ -275,7 +283,7 @@ private function fileExcerpt(string $file, int $line, int $srcContext = 3): stri return ''; } - private function fixCodeMarkup(string $line) + private function fixCodeMarkup(string $line): string { // ending tag from previous line $opening = strpos($line, 'formatFile($match[2], $match[3]); - }, $text); + return preg_replace_callback('/in ("|")?(.+?)\1(?: +(?:on|at))? +line (\d+)/s', fn ($match) => 'in '.$this->formatFile($match[2], $match[3]), $text); } - private function formatLogMessage(string $message, array $context) + private function formatLogMessage(string $message, array $context): string { if ($context && str_contains($message, '{')) { $replacements = []; diff --git a/core/vendor/symfony/error-handler/Exception/FlattenException.php b/core/vendor/symfony/error-handler/Exception/FlattenException.php index 19d69fee00..ab62b1be36 100644 --- a/core/vendor/symfony/error-handler/Exception/FlattenException.php +++ b/core/vendor/symfony/error-handler/Exception/FlattenException.php @@ -14,6 +14,10 @@ use Symfony\Component\HttpFoundation\Exception\RequestExceptionInterface; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpExceptionInterface; +use Symfony\Component\VarDumper\Caster\Caster; +use Symfony\Component\VarDumper\Cloner\Data; +use Symfony\Component\VarDumper\Cloner\Stub; +use Symfony\Component\VarDumper\Cloner\VarCloner; /** * FlattenException wraps a PHP Error or Exception to be able to serialize it. @@ -36,6 +40,7 @@ class FlattenException private string $file; private int $line; private ?string $asString = null; + private Data $dataRepresentation; public static function create(\Exception $exception, int $statusCode = null, array $headers = []): static { @@ -80,6 +85,33 @@ public static function createFromThrowable(\Throwable $exception, int $statusCod return $e; } + public static function createWithDataRepresentation(\Throwable $throwable, int $statusCode = null, array $headers = [], VarCloner $cloner = null): static + { + $e = static::createFromThrowable($throwable, $statusCode, $headers); + + static $defaultCloner; + + if (!$cloner ??= $defaultCloner) { + $cloner = $defaultCloner = new VarCloner(); + $cloner->addCasters([ + \Throwable::class => function (\Throwable $e, array $a, Stub $s, bool $isNested): array { + if (!$isNested) { + unset($a[Caster::PREFIX_PROTECTED.'message']); + unset($a[Caster::PREFIX_PROTECTED.'code']); + unset($a[Caster::PREFIX_PROTECTED.'file']); + unset($a[Caster::PREFIX_PROTECTED.'line']); + unset($a["\0Error\0trace"], $a["\0Exception\0trace"]); + unset($a["\0Error\0previous"], $a["\0Exception\0previous"]); + } + + return $a; + }, + ]); + } + + return $e->setDataRepresentation($cloner->cloneVar($throwable)); + } + public function toArray(): array { $exceptions = []; @@ -88,6 +120,7 @@ public function toArray(): array 'message' => $exception->getMessage(), 'class' => $exception->getClass(), 'trace' => $exception->getTrace(), + 'data' => $exception->getDataRepresentation(), ]; } @@ -195,9 +228,7 @@ public function getMessage(): string public function setMessage(string $message): static { if (str_contains($message, "@anonymous\0")) { - $message = preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) { - return class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0]; - }, $message); + $message = preg_replace_callback('/[a-zA-Z_\x7f-\xff][\\\\a-zA-Z0-9_\x7f-\xff]*+@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', fn ($m) => class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0])) ?: 'class').'@anonymous' : $m[0], $message); } $this->message = $message; @@ -307,6 +338,21 @@ public function setTrace(array $trace, ?string $file, ?int $line): static return $this; } + public function getDataRepresentation(): ?Data + { + return $this->dataRepresentation ?? null; + } + + /** + * @return $this + */ + public function setDataRepresentation(Data $data): static + { + $this->dataRepresentation = $data; + + return $this; + } + private function flattenArgs(array $args, int $level = 0, int &$count = 0): array { $result = []; diff --git a/core/vendor/symfony/error-handler/Resources/assets/css/exception.css b/core/vendor/symfony/error-handler/Resources/assets/css/exception.css index 7cb3206da2..3e6eae5a92 100644 --- a/core/vendor/symfony/error-handler/Resources/assets/css/exception.css +++ b/core/vendor/symfony/error-handler/Resources/assets/css/exception.css @@ -9,12 +9,23 @@ --color-warning: #a46a1f; --color-error: #b0413e; --color-muted: #999; - --tab-background: #fff; + --tab-background: #f0f0f0; + --tab-border-color: #e5e5e5; + --tab-active-border-color: #d4d4d4; --tab-color: #444; - --tab-active-background: #666; - --tab-active-color: #fafafa; + --tab-active-background: #fff; + --tab-active-color: var(--color-text); --tab-disabled-background: #f5f5f5; --tab-disabled-color: #999; + --selected-badge-background: #e5e5e5; + --selected-badge-color: #525252; + --selected-badge-shadow: inset 0 0 0 1px #d4d4d4; + --selected-badge-warning-background: #fde496; + --selected-badge-warning-color: #785b02; + --selected-badge-warning-shadow: inset 0 0 0 1px #e6af05; + --selected-badge-danger-background: #FCE9ED; + --selected-badge-danger-color: #83122A; + --selected-badge-danger-shadow: inset 0 0 0 1px #F5B8C5; --metric-value-background: #fff; --metric-value-color: inherit; --metric-unit-color: #999; @@ -47,12 +58,23 @@ --color-text: #e0e0e0; --color-muted: #777; --color-error: #d43934; - --tab-background: #555; - --tab-color: #ccc; - --tab-active-background: #888; - --tab-active-color: #fafafa; + --tab-background: #404040; + --tab-border-color: #737373; + --tab-active-border-color: #171717; + --tab-color: var(--color-text); + --tab-active-background: #d4d4d4; + --tab-active-color: #262626; --tab-disabled-background: var(--page-background); - --tab-disabled-color: #777; + --tab-disabled-color: #a3a3a3; + --selected-badge-background: #555; + --selected-badge-color: #ddd; + --selected-badge-shadow: none; + --selected-badge-warning-background: #fcd55f; + --selected-badge-warning-color: #785b02; + --selected-badge-warning-shadow: inset 0 0 0 1px #af8503; + --selected-badge-danger-background: #B41939; + --selected-badge-danger-color: #FCE9ED; + --selected-badge-danger-shadow: none; --metric-value-background: #555; --metric-value-color: inherit; --metric-unit-color: #999; @@ -83,7 +105,7 @@ --card-label-color: var(--tab-active-color); } -html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0} +html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}summary{cursor: pointer} html { /* always display the vertical scrollbar to avoid jumps when toggling contents */ @@ -132,15 +154,96 @@ thead.sf-toggle-content.sf-toggle-visible, tbody.sf-toggle-content.sf-toggle-vis .sf-toggle-off .icon-close, .sf-toggle-on .icon-open { display: none; } .sf-toggle-off .icon-open, .sf-toggle-on .icon-close { display: block; } -.tab-navigation { margin: 0 0 1em 0; padding: 0; } -.tab-navigation li { background: var(--tab-background); border: 1px solid var(--table-border); color: var(--tab-color); cursor: pointer; display: inline-block; font-size: 16px; margin: 0 0 0 -1px; padding: .5em .75em; z-index: 1; } -.tab-navigation li .badge { background-color: var(--base-1); color: var(--base-4); display: inline-block; font-size: 14px; font-weight: bold; margin-left: 8px; min-width: 10px; padding: 1px 6px; text-align: center; white-space: nowrap; } -.tab-navigation li.disabled { background: var(--tab-disabled-background); color: var(--tab-disabled-color); } -.tab-navigation li.active { background: var(--tab-active-background); color: var(--tab-active-color); z-index: 1100; } -.tab-navigation li.active .badge { background-color: var(--base-5); color: var(--base-2); } -.tab-content > *:first-child { margin-top: 0; } -.tab-navigation li .badge.status-warning { background: var(--color-warning); color: #FFF; } -.tab-navigation li .badge.status-error { background: var(--background-error); color: #FFF; } +.tab-navigation { + background-color: var(--tab-background); + border-radius: 6px; + box-shadow: inset 0 0 0 1px var(--tab-border-color), 0 0 0 5px var(--page-background); + display: inline-flex; + flex-wrap: wrap; + margin: 0 0 15px; + padding: 0; + user-select: none; + -webkit-user-select: none; +} +.sf-tabs-sm .tab-navigation { + box-shadow: inset 0 0 0 1px var(--tab-border-color), 0 0 0 4px var(--page-background); + margin: 0 0 10px; +} +.tab-navigation .tab-control { + background: transparent; + border: 0; + box-shadow: none; + transition: box-shadow .05s ease-in, background-color .05s ease-in; + cursor: pointer; + font-size: 14px; + font-weight: 500; + line-height: 1.4; + margin: 0; + padding: 4px 14px; + position: relative; + text-align: center; + z-index: 1; +} +.sf-tabs-sm .tab-navigation .tab-control { + font-size: 13px; + padding: 2.5px 10px; +} +.tab-navigation .tab-control:before { + background: var(--tab-border-color); + bottom: 15%; + content: ""; + left: 0; + position: absolute; + top: 15%; + width: 1px; +} +.tab-navigation .tab-control:first-child:before, +.tab-navigation .tab-control.active + .tab-control:before, +.tab-navigation .tab-control.active:before { + width: 0; +} +.tab-navigation .tab-control .badge { + background: var(--selected-badge-background); + box-shadow: var(--selected-badge-shadow); + color: var(--selected-badge-color); + display: inline-block; + font-size: 12px; + font-weight: bold; + line-height: 1; + margin-left: 8px; + min-width: 10px; + padding: 2px 6px; + text-align: center; + white-space: nowrap; +} +.tab-navigation .tab-control.disabled { + color: var(--tab-disabled-color); +} +.tab-navigation .tab-control.active { + background-color: var(--tab-active-background); + border-radius: 6px; + box-shadow: inset 0 0 0 1.5px var(--tab-active-border-color); + color: var(--tab-active-color); + position: relative; + z-index: 1; +} +.theme-dark .tab-navigation li.active { + box-shadow: inset 0 0 0 1px var(--tab-border-color); +} +.tab-content > *:first-child { + margin-top: 0; +} +.tab-navigation .tab-control .badge.status-warning { + background: var(--selected-badge-warning-background); + box-shadow: var(--selected-badge-warning-shadow); + color: var(--selected-badge-warning-color); +} +.tab-navigation .tab-control .badge.status-error { + background: var(--selected-badge-danger-background); + box-shadow: var(--selected-badge-danger-shadow); + color: var(--selected-badge-danger-color); +} + .sf-tabs .tab:not(:first-child) { display: none; } [data-filters] { position: relative; } @@ -208,6 +311,10 @@ header .container { display: flex; justify-content: space-between; } .exception-message a { border-bottom: 1px solid rgba(255, 255, 255, 0.5); font-size: inherit; text-decoration: none; } .exception-message a:hover { border-bottom-color: #ffffff; } +.exception-properties-wrapper { margin: .8em 0; } +.exception-properties { background: var(--base-0); border: var(--border); box-shadow: 0px 0px 1px rgba(128, 128, 128, .2); } +.exception-properties pre { margin: 0; padding: 0.2em 0; } + .exception-illustration { flex-basis: 111px; flex-shrink: 0; height: 66px; margin-left: 15px; opacity: .7; } .trace + .trace { margin-top: 30px; } @@ -217,7 +324,7 @@ header .container { display: flex; justify-content: space-between; } .trace-head .icon { position: absolute; right: 0; top: 0; } .trace-head .icon svg { fill: var(--base-5); height: 24px; width: 24px; } -.trace-details { background: var(--base-0); border: var(--border); box-shadow: 0px 0px 1px rgba(128, 128, 128, .2); margin: 1em 0; table-layout: fixed; } +.trace-details { background: var(--base-0); border: var(--border); box-shadow: 0px 0px 1px rgba(128, 128, 128, .2); margin: 0 0 1em; table-layout: fixed; } .trace-message { font-size: 14px; font-weight: normal; margin: .5em 0 0; } diff --git a/core/vendor/symfony/error-handler/Resources/assets/js/exception.js b/core/vendor/symfony/error-handler/Resources/assets/js/exception.js index a85409da3c..22ce675dfb 100644 --- a/core/vendor/symfony/error-handler/Resources/assets/js/exception.js +++ b/core/vendor/symfony/error-handler/Resources/assets/js/exception.js @@ -1,297 +1,304 @@ /* This file is based on WebProfilerBundle/Resources/views/Profiler/base_js.html.twig. If you make any change in this file, verify the same change is needed in the other file. */ /* .tab'); + var tabNavigation = document.createElement('div'); + tabNavigation.className = 'tab-navigation'; + tabNavigation.setAttribute('role', 'tablist'); + + var selectedTabId = 'tab-' + i + '-0'; /* select the first tab by default */ + for (var j = 0; j < tabs.length; j++) { + var tabId = 'tab-' + i + '-' + j; + var tabTitle = tabs[j].querySelector('.tab-title').innerHTML; + + var tabNavigationItem = document.createElement('button'); + addClass(tabNavigationItem, 'tab-control'); + tabNavigationItem.setAttribute('data-tab-id', tabId); + tabNavigationItem.setAttribute('role', 'tab'); + tabNavigationItem.setAttribute('aria-controls', tabId); + if (hasClass(tabs[j], 'active')) { selectedTabId = tabId; } + if (hasClass(tabs[j], 'disabled')) { + addClass(tabNavigationItem, 'disabled'); + } + tabNavigationItem.innerHTML = tabTitle; + tabNavigation.appendChild(tabNavigationItem); - var addEventListener; - - var el = document.createElement('div'); - if (!('addEventListener' in el)) { - addEventListener = function (element, eventName, callback) { - element.attachEvent('on' + eventName, callback); - }; - } else { - addEventListener = function (element, eventName, callback) { - element.addEventListener(eventName, callback, false); - }; - } + var tabContent = tabs[j].querySelector('.tab-content'); + tabContent.parentElement.setAttribute('id', tabId); + } - if (navigator.clipboard) { - document.querySelectorAll('[data-clipboard-text]').forEach(function(element) { - removeClass(element, 'hidden'); - element.addEventListener('click', function() { - navigator.clipboard.writeText(element.getAttribute('data-clipboard-text')); - }) - }); + tabGroups[i].insertBefore(tabNavigation, tabGroups[i].firstChild); + addClass(document.querySelector('[data-tab-id="' + selectedTabId + '"]'), 'active'); } - return { - addEventListener: addEventListener, - - createTabs: function() { - var tabGroups = document.querySelectorAll('.sf-tabs:not([data-processed=true])'); - - /* create the tab navigation for each group of tabs */ - for (var i = 0; i < tabGroups.length; i++) { - var tabs = tabGroups[i].querySelectorAll(':scope > .tab'); - var tabNavigation = document.createElement('ul'); - tabNavigation.className = 'tab-navigation'; - - var selectedTabId = 'tab-' + i + '-0'; /* select the first tab by default */ - for (var j = 0; j < tabs.length; j++) { - var tabId = 'tab-' + i + '-' + j; - var tabTitle = tabs[j].querySelector('.tab-title').innerHTML; + /* display the active tab and add the 'click' event listeners */ + for (i = 0; i < tabGroups.length; i++) { + tabNavigation = tabGroups[i].querySelectorAll(':scope > .tab-navigation .tab-control'); + + for (j = 0; j < tabNavigation.length; j++) { + tabId = tabNavigation[j].getAttribute('data-tab-id'); + var tabPanel = document.getElementById(tabId); + tabPanel.setAttribute('role', 'tabpanel'); + tabPanel.setAttribute('aria-labelledby', tabId); + tabPanel.querySelector('.tab-title').className = 'hidden'; + + if (hasClass(tabNavigation[j], 'active')) { + tabPanel.className = 'block'; + tabNavigation[j].setAttribute('aria-selected', 'true'); + tabNavigation[j].removeAttribute('tabindex'); + } else { + tabPanel.className = 'hidden'; + tabNavigation[j].removeAttribute('aria-selected'); + tabNavigation[j].setAttribute('tabindex', '-1'); + } - var tabNavigationItem = document.createElement('li'); - tabNavigationItem.setAttribute('data-tab-id', tabId); - if (hasClass(tabs[j], 'active')) { selectedTabId = tabId; } - if (hasClass(tabs[j], 'disabled')) { addClass(tabNavigationItem, 'disabled'); } - tabNavigationItem.innerHTML = tabTitle; - tabNavigation.appendChild(tabNavigationItem); + tabNavigation[j].addEventListener('click', function(e) { + var activeTab = e.target || e.srcElement; - var tabContent = tabs[j].querySelector('.tab-content'); - tabContent.parentElement.setAttribute('id', tabId); + /* needed because when the tab contains HTML contents, user can click */ + /* on any of those elements instead of their parent '
-

formatFileFromText(nl2br($exceptionMessage)); ?>

diff --git a/core/vendor/symfony/error-handler/Resources/views/traces.html.php b/core/vendor/symfony/error-handler/Resources/views/traces.html.php index 38752bc1a8..fd834c144e 100644 --- a/core/vendor/symfony/error-handler/Resources/views/traces.html.php +++ b/core/vendor/symfony/error-handler/Resources/views/traces.html.php @@ -25,6 +25,14 @@

escape($exception['message']); ?>

+ +
+ Show exception properties +
+ dumpValue($exception['data']) ?> +
+
+
diff --git a/core/vendor/symfony/error-handler/composer.json b/core/vendor/symfony/error-handler/composer.json index 5331dd8836..03eec618df 100644 --- a/core/vendor/symfony/error-handler/composer.json +++ b/core/vendor/symfony/error-handler/composer.json @@ -23,7 +23,10 @@ "require-dev": { "symfony/http-kernel": "^5.4|^6.0", "symfony/serializer": "^5.4|^6.0", - "symfony/deprecation-contracts": "^2.1|^3" + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5" }, "autoload": { "psr-4": { "Symfony\\Component\\ErrorHandler\\": "" }, diff --git a/core/vendor/symfony/event-dispatcher-contracts/Event.php b/core/vendor/symfony/event-dispatcher-contracts/Event.php index b2ce64b224..2e7f998903 100644 --- a/core/vendor/symfony/event-dispatcher-contracts/Event.php +++ b/core/vendor/symfony/event-dispatcher-contracts/Event.php @@ -30,7 +30,7 @@ */ class Event implements StoppableEventInterface { - private $propagationStopped = false; + private bool $propagationStopped = false; public function isPropagationStopped(): bool { diff --git a/core/vendor/symfony/event-dispatcher-contracts/composer.json b/core/vendor/symfony/event-dispatcher-contracts/composer.json index 89d7cec96c..3618d53e97 100644 --- a/core/vendor/symfony/event-dispatcher-contracts/composer.json +++ b/core/vendor/symfony/event-dispatcher-contracts/composer.json @@ -19,16 +19,13 @@ "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "autoload": { "psr-4": { "Symfony\\Contracts\\EventDispatcher\\": "" } }, "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "3.3-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", diff --git a/core/vendor/symfony/event-dispatcher/CHANGELOG.md b/core/vendor/symfony/event-dispatcher/CHANGELOG.md index 0f98598950..76b2eab6bf 100644 --- a/core/vendor/symfony/event-dispatcher/CHANGELOG.md +++ b/core/vendor/symfony/event-dispatcher/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +6.0 +--- + + * Remove `LegacyEventDispatcherProxy` + 5.4 --- diff --git a/core/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php b/core/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php index d821378114..f1b982315c 100644 --- a/core/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php +++ b/core/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php @@ -51,16 +51,25 @@ public function __construct(EventDispatcherInterface $dispatcher, Stopwatch $sto $this->requestStack = $requestStack; } + /** + * @return void + */ public function addListener(string $eventName, callable|array $listener, int $priority = 0) { $this->dispatcher->addListener($eventName, $listener, $priority); } + /** + * @return void + */ public function addSubscriber(EventSubscriberInterface $subscriber) { $this->dispatcher->addSubscriber($subscriber); } + /** + * @return void + */ public function removeListener(string $eventName, callable|array $listener) { if (isset($this->wrappedListeners[$eventName])) { @@ -73,12 +82,15 @@ public function removeListener(string $eventName, callable|array $listener) } } - return $this->dispatcher->removeListener($eventName, $listener); + $this->dispatcher->removeListener($eventName, $listener); } + /** + * @return void + */ public function removeSubscriber(EventSubscriberInterface $subscriber) { - return $this->dispatcher->removeSubscriber($subscriber); + $this->dispatcher->removeSubscriber($subscriber); } public function getListeners(string $eventName = null): array @@ -214,6 +226,9 @@ public function getOrphanedEvents(Request $request = null): array return array_merge(...array_values($this->orphanedEvents)); } + /** + * @return void + */ public function reset() { $this->callStack = null; @@ -234,6 +249,8 @@ public function __call(string $method, array $arguments): mixed /** * Called before dispatching the event. + * + * @return void */ protected function beforeDispatch(string $eventName, object $event) { @@ -241,6 +258,8 @@ protected function beforeDispatch(string $eventName, object $event) /** * Called after dispatching the event. + * + * @return void */ protected function afterDispatch(string $eventName, object $event) { diff --git a/core/vendor/symfony/event-dispatcher/Debug/WrappedListener.php b/core/vendor/symfony/event-dispatcher/Debug/WrappedListener.php index 5871578c82..6e0de1dff8 100644 --- a/core/vendor/symfony/event-dispatcher/Debug/WrappedListener.php +++ b/core/vendor/symfony/event-dispatcher/Debug/WrappedListener.php @@ -136,7 +136,7 @@ private function parseListener(array $listener): array } if (\is_object($listener[0])) { - return [get_debug_type($listener[0]), \get_class($listener[0])]; + return [get_debug_type($listener[0]), $listener[0]::class]; } return [$listener[0], $listener[0]]; diff --git a/core/vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php b/core/vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php index 6e7292b4a1..13b4336aa4 100644 --- a/core/vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php +++ b/core/vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php @@ -21,25 +21,19 @@ */ class AddEventAliasesPass implements CompilerPassInterface { - private $eventAliases; - private $eventAliasesParameter; + private array $eventAliases; - public function __construct(array $eventAliases, string $eventAliasesParameter = 'event_dispatcher.event_aliases') + public function __construct(array $eventAliases) { - if (1 < \func_num_args()) { - trigger_deprecation('symfony/event-dispatcher', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - $this->eventAliases = $eventAliases; - $this->eventAliasesParameter = $eventAliasesParameter; } public function process(ContainerBuilder $container): void { - $eventAliases = $container->hasParameter($this->eventAliasesParameter) ? $container->getParameter($this->eventAliasesParameter) : []; + $eventAliases = $container->hasParameter('event_dispatcher.event_aliases') ? $container->getParameter('event_dispatcher.event_aliases') : []; $container->setParameter( - $this->eventAliasesParameter, + 'event_dispatcher.event_aliases', array_merge($eventAliases, $this->eventAliases) ); } diff --git a/core/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php b/core/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php index 773c234c13..c86f438d41 100644 --- a/core/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php +++ b/core/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php @@ -25,80 +25,54 @@ */ class RegisterListenersPass implements CompilerPassInterface { - protected $dispatcherService; - protected $listenerTag; - protected $subscriberTag; - protected $eventAliasesParameter; - - private $hotPathEvents = []; - private $hotPathTagName = 'container.hot_path'; - private $noPreloadEvents = []; - private $noPreloadTagName = 'container.no_preload'; - - public function __construct(string $dispatcherService = 'event_dispatcher', string $listenerTag = 'kernel.event_listener', string $subscriberTag = 'kernel.event_subscriber', string $eventAliasesParameter = 'event_dispatcher.event_aliases') - { - if (0 < \func_num_args()) { - trigger_deprecation('symfony/event-dispatcher', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - - $this->dispatcherService = $dispatcherService; - $this->listenerTag = $listenerTag; - $this->subscriberTag = $subscriberTag; - $this->eventAliasesParameter = $eventAliasesParameter; - } + private array $hotPathEvents = []; + private array $noPreloadEvents = []; /** * @return $this */ - public function setHotPathEvents(array $hotPathEvents) + public function setHotPathEvents(array $hotPathEvents): static { $this->hotPathEvents = array_flip($hotPathEvents); - if (1 < \func_num_args()) { - trigger_deprecation('symfony/event-dispatcher', '5.4', 'Configuring "$tagName" in "%s" is deprecated.', __METHOD__); - $this->hotPathTagName = func_get_arg(1); - } - return $this; } /** * @return $this */ - public function setNoPreloadEvents(array $noPreloadEvents): self + public function setNoPreloadEvents(array $noPreloadEvents): static { $this->noPreloadEvents = array_flip($noPreloadEvents); - if (1 < \func_num_args()) { - trigger_deprecation('symfony/event-dispatcher', '5.4', 'Configuring "$tagName" in "%s" is deprecated.', __METHOD__); - $this->noPreloadTagName = func_get_arg(1); - } - return $this; } + /** + * @return void + */ public function process(ContainerBuilder $container) { - if (!$container->hasDefinition($this->dispatcherService) && !$container->hasAlias($this->dispatcherService)) { + if (!$container->hasDefinition('event_dispatcher') && !$container->hasAlias('event_dispatcher')) { return; } $aliases = []; - if ($container->hasParameter($this->eventAliasesParameter)) { - $aliases = $container->getParameter($this->eventAliasesParameter); + if ($container->hasParameter('event_dispatcher.event_aliases')) { + $aliases = $container->getParameter('event_dispatcher.event_aliases'); } - $globalDispatcherDefinition = $container->findDefinition($this->dispatcherService); + $globalDispatcherDefinition = $container->findDefinition('event_dispatcher'); - foreach ($container->findTaggedServiceIds($this->listenerTag, true) as $id => $events) { + foreach ($container->findTaggedServiceIds('kernel.event_listener', true) as $id => $events) { $noPreload = 0; foreach ($events as $event) { $priority = $event['priority'] ?? 0; if (!isset($event['event'])) { - if ($container->getDefinition($id)->hasTag($this->subscriberTag)) { + if ($container->getDefinition($id)->hasTag('kernel.event_subscriber')) { continue; } @@ -112,7 +86,7 @@ public function process(ContainerBuilder $container) $event['method'] = 'on'.preg_replace_callback([ '/(?<=\b|_)[a-z]/i', '/[^a-z0-9]/i', - ], function ($matches) { return strtoupper($matches[0]); }, $event['event']); + ], fn ($matches) => strtoupper($matches[0]), $event['event']); $event['method'] = preg_replace('/[^a-z0-9]/i', '', $event['method']); if (null !== ($class = $container->getDefinition($id)->getClass()) && ($r = $container->getReflectionClass($class, false)) && !$r->hasMethod($event['method']) && $r->hasMethod('__invoke')) { @@ -128,20 +102,20 @@ public function process(ContainerBuilder $container) $dispatcherDefinition->addMethodCall('addListener', [$event['event'], [new ServiceClosureArgument(new Reference($id)), $event['method']], $priority]); if (isset($this->hotPathEvents[$event['event']])) { - $container->getDefinition($id)->addTag($this->hotPathTagName); + $container->getDefinition($id)->addTag('container.hot_path'); } elseif (isset($this->noPreloadEvents[$event['event']])) { ++$noPreload; } } if ($noPreload && \count($events) === $noPreload) { - $container->getDefinition($id)->addTag($this->noPreloadTagName); + $container->getDefinition($id)->addTag('container.no_preload'); } } $extractingDispatcher = new ExtractingEventDispatcher(); - foreach ($container->findTaggedServiceIds($this->subscriberTag, true) as $id => $tags) { + foreach ($container->findTaggedServiceIds('kernel.event_subscriber', true) as $id => $tags) { $def = $container->getDefinition($id); // We must assume that the class value has been correctly filled, even if the service is created by a factory @@ -179,13 +153,13 @@ public function process(ContainerBuilder $container) } if (isset($this->hotPathEvents[$args[0]])) { - $container->getDefinition($id)->addTag($this->hotPathTagName); + $container->getDefinition($id)->addTag('container.hot_path'); } elseif (isset($this->noPreloadEvents[$args[0]])) { ++$noPreload; } } if ($noPreload && \count($extractingDispatcher->listeners) === $noPreload) { - $container->getDefinition($id)->addTag($this->noPreloadTagName); + $container->getDefinition($id)->addTag('container.no_preload'); } $extractingDispatcher->listeners = []; ExtractingEventDispatcher::$aliases = []; @@ -203,7 +177,7 @@ private function getEventFromTypeDeclaration(ContainerBuilder $container, string || $type->isBuiltin() || Event::class === ($name = $type->getName()) ) { - throw new InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "%s" tags.', $id, $this->listenerTag)); + throw new InvalidArgumentException(sprintf('Service "%s" must define the "event" attribute on "kernel.event_listener" tags.', $id)); } return $name; @@ -215,12 +189,12 @@ private function getEventFromTypeDeclaration(ContainerBuilder $container, string */ class ExtractingEventDispatcher extends EventDispatcher implements EventSubscriberInterface { - public $listeners = []; + public array $listeners = []; - public static $aliases = []; - public static $subscriber; + public static array $aliases = []; + public static string $subscriber; - public function addListener(string $eventName, $listener, int $priority = 0) + public function addListener(string $eventName, callable|array $listener, int $priority = 0): void { $this->listeners[] = [$eventName, $listener[1], $priority]; } diff --git a/core/vendor/symfony/event-dispatcher/EventDispatcher.php b/core/vendor/symfony/event-dispatcher/EventDispatcher.php index 41f3f7ae7c..327803af67 100644 --- a/core/vendor/symfony/event-dispatcher/EventDispatcher.php +++ b/core/vendor/symfony/event-dispatcher/EventDispatcher.php @@ -123,12 +123,18 @@ public function hasListeners(string $eventName = null): bool return false; } + /** + * @return void + */ public function addListener(string $eventName, callable|array $listener, int $priority = 0) { $this->listeners[$eventName][$priority][] = $listener; unset($this->sorted[$eventName], $this->optimized[$eventName]); } + /** + * @return void + */ public function removeListener(string $eventName, callable|array $listener) { if (empty($this->listeners[$eventName])) { @@ -157,6 +163,9 @@ public function removeListener(string $eventName, callable|array $listener) } } + /** + * @return void + */ public function addSubscriber(EventSubscriberInterface $subscriber) { foreach ($subscriber->getSubscribedEvents() as $eventName => $params) { @@ -172,6 +181,9 @@ public function addSubscriber(EventSubscriberInterface $subscriber) } } + /** + * @return void + */ public function removeSubscriber(EventSubscriberInterface $subscriber) { foreach ($subscriber->getSubscribedEvents() as $eventName => $params) { @@ -194,6 +206,8 @@ public function removeSubscriber(EventSubscriberInterface $subscriber) * @param callable[] $listeners The event listeners * @param string $eventName The name of the event to dispatch * @param object $event The event object to pass to the event handlers/listeners + * + * @return void */ protected function callListeners(iterable $listeners, string $eventName, object $event) { @@ -210,7 +224,7 @@ protected function callListeners(iterable $listeners, string $eventName, object /** * Sorts the internal list of listeners for the given event by priority. */ - private function sortListeners(string $eventName) + private function sortListeners(string $eventName): void { krsort($this->listeners[$eventName]); $this->sorted[$eventName] = []; diff --git a/core/vendor/symfony/event-dispatcher/EventDispatcherInterface.php b/core/vendor/symfony/event-dispatcher/EventDispatcherInterface.php index cc324e1c61..3cd94c9388 100644 --- a/core/vendor/symfony/event-dispatcher/EventDispatcherInterface.php +++ b/core/vendor/symfony/event-dispatcher/EventDispatcherInterface.php @@ -27,6 +27,8 @@ interface EventDispatcherInterface extends ContractsEventDispatcherInterface * * @param int $priority The higher this value, the earlier an event * listener will be triggered in the chain (defaults to 0) + * + * @return void */ public function addListener(string $eventName, callable $listener, int $priority = 0); @@ -35,14 +37,21 @@ public function addListener(string $eventName, callable $listener, int $priority * * The subscriber is asked for all the events it is * interested in and added as a listener for these events. + * + * @return void */ public function addSubscriber(EventSubscriberInterface $subscriber); /** * Removes an event listener from the specified events. + * + * @return void */ public function removeListener(string $eventName, callable $listener); + /** + * @return void + */ public function removeSubscriber(EventSubscriberInterface $subscriber); /** @@ -50,21 +59,17 @@ public function removeSubscriber(EventSubscriberInterface $subscriber); * * @return array */ - public function getListeners(string $eventName = null); + public function getListeners(string $eventName = null): array; /** * Gets the listener priority for a specific event. * * Returns null if the event or the listener does not exist. - * - * @return int|null */ - public function getListenerPriority(string $eventName, callable $listener); + public function getListenerPriority(string $eventName, callable $listener): ?int; /** * Checks whether an event has any registered listeners. - * - * @return bool */ - public function hasListeners(string $eventName = null); + public function hasListeners(string $eventName = null): bool; } diff --git a/core/vendor/symfony/event-dispatcher/GenericEvent.php b/core/vendor/symfony/event-dispatcher/GenericEvent.php index b32a301ae9..68a2030633 100644 --- a/core/vendor/symfony/event-dispatcher/GenericEvent.php +++ b/core/vendor/symfony/event-dispatcher/GenericEvent.php @@ -34,7 +34,7 @@ class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate * @param mixed $subject The subject of the event, usually an object or a callable * @param array $arguments Arguments to store in the event */ - public function __construct($subject = null, array $arguments = []) + public function __construct(mixed $subject = null, array $arguments = []) { $this->subject = $subject; $this->arguments = $arguments; @@ -42,10 +42,8 @@ public function __construct($subject = null, array $arguments = []) /** * Getter for subject property. - * - * @return mixed */ - public function getSubject() + public function getSubject(): mixed { return $this->subject; } @@ -53,11 +51,9 @@ public function getSubject() /** * Get argument by key. * - * @return mixed - * * @throws \InvalidArgumentException if key is not found */ - public function getArgument(string $key) + public function getArgument(string $key): mixed { if ($this->hasArgument($key)) { return $this->arguments[$key]; @@ -69,11 +65,9 @@ public function getArgument(string $key) /** * Add argument to event. * - * @param mixed $value Value - * * @return $this */ - public function setArgument(string $key, $value) + public function setArgument(string $key, mixed $value): static { $this->arguments[$key] = $value; @@ -82,10 +76,8 @@ public function setArgument(string $key, $value) /** * Getter for all arguments. - * - * @return array */ - public function getArguments() + public function getArguments(): array { return $this->arguments; } @@ -95,7 +87,7 @@ public function getArguments() * * @return $this */ - public function setArguments(array $args = []) + public function setArguments(array $args = []): static { $this->arguments = $args; @@ -104,10 +96,8 @@ public function setArguments(array $args = []) /** * Has argument. - * - * @return bool */ - public function hasArgument(string $key) + public function hasArgument(string $key): bool { return \array_key_exists($key, $this->arguments); } @@ -117,12 +107,9 @@ public function hasArgument(string $key) * * @param string $key Array key * - * @return mixed - * * @throws \InvalidArgumentException if key does not exist in $this->args */ - #[\ReturnTypeWillChange] - public function offsetGet($key) + public function offsetGet(mixed $key): mixed { return $this->getArgument($key); } @@ -130,13 +117,9 @@ public function offsetGet($key) /** * ArrayAccess for argument setter. * - * @param string $key Array key to set - * @param mixed $value Value - * - * @return void + * @param string $key Array key to set */ - #[\ReturnTypeWillChange] - public function offsetSet($key, $value) + public function offsetSet(mixed $key, mixed $value): void { $this->setArgument($key, $value); } @@ -145,11 +128,8 @@ public function offsetSet($key, $value) * ArrayAccess for unset argument. * * @param string $key Array key - * - * @return void */ - #[\ReturnTypeWillChange] - public function offsetUnset($key) + public function offsetUnset(mixed $key): void { if ($this->hasArgument($key)) { unset($this->arguments[$key]); @@ -160,11 +140,8 @@ public function offsetUnset($key) * ArrayAccess has argument. * * @param string $key Array key - * - * @return bool */ - #[\ReturnTypeWillChange] - public function offsetExists($key) + public function offsetExists(mixed $key): bool { return $this->hasArgument($key); } @@ -174,8 +151,7 @@ public function offsetExists($key) * * @return \ArrayIterator */ - #[\ReturnTypeWillChange] - public function getIterator() + public function getIterator(): \ArrayIterator { return new \ArrayIterator($this->arguments); } diff --git a/core/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php b/core/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php index 182ba080d5..d385d3f833 100644 --- a/core/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php +++ b/core/vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php @@ -30,21 +30,33 @@ public function dispatch(object $event, string $eventName = null): object return $this->dispatcher->dispatch($event, $eventName); } + /** + * @return never + */ public function addListener(string $eventName, callable|array $listener, int $priority = 0) { throw new \BadMethodCallException('Unmodifiable event dispatchers must not be modified.'); } + /** + * @return never + */ public function addSubscriber(EventSubscriberInterface $subscriber) { throw new \BadMethodCallException('Unmodifiable event dispatchers must not be modified.'); } + /** + * @return never + */ public function removeListener(string $eventName, callable|array $listener) { throw new \BadMethodCallException('Unmodifiable event dispatchers must not be modified.'); } + /** + * @return never + */ public function removeSubscriber(EventSubscriberInterface $subscriber) { throw new \BadMethodCallException('Unmodifiable event dispatchers must not be modified.'); diff --git a/core/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php b/core/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php deleted file mode 100644 index 6e17c8fcc9..0000000000 --- a/core/vendor/symfony/event-dispatcher/LegacyEventDispatcherProxy.php +++ /dev/null @@ -1,31 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\EventDispatcher; - -use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; - -trigger_deprecation('symfony/event-dispatcher', '5.1', '%s is deprecated, use the event dispatcher without the proxy.', LegacyEventDispatcherProxy::class); - -/** - * A helper class to provide BC/FC with the legacy signature of EventDispatcherInterface::dispatch(). - * - * @author Nicolas Grekas - * - * @deprecated since Symfony 5.1 - */ -final class LegacyEventDispatcherProxy -{ - public static function decorate(?EventDispatcherInterface $dispatcher): ?EventDispatcherInterface - { - return $dispatcher; - } -} diff --git a/core/vendor/symfony/event-dispatcher/composer.json b/core/vendor/symfony/event-dispatcher/composer.json index c05373f331..287037822d 100644 --- a/core/vendor/symfony/event-dispatcher/composer.json +++ b/core/vendor/symfony/event-dispatcher/composer.json @@ -17,7 +17,7 @@ ], "require": { "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "require-dev": { "symfony/dependency-injection": "^5.4|^6.0", @@ -25,21 +25,18 @@ "symfony/config": "^5.4|^6.0", "symfony/error-handler": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", + "symfony/service-contracts": "^2.5|^3", "symfony/stopwatch": "^5.4|^6.0", "psr/log": "^1|^2|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", "symfony/event-dispatcher-implementation": "2.0|3.0" }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, "autoload": { "psr-4": { "Symfony\\Component\\EventDispatcher\\": "" }, "exclude-from-classmap": [ diff --git a/core/vendor/symfony/filesystem/Filesystem.php b/core/vendor/symfony/filesystem/Filesystem.php index 3b3cf7a1c5..a379ce1863 100644 --- a/core/vendor/symfony/filesystem/Filesystem.php +++ b/core/vendor/symfony/filesystem/Filesystem.php @@ -31,6 +31,8 @@ class Filesystem * If the target file is newer, it is overwritten only when the * $overwriteNewerFiles option is set to true. * + * @return void + * * @throws FileNotFoundException When originFile doesn't exist * @throws IOException When copy fails */ @@ -82,6 +84,8 @@ public function copy(string $originFile, string $targetFile, bool $overwriteNewe /** * Creates a directory recursively. * + * @return void + * * @throws IOException On any directory creation failure */ public function mkdir(string|iterable $dirs, int $mode = 0777) @@ -123,6 +127,8 @@ public function exists(string|iterable $files): bool * @param int|null $time The touch time as a Unix timestamp, if not supplied the current system time is used * @param int|null $atime The access time as a Unix timestamp, if not supplied the current system time is used * + * @return void + * * @throws IOException When touch fails */ public function touch(string|iterable $files, int $time = null, int $atime = null) @@ -137,6 +143,8 @@ public function touch(string|iterable $files, int $time = null, int $atime = nul /** * Removes files or directories. * + * @return void + * * @throws IOException When removal fails */ public function remove(string|iterable $files) @@ -203,12 +211,14 @@ private static function doRemove(array $files, bool $isRecursive): void * @param int $umask The mode mask (octal) * @param bool $recursive Whether change the mod recursively or not * + * @return void + * * @throws IOException When the change fails */ public function chmod(string|iterable $files, int $mode, int $umask = 0000, bool $recursive = false) { foreach ($this->toIterable($files) as $file) { - if (\is_int($mode) && !self::box('chmod', $file, $mode & ~$umask)) { + if (!self::box('chmod', $file, $mode & ~$umask)) { throw new IOException(sprintf('Failed to chmod file "%s": ', $file).self::$lastError, 0, null, $file); } if ($recursive && is_dir($file) && !is_link($file)) { @@ -223,6 +233,8 @@ public function chmod(string|iterable $files, int $mode, int $umask = 0000, bool * @param string|int $user A user name or number * @param bool $recursive Whether change the owner recursively or not * + * @return void + * * @throws IOException When the change fails */ public function chown(string|iterable $files, string|int $user, bool $recursive = false) @@ -249,6 +261,8 @@ public function chown(string|iterable $files, string|int $user, bool $recursive * @param string|int $group A group name or number * @param bool $recursive Whether change the group recursively or not * + * @return void + * * @throws IOException When the change fails */ public function chgrp(string|iterable $files, string|int $group, bool $recursive = false) @@ -272,6 +286,8 @@ public function chgrp(string|iterable $files, string|int $group, bool $recursive /** * Renames a file or a directory. * + * @return void + * * @throws IOException When target file or directory already exists * @throws IOException When origin cannot be renamed */ @@ -313,6 +329,8 @@ private function isReadable(string $filename): bool /** * Creates a symbolic link or copy a directory. * + * @return void + * * @throws IOException When symlink fails */ public function symlink(string $originDir, string $targetDir, bool $copyOnWindows = false) @@ -349,6 +367,8 @@ public function symlink(string $originDir, string $targetDir, bool $copyOnWindow * * @param string|string[] $targetFiles The target file(s) * + * @return void + * * @throws FileNotFoundException When original file is missing or not a file * @throws IOException When link fails, including if link already exists */ @@ -381,7 +401,7 @@ public function hardlink(string $originFile, string|iterable $targetFiles) /** * @param string $linkType Name of the link type, typically 'symbolic' or 'hard' */ - private function linkException(string $origin, string $target, string $linkType) + private function linkException(string $origin, string $target, string $linkType): never { if (self::$lastError) { if ('\\' === \DIRECTORY_SEPARATOR && str_contains(self::$lastError, 'error code(1314)')) { @@ -438,11 +458,9 @@ public function makePathRelative(string $endPath, string $startPath): string $startPath = str_replace('\\', '/', $startPath); } - $splitDriveLetter = function ($path) { - return (\strlen($path) > 2 && ':' === $path[1] && '/' === $path[2] && ctype_alpha($path[0])) - ? [substr($path, 2), strtoupper($path[0])] - : [$path, null]; - }; + $splitDriveLetter = fn ($path) => (\strlen($path) > 2 && ':' === $path[1] && '/' === $path[2] && ctype_alpha($path[0])) + ? [substr($path, 2), strtoupper($path[0])] + : [$path, null]; $splitPath = function ($path) { $result = []; @@ -508,6 +526,8 @@ public function makePathRelative(string $endPath, string $startPath): string * - $options['copy_on_windows'] Whether to copy files instead of links on Windows (see symlink(), defaults to false) * - $options['delete'] Whether to delete files that are not in the source directory (defaults to false) * + * @return void + * * @throws IOException When file type is unknown */ public function mirror(string $originDir, string $targetDir, \Traversable $iterator = null, array $options = []) @@ -632,6 +652,8 @@ public function tempnam(string $dir, string $prefix, string $suffix = ''): strin * * @param string|resource $content The data to write into the file * + * @return void + * * @throws IOException if the file cannot be written to */ public function dumpFile(string $filename, $content) @@ -642,6 +664,12 @@ public function dumpFile(string $filename, $content) $dir = \dirname($filename); + if (is_link($filename) && $linkTarget = $this->readlink($filename)) { + $this->dumpFile(Path::makeAbsolute($linkTarget, $dir), $content); + + return; + } + if (!is_dir($dir)) { $this->mkdir($dir); } @@ -671,6 +699,8 @@ public function dumpFile(string $filename, $content) * @param string|resource $content The content to append * @param bool $lock Whether the file should be locked when writing to it * + * @return void + * * @throws IOException If the file is not writable */ public function appendToFile(string $filename, $content/* , bool $lock = false */) @@ -730,7 +760,7 @@ private static function box(string $func, mixed ...$args): mixed /** * @internal */ - public static function handleError(int $type, string $msg) + public static function handleError(int $type, string $msg): void { self::$lastError = $msg; } diff --git a/core/vendor/symfony/finder/Finder.php b/core/vendor/symfony/finder/Finder.php index f70caa0827..62c3f9e24f 100644 --- a/core/vendor/symfony/finder/Finder.php +++ b/core/vendor/symfony/finder/Finder.php @@ -45,27 +45,27 @@ class Finder implements \IteratorAggregate, \Countable public const IGNORE_DOT_FILES = 2; public const IGNORE_VCS_IGNORED_FILES = 4; - private $mode = 0; - private $names = []; - private $notNames = []; - private $exclude = []; - private $filters = []; - private $depths = []; - private $sizes = []; - private $followLinks = false; - private $reverseSorting = false; - private $sort = false; - private $ignore = 0; - private $dirs = []; - private $dates = []; - private $iterators = []; - private $contains = []; - private $notContains = []; - private $paths = []; - private $notPaths = []; - private $ignoreUnreadableDirs = false; - - private static $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']; + private int $mode = 0; + private array $names = []; + private array $notNames = []; + private array $exclude = []; + private array $filters = []; + private array $depths = []; + private array $sizes = []; + private bool $followLinks = false; + private bool $reverseSorting = false; + private \Closure|int|false $sort = false; + private int $ignore = 0; + private array $dirs = []; + private array $dates = []; + private array $iterators = []; + private array $contains = []; + private array $notContains = []; + private array $paths = []; + private array $notPaths = []; + private bool $ignoreUnreadableDirs = false; + + private static array $vcsPatterns = ['.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg']; public function __construct() { @@ -74,10 +74,8 @@ public function __construct() /** * Creates a new Finder. - * - * @return static */ - public static function create() + public static function create(): static { return new static(); } @@ -87,7 +85,7 @@ public static function create() * * @return $this */ - public function directories() + public function directories(): static { $this->mode = Iterator\FileTypeFilterIterator::ONLY_DIRECTORIES; @@ -99,7 +97,7 @@ public function directories() * * @return $this */ - public function files() + public function files(): static { $this->mode = Iterator\FileTypeFilterIterator::ONLY_FILES; @@ -122,7 +120,7 @@ public function files() * @see DepthRangeFilterIterator * @see NumberComparator */ - public function depth($levels) + public function depth(string|int|array $levels): static { foreach ((array) $levels as $level) { $this->depths[] = new Comparator\NumberComparator($level); @@ -150,7 +148,7 @@ public function depth($levels) * @see DateRangeFilterIterator * @see DateComparator */ - public function date($dates) + public function date(string|array $dates): static { foreach ((array) $dates as $date) { $this->dates[] = new Comparator\DateComparator($date); @@ -175,7 +173,7 @@ public function date($dates) * * @see FilenameFilterIterator */ - public function name($patterns) + public function name(string|array $patterns): static { $this->names = array_merge($this->names, (array) $patterns); @@ -191,7 +189,7 @@ public function name($patterns) * * @see FilenameFilterIterator */ - public function notName($patterns) + public function notName(string|array $patterns): static { $this->notNames = array_merge($this->notNames, (array) $patterns); @@ -213,7 +211,7 @@ public function notName($patterns) * * @see FilecontentFilterIterator */ - public function contains($patterns) + public function contains(string|array $patterns): static { $this->contains = array_merge($this->contains, (array) $patterns); @@ -235,7 +233,7 @@ public function contains($patterns) * * @see FilecontentFilterIterator */ - public function notContains($patterns) + public function notContains(string|array $patterns): static { $this->notContains = array_merge($this->notContains, (array) $patterns); @@ -259,7 +257,7 @@ public function notContains($patterns) * * @see FilenameFilterIterator */ - public function path($patterns) + public function path(string|array $patterns): static { $this->paths = array_merge($this->paths, (array) $patterns); @@ -283,7 +281,7 @@ public function path($patterns) * * @see FilenameFilterIterator */ - public function notPath($patterns) + public function notPath(string|array $patterns): static { $this->notPaths = array_merge($this->notPaths, (array) $patterns); @@ -305,7 +303,7 @@ public function notPath($patterns) * @see SizeRangeFilterIterator * @see NumberComparator */ - public function size($sizes) + public function size(string|int|array $sizes): static { foreach ((array) $sizes as $size) { $this->sizes[] = new Comparator\NumberComparator($size); @@ -327,7 +325,7 @@ public function size($sizes) * * @see ExcludeDirectoryFilterIterator */ - public function exclude($dirs) + public function exclude(string|array $dirs): static { $this->exclude = array_merge($this->exclude, (array) $dirs); @@ -343,7 +341,7 @@ public function exclude($dirs) * * @see ExcludeDirectoryFilterIterator */ - public function ignoreDotFiles(bool $ignoreDotFiles) + public function ignoreDotFiles(bool $ignoreDotFiles): static { if ($ignoreDotFiles) { $this->ignore |= static::IGNORE_DOT_FILES; @@ -363,7 +361,7 @@ public function ignoreDotFiles(bool $ignoreDotFiles) * * @see ExcludeDirectoryFilterIterator */ - public function ignoreVCS(bool $ignoreVCS) + public function ignoreVCS(bool $ignoreVCS): static { if ($ignoreVCS) { $this->ignore |= static::IGNORE_VCS_FILES; @@ -381,7 +379,7 @@ public function ignoreVCS(bool $ignoreVCS) * * @return $this */ - public function ignoreVCSIgnored(bool $ignoreVCSIgnored) + public function ignoreVCSIgnored(bool $ignoreVCSIgnored): static { if ($ignoreVCSIgnored) { $this->ignore |= static::IGNORE_VCS_IGNORED_FILES; @@ -398,8 +396,10 @@ public function ignoreVCSIgnored(bool $ignoreVCSIgnored) * @see ignoreVCS() * * @param string|string[] $pattern VCS patterns to ignore + * + * @return void */ - public static function addVCSPattern($pattern) + public static function addVCSPattern(string|array $pattern) { foreach ((array) $pattern as $p) { self::$vcsPatterns[] = $p; @@ -419,7 +419,7 @@ public static function addVCSPattern($pattern) * * @see SortableIterator */ - public function sort(\Closure $closure) + public function sort(\Closure $closure): static { $this->sort = $closure; @@ -451,7 +451,7 @@ public function sortByExtension(): static * * @see SortableIterator */ - public function sortByName(bool $useNaturalSort = false) + public function sortByName(bool $useNaturalSort = false): static { $this->sort = $useNaturalSort ? Iterator\SortableIterator::SORT_BY_NAME_NATURAL : Iterator\SortableIterator::SORT_BY_NAME; @@ -499,7 +499,7 @@ public function sortBySize(): static * * @see SortableIterator */ - public function sortByType() + public function sortByType(): static { $this->sort = Iterator\SortableIterator::SORT_BY_TYPE; @@ -517,7 +517,7 @@ public function sortByType() * * @see SortableIterator */ - public function sortByAccessedTime() + public function sortByAccessedTime(): static { $this->sort = Iterator\SortableIterator::SORT_BY_ACCESSED_TIME; @@ -529,7 +529,7 @@ public function sortByAccessedTime() * * @return $this */ - public function reverseSorting() + public function reverseSorting(): static { $this->reverseSorting = true; @@ -549,7 +549,7 @@ public function reverseSorting() * * @see SortableIterator */ - public function sortByChangedTime() + public function sortByChangedTime(): static { $this->sort = Iterator\SortableIterator::SORT_BY_CHANGED_TIME; @@ -567,7 +567,7 @@ public function sortByChangedTime() * * @see SortableIterator */ - public function sortByModifiedTime() + public function sortByModifiedTime(): static { $this->sort = Iterator\SortableIterator::SORT_BY_MODIFIED_TIME; @@ -584,7 +584,7 @@ public function sortByModifiedTime() * * @see CustomFilterIterator */ - public function filter(\Closure $closure) + public function filter(\Closure $closure): static { $this->filters[] = $closure; @@ -596,7 +596,7 @@ public function filter(\Closure $closure) * * @return $this */ - public function followLinks() + public function followLinks(): static { $this->followLinks = true; @@ -610,7 +610,7 @@ public function followLinks() * * @return $this */ - public function ignoreUnreadableDirs(bool $ignore = true) + public function ignoreUnreadableDirs(bool $ignore = true): static { $this->ignoreUnreadableDirs = $ignore; @@ -626,7 +626,7 @@ public function ignoreUnreadableDirs(bool $ignore = true) * * @throws DirectoryNotFoundException if one of the directories does not exist */ - public function in($dirs) + public function in(string|array $dirs): static { $resolvedDirs = []; @@ -655,8 +655,7 @@ public function in($dirs) * * @throws \LogicException if the in() method has not been called */ - #[\ReturnTypeWillChange] - public function getIterator() + public function getIterator(): \Iterator { if (0 === \count($this->dirs) && 0 === \count($this->iterators)) { throw new \LogicException('You must call one of in() or append() methods before iterating over a Finder.'); @@ -674,9 +673,7 @@ public function getIterator() $iterator = new \AppendIterator(); foreach ($this->dirs as $dir) { - $iterator->append(new \IteratorIterator(new LazyIterator(function () use ($dir) { - return $this->searchInDirectory($dir); - }))); + $iterator->append(new \IteratorIterator(new LazyIterator(fn () => $this->searchInDirectory($dir)))); } foreach ($this->iterators as $it) { @@ -699,7 +696,7 @@ public function getIterator() * * @throws \InvalidArgumentException when the given argument is not iterable */ - public function append(iterable $iterator) + public function append(iterable $iterator): static { if ($iterator instanceof \IteratorAggregate) { $this->iterators[] = $iterator->getIterator(); @@ -721,10 +718,8 @@ public function append(iterable $iterator) /** * Check if any results were found. - * - * @return bool */ - public function hasResults() + public function hasResults(): bool { foreach ($this->getIterator() as $_) { return true; @@ -735,11 +730,8 @@ public function hasResults() /** * Counts all the results collected by the iterators. - * - * @return int */ - #[\ReturnTypeWillChange] - public function count() + public function count(): int { return iterator_count($this->getIterator()); } diff --git a/core/vendor/symfony/finder/Gitignore.php b/core/vendor/symfony/finder/Gitignore.php index 070074b3ba..bf05c5b379 100644 --- a/core/vendor/symfony/finder/Gitignore.php +++ b/core/vendor/symfony/finder/Gitignore.php @@ -79,9 +79,7 @@ private static function lineToRegex(string $gitignoreLine): string } $regex = preg_quote(str_replace('\\', '', $gitignoreLine), '~'); - $regex = preg_replace_callback('~\\\\\[((?:\\\\!)?)([^\[\]]*)\\\\\]~', function (array $matches): string { - return '['.('' !== $matches[1] ? '^' : '').str_replace('\\-', '-', $matches[2]).']'; - }, $regex); + $regex = preg_replace_callback('~\\\\\[((?:\\\\!)?)([^\[\]]*)\\\\\]~', fn (array $matches): string => '['.('' !== $matches[1] ? '^' : '').str_replace('\\-', '-', $matches[2]).']', $regex); $regex = preg_replace('~(?:(?:\\\\\*){2,}(/?))+~', '(?:(?:(?!//).(? $iterator The Iterator to filter @@ -45,11 +45,8 @@ public function __construct(\Iterator $iterator, array $filters) /** * Filters the iterator values. - * - * @return bool */ - #[\ReturnTypeWillChange] - public function accept() + public function accept(): bool { $fileinfo = $this->current(); diff --git a/core/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php b/core/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php index f592e1913b..718d42b162 100644 --- a/core/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php +++ b/core/vendor/symfony/finder/Iterator/DateRangeFilterIterator.php @@ -22,7 +22,7 @@ */ class DateRangeFilterIterator extends \FilterIterator { - private $comparators = []; + private array $comparators = []; /** * @param \Iterator $iterator @@ -37,11 +37,8 @@ public function __construct(\Iterator $iterator, array $comparators) /** * Filters the iterator values. - * - * @return bool */ - #[\ReturnTypeWillChange] - public function accept() + public function accept(): bool { $fileinfo = $this->current(); diff --git a/core/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php b/core/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php index f593a3f082..1cddb5fa8c 100644 --- a/core/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php +++ b/core/vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php @@ -23,7 +23,7 @@ */ class DepthRangeFilterIterator extends \FilterIterator { - private $minDepth = 0; + private int $minDepth = 0; /** * @param \RecursiveIteratorIterator<\RecursiveIterator> $iterator The Iterator to filter @@ -40,11 +40,8 @@ public function __construct(\RecursiveIteratorIterator $iterator, int $minDepth /** * Filters the iterator values. - * - * @return bool */ - #[\ReturnTypeWillChange] - public function accept() + public function accept(): bool { return $this->getInnerIterator()->getDepth() >= $this->minDepth; } diff --git a/core/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php b/core/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php index 0a931c9925..21303781eb 100644 --- a/core/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php +++ b/core/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php @@ -23,7 +23,7 @@ class FileTypeFilterIterator extends \FilterIterator public const ONLY_FILES = 1; public const ONLY_DIRECTORIES = 2; - private $mode; + private int $mode; /** * @param \Iterator $iterator The Iterator to filter @@ -38,11 +38,8 @@ public function __construct(\Iterator $iterator, int $mode) /** * Filters the iterator values. - * - * @return bool */ - #[\ReturnTypeWillChange] - public function accept() + public function accept(): bool { $fileinfo = $this->current(); if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) { diff --git a/core/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php b/core/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php index 59358ba3c6..bdc71ffdd9 100644 --- a/core/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php +++ b/core/vendor/symfony/finder/Iterator/FilecontentFilterIterator.php @@ -25,11 +25,8 @@ class FilecontentFilterIterator extends MultiplePcreFilterIterator { /** * Filters the iterator values. - * - * @return bool */ - #[\ReturnTypeWillChange] - public function accept() + public function accept(): bool { if (!$this->matchRegexps && !$this->noMatchRegexps) { return true; @@ -53,10 +50,8 @@ public function accept() * Converts string to regexp if necessary. * * @param string $str Pattern: string or regexp - * - * @return string */ - protected function toRegex(string $str) + protected function toRegex(string $str): string { return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; } diff --git a/core/vendor/symfony/finder/Iterator/FilenameFilterIterator.php b/core/vendor/symfony/finder/Iterator/FilenameFilterIterator.php index 77b3b24193..05d9535811 100644 --- a/core/vendor/symfony/finder/Iterator/FilenameFilterIterator.php +++ b/core/vendor/symfony/finder/Iterator/FilenameFilterIterator.php @@ -24,11 +24,8 @@ class FilenameFilterIterator extends MultiplePcreFilterIterator { /** * Filters the iterator values. - * - * @return bool */ - #[\ReturnTypeWillChange] - public function accept() + public function accept(): bool { return $this->isAccepted($this->current()->getFilename()); } @@ -40,10 +37,8 @@ public function accept() * Glob strings are transformed with Glob::toRegex(). * * @param string $str Pattern: glob or regexp - * - * @return string */ - protected function toRegex(string $str) + protected function toRegex(string $str): string { return $this->isRegex($str) ? $str : Glob::toRegex($str); } diff --git a/core/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php b/core/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php index a2ec902b47..82a9df301c 100644 --- a/core/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php +++ b/core/vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php @@ -50,10 +50,8 @@ public function __construct(\Iterator $iterator, array $matchPatterns, array $no * If there is no regexps defined in the class, this method will accept the string. * Such case can be handled by child classes before calling the method if they want to * apply a different behavior. - * - * @return bool */ - protected function isAccepted(string $string) + protected function isAccepted(string $string): bool { // should at least not match one rule to exclude foreach ($this->noMatchRegexps as $regex) { @@ -79,10 +77,8 @@ protected function isAccepted(string $string) /** * Checks whether the string is a regex. - * - * @return bool */ - protected function isRegex(string $str) + protected function isRegex(string $str): bool { $availableModifiers = 'imsxuADU'; @@ -110,8 +106,6 @@ protected function isRegex(string $str) /** * Converts string into regexp. - * - * @return string */ - abstract protected function toRegex(string $str); + abstract protected function toRegex(string $str): string; } diff --git a/core/vendor/symfony/finder/Iterator/PathFilterIterator.php b/core/vendor/symfony/finder/Iterator/PathFilterIterator.php index 85f2be7e25..c6d58139f5 100644 --- a/core/vendor/symfony/finder/Iterator/PathFilterIterator.php +++ b/core/vendor/symfony/finder/Iterator/PathFilterIterator.php @@ -25,11 +25,8 @@ class PathFilterIterator extends MultiplePcreFilterIterator { /** * Filters the iterator values. - * - * @return bool */ - #[\ReturnTypeWillChange] - public function accept() + public function accept(): bool { $filename = $this->current()->getRelativePathname(); @@ -51,10 +48,8 @@ public function accept() * Use only / as directory separator (on Windows also). * * @param string $str Pattern: regexp or dirname - * - * @return string */ - protected function toRegex(string $str) + protected function toRegex(string $str): string { return $this->isRegex($str) ? $str : '/'.preg_quote($str, '/').'/'; } diff --git a/core/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/core/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php index 68c0908b1b..3582e6c168 100644 --- a/core/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +++ b/core/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php @@ -23,20 +23,13 @@ */ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator { - /** - * @var bool - */ - private $ignoreUnreadableDirs; - - /** - * @var bool - */ - private $rewindable; + private bool $ignoreUnreadableDirs; + private ?bool $rewindable = null; // these 3 properties take part of the performance optimization to avoid redoing the same work in all iterations - private $rootPath; - private $subPath; - private $directorySeparator = '/'; + private string $rootPath; + private string $subPath; + private string $directorySeparator = '/'; /** * @throws \RuntimeException @@ -57,17 +50,15 @@ public function __construct(string $path, int $flags, bool $ignoreUnreadableDirs /** * Return an instance of SplFileInfo with support for relative paths. - * - * @return SplFileInfo */ - #[\ReturnTypeWillChange] - public function current() + public function current(): SplFileInfo { // the logic here avoids redoing the same work in all iterations - if (null === $subPathname = $this->subPath) { - $subPathname = $this->subPath = $this->getSubPath(); + if (!isset($this->subPath)) { + $this->subPath = $this->getSubPath(); } + $subPathname = $this->subPath; if ('' !== $subPathname) { $subPathname .= $this->directorySeparator; } @@ -80,13 +71,7 @@ public function current() return new SplFileInfo($basePath.$subPathname, $this->subPath, $subPathname); } - /** - * @param bool $allowLinks - * - * @return bool - */ - #[\ReturnTypeWillChange] - public function hasChildren($allowLinks = false) + public function hasChildren(bool $allowLinks = false): bool { $hasChildren = parent::hasChildren($allowLinks); @@ -105,12 +90,9 @@ public function hasChildren($allowLinks = false) } /** - * @return \RecursiveDirectoryIterator - * * @throws AccessDeniedException */ - #[\ReturnTypeWillChange] - public function getChildren() + public function getChildren(): \RecursiveDirectoryIterator { try { $children = parent::getChildren(); @@ -132,11 +114,8 @@ public function getChildren() /** * Do nothing for non rewindable stream. - * - * @return void */ - #[\ReturnTypeWillChange] - public function rewind() + public function rewind(): void { if (false === $this->isRewindable()) { return; @@ -147,10 +126,8 @@ public function rewind() /** * Checks if the stream is rewindable. - * - * @return bool */ - public function isRewindable() + public function isRewindable(): bool { if (null !== $this->rewindable) { return $this->rewindable; diff --git a/core/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php b/core/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php index 575bf29b7e..925830a2e9 100644 --- a/core/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php +++ b/core/vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php @@ -22,7 +22,7 @@ */ class SizeRangeFilterIterator extends \FilterIterator { - private $comparators = []; + private array $comparators = []; /** * @param \Iterator $iterator @@ -37,11 +37,8 @@ public function __construct(\Iterator $iterator, array $comparators) /** * Filters the iterator values. - * - * @return bool */ - #[\ReturnTypeWillChange] - public function accept() + public function accept(): bool { $fileinfo = $this->current(); if (!$fileinfo->isFile()) { diff --git a/core/vendor/symfony/finder/Iterator/SortableIterator.php b/core/vendor/symfony/finder/Iterator/SortableIterator.php index e8b556502e..177cd0b602 100644 --- a/core/vendor/symfony/finder/Iterator/SortableIterator.php +++ b/core/vendor/symfony/finder/Iterator/SortableIterator.php @@ -48,21 +48,13 @@ public function __construct(\Traversable $iterator, int|callable $sort, bool $re $order = $reverseOrder ? -1 : 1; if (self::SORT_BY_NAME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); - }; + $this->sort = static fn (\SplFileInfo $a, \SplFileInfo $b) => $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); } elseif (self::SORT_BY_NAME_NATURAL === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); - }; + $this->sort = static fn (\SplFileInfo $a, \SplFileInfo $b) => $order * strnatcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); } elseif (self::SORT_BY_NAME_CASE_INSENSITIVE === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * strcasecmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); - }; + $this->sort = static fn (\SplFileInfo $a, \SplFileInfo $b) => $order * strcasecmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); } elseif (self::SORT_BY_NAME_NATURAL_CASE_INSENSITIVE === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * strnatcasecmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); - }; + $this->sort = static fn (\SplFileInfo $a, \SplFileInfo $b) => $order * strnatcasecmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); } elseif (self::SORT_BY_TYPE === $sort) { $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { if ($a->isDir() && $b->isFile()) { @@ -74,29 +66,19 @@ public function __construct(\Traversable $iterator, int|callable $sort, bool $re return $order * strcmp($a->getRealPath() ?: $a->getPathname(), $b->getRealPath() ?: $b->getPathname()); }; } elseif (self::SORT_BY_ACCESSED_TIME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * ($a->getATime() - $b->getATime()); - }; + $this->sort = static fn (\SplFileInfo $a, \SplFileInfo $b) => $order * ($a->getATime() - $b->getATime()); } elseif (self::SORT_BY_CHANGED_TIME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * ($a->getCTime() - $b->getCTime()); - }; + $this->sort = static fn (\SplFileInfo $a, \SplFileInfo $b) => $order * ($a->getCTime() - $b->getCTime()); } elseif (self::SORT_BY_MODIFIED_TIME === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * ($a->getMTime() - $b->getMTime()); - }; + $this->sort = static fn (\SplFileInfo $a, \SplFileInfo $b) => $order * ($a->getMTime() - $b->getMTime()); } elseif (self::SORT_BY_EXTENSION === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * strnatcmp($a->getExtension(), $b->getExtension()); - }; + $this->sort = static fn (\SplFileInfo $a, \SplFileInfo $b) => $order * strnatcmp($a->getExtension(), $b->getExtension()); } elseif (self::SORT_BY_SIZE === $sort) { - $this->sort = static function (\SplFileInfo $a, \SplFileInfo $b) use ($order) { - return $order * ($a->getSize() - $b->getSize()); - }; + $this->sort = static fn (\SplFileInfo $a, \SplFileInfo $b) => $order * ($a->getSize() - $b->getSize()); } elseif (self::SORT_BY_NONE === $sort) { $this->sort = $order; } elseif (\is_callable($sort)) { - $this->sort = $reverseOrder ? static function (\SplFileInfo $a, \SplFileInfo $b) use ($sort) { return -$sort($a, $b); } : $sort(...); + $this->sort = $reverseOrder ? static fn (\SplFileInfo $a, \SplFileInfo $b) => -$sort($a, $b) : $sort(...); } else { throw new \InvalidArgumentException('The SortableIterator takes a PHP callable or a valid built-in sort algorithm as an argument.'); } diff --git a/core/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php b/core/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php index 29fc2d99b1..7e6051d389 100644 --- a/core/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php +++ b/core/vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php @@ -126,9 +126,7 @@ private function parentDirectoriesUpTo(string $from, string $upTo): array { return array_filter( $this->parentDirectoriesUpwards($from), - static function (string $directory) use ($upTo): bool { - return str_starts_with($directory, $upTo); - } + static fn (string $directory): bool => str_starts_with($directory, $upTo) ); } diff --git a/core/vendor/symfony/finder/SplFileInfo.php b/core/vendor/symfony/finder/SplFileInfo.php index 11604a2efa..867e8e81a2 100644 --- a/core/vendor/symfony/finder/SplFileInfo.php +++ b/core/vendor/symfony/finder/SplFileInfo.php @@ -18,8 +18,8 @@ */ class SplFileInfo extends \SplFileInfo { - private $relativePath; - private $relativePathname; + private string $relativePath; + private string $relativePathname; /** * @param string $file The file name @@ -37,10 +37,8 @@ public function __construct(string $file, string $relativePath, string $relative * Returns the relative path. * * This path does not contain the file name. - * - * @return string */ - public function getRelativePath() + public function getRelativePath(): string { return $this->relativePath; } @@ -49,10 +47,8 @@ public function getRelativePath() * Returns the relative path name. * * This path contains the file name. - * - * @return string */ - public function getRelativePathname() + public function getRelativePathname(): string { return $this->relativePathname; } @@ -67,11 +63,9 @@ public function getFilenameWithoutExtension(): string /** * Returns the contents of the file. * - * @return string - * * @throws \RuntimeException */ - public function getContents() + public function getContents(): string { set_error_handler(function ($type, $msg) use (&$error) { $error = $msg; }); try { diff --git a/core/vendor/symfony/http-foundation/AcceptHeader.php b/core/vendor/symfony/http-foundation/AcceptHeader.php index 180e9604c7..853c000e00 100644 --- a/core/vendor/symfony/http-foundation/AcceptHeader.php +++ b/core/vendor/symfony/http-foundation/AcceptHeader.php @@ -46,11 +46,10 @@ public function __construct(array $items) */ public static function fromString(?string $headerValue): self { - $index = 0; - $parts = HeaderUtils::split($headerValue ?? '', ',;='); - return new self(array_map(function ($subParts) use (&$index) { + return new self(array_map(function ($subParts) { + static $index = 0; $part = array_shift($subParts); $attributes = HeaderUtils::combine($subParts); @@ -115,9 +114,7 @@ public function all(): array */ public function filter(string $pattern): self { - return new self(array_filter($this->items, function (AcceptHeaderItem $item) use ($pattern) { - return preg_match($pattern, $item->getValue()); - })); + return new self(array_filter($this->items, fn (AcceptHeaderItem $item) => preg_match($pattern, $item->getValue()))); } /** diff --git a/core/vendor/symfony/http-foundation/BinaryFileResponse.php b/core/vendor/symfony/http-foundation/BinaryFileResponse.php index 72cef7c0ea..cd716e590e 100644 --- a/core/vendor/symfony/http-foundation/BinaryFileResponse.php +++ b/core/vendor/symfony/http-foundation/BinaryFileResponse.php @@ -319,7 +319,7 @@ public function sendContent(): static while ('' !== $data) { $read = fwrite($out, $data); if (false === $read || connection_aborted()) { - break; + break 2; } if (0 < $length) { $length -= $read; @@ -358,6 +358,8 @@ public function getContent(): string|false /** * Trust X-Sendfile-Type header. + * + * @return void */ public static function trustXSendfileTypeHeader() { diff --git a/core/vendor/symfony/http-foundation/CHANGELOG.md b/core/vendor/symfony/http-foundation/CHANGELOG.md index fdea3d67e1..a98d23d9d1 100644 --- a/core/vendor/symfony/http-foundation/CHANGELOG.md +++ b/core/vendor/symfony/http-foundation/CHANGELOG.md @@ -1,9 +1,24 @@ CHANGELOG ========= +6.3 +--- + + * Calling `ParameterBag::getDigit()`, `getAlnum()`, `getAlpha()` on an `array` throws a `UnexpectedValueException` instead of a `TypeError` + * Add `ParameterBag::getString()` to convert a parameter into string and throw an exception if the value is invalid + * Add `ParameterBag::getEnum()` + * Create migration for session table when pdo handler is used + * Add support for Relay PHP extension for Redis + * The `Response::sendHeaders()` method now takes an optional HTTP status code as parameter, allowing to send informational responses such as Early Hints responses (103 status code) + * Add `IpUtils::isPrivateIp()` + * Add `Request::getPayload(): InputBag` + * Deprecate conversion of invalid values in `ParameterBag::getInt()` and `ParameterBag::getBoolean()`, + * Deprecate ignoring invalid values when using `ParameterBag::filter()`, unless flag `FILTER_NULL_ON_FAILURE` is set + 6.2 --- + * Add `StreamedJsonResponse` class for efficient JSON streaming * The HTTP cache store uses the `xxh128` algorithm * Deprecate calling `JsonResponse::setCallback()`, `Response::setExpires/setLastModified/setEtag()`, `MockArraySessionStorage/NativeSessionStorage::setMetadataBag()`, `NativeSessionStorage::setSaveHandler()` without arguments * Add request matchers under the `Symfony\Component\HttpFoundation\RequestMatcher` namespace diff --git a/core/vendor/symfony/http-foundation/ExpressionRequestMatcher.php b/core/vendor/symfony/http-foundation/ExpressionRequestMatcher.php index 5628ea8bc1..fe65e920d9 100644 --- a/core/vendor/symfony/http-foundation/ExpressionRequestMatcher.php +++ b/core/vendor/symfony/http-foundation/ExpressionRequestMatcher.php @@ -29,6 +29,9 @@ class ExpressionRequestMatcher extends RequestMatcher private ExpressionLanguage $language; private Expression|string $expression; + /** + * @return void + */ public function setExpression(ExpressionLanguage $language, Expression|string $expression) { $this->language = $language; @@ -38,7 +41,7 @@ public function setExpression(ExpressionLanguage $language, Expression|string $e public function matches(Request $request): bool { if (!isset($this->language)) { - throw new \LogicException('Unable to match the request as the expression language is not available.'); + throw new \LogicException('Unable to match the request as the expression language is not available. Try running "composer require symfony/expression-language".'); } return $this->language->evaluate($this->expression, [ diff --git a/core/vendor/symfony/http-foundation/FileBag.php b/core/vendor/symfony/http-foundation/FileBag.php index 7ed39408fd..b74a02e2e1 100644 --- a/core/vendor/symfony/http-foundation/FileBag.php +++ b/core/vendor/symfony/http-foundation/FileBag.php @@ -31,12 +31,18 @@ public function __construct(array $parameters = []) $this->replace($parameters); } + /** + * @return void + */ public function replace(array $files = []) { $this->parameters = []; $this->add($files); } + /** + * @return void + */ public function set(string $key, mixed $value) { if (!\is_array($value) && !$value instanceof UploadedFile) { @@ -46,6 +52,9 @@ public function set(string $key, mixed $value) parent::set($key, $this->convertFileInformation($value)); } + /** + * @return void + */ public function add(array $files = []) { foreach ($files as $key => $file) { @@ -75,7 +84,7 @@ protected function convertFileInformation(array|UploadedFile $file): array|Uploa $file = new UploadedFile($file['tmp_name'], $file['name'], $file['type'], $file['error'], false); } } else { - $file = array_map(function ($v) { return $v instanceof UploadedFile || \is_array($v) ? $this->convertFileInformation($v) : $v; }, $file); + $file = array_map(fn ($v) => $v instanceof UploadedFile || \is_array($v) ? $this->convertFileInformation($v) : $v, $file); if (array_keys($keys) === $keys) { $file = array_filter($file); } diff --git a/core/vendor/symfony/http-foundation/HeaderBag.php b/core/vendor/symfony/http-foundation/HeaderBag.php index 0883024b3b..c49a239726 100644 --- a/core/vendor/symfony/http-foundation/HeaderBag.php +++ b/core/vendor/symfony/http-foundation/HeaderBag.php @@ -63,7 +63,7 @@ public function __toString(): string * * @param string|null $key The name of the headers to return or null to get them all * - * @return array>|array + * @return ($key is null ? array> : list) */ public function all(string $key = null): array { @@ -86,6 +86,8 @@ public function keys(): array /** * Replaces the current HTTP headers by a new set. + * + * @return void */ public function replace(array $headers = []) { @@ -95,6 +97,8 @@ public function replace(array $headers = []) /** * Adds new headers the current HTTP headers set. + * + * @return void */ public function add(array $headers) { @@ -126,6 +130,8 @@ public function get(string $key, string $default = null): ?string * * @param string|string[]|null $values The value or an array of values * @param bool $replace Whether to replace the actual value or not (true by default) + * + * @return void */ public function set(string $key, string|array|null $values, bool $replace = true) { @@ -170,6 +176,8 @@ public function contains(string $key, string $value): bool /** * Removes a header. + * + * @return void */ public function remove(string $key) { @@ -202,6 +210,8 @@ public function getDate(string $key, \DateTime $default = null): ?\DateTimeInter /** * Adds a custom Cache-Control directive. + * + * @return void */ public function addCacheControlDirective(string $key, bool|string $value = true) { @@ -228,6 +238,8 @@ public function getCacheControlDirective(string $key): bool|string|null /** * Removes a Cache-Control directive. + * + * @return void */ public function removeCacheControlDirective(string $key) { @@ -254,6 +266,9 @@ public function count(): int return \count($this->headers); } + /** + * @return string + */ protected function getCacheControlHeader() { ksort($this->cacheControl); diff --git a/core/vendor/symfony/http-foundation/InputBag.php b/core/vendor/symfony/http-foundation/InputBag.php index 877ac60f3a..77990f5711 100644 --- a/core/vendor/symfony/http-foundation/InputBag.php +++ b/core/vendor/symfony/http-foundation/InputBag.php @@ -43,7 +43,7 @@ public function get(string $key, mixed $default = null): string|int|float|bool|n /** * Replaces the current input values by a new set. */ - public function replace(array $inputs = []) + public function replace(array $inputs = []): void { $this->parameters = []; $this->add($inputs); @@ -52,7 +52,7 @@ public function replace(array $inputs = []) /** * Adds input values. */ - public function add(array $inputs = []) + public function add(array $inputs = []): void { foreach ($inputs as $input => $value) { $this->set($input, $value); @@ -64,7 +64,7 @@ public function add(array $inputs = []) * * @param string|int|float|bool|array|null $value */ - public function set(string $key, mixed $value) + public function set(string $key, mixed $value): void { if (null !== $value && !\is_scalar($value) && !\is_array($value) && !$value instanceof \Stringable) { throw new \InvalidArgumentException(sprintf('Expected a scalar, or an array as a 2nd argument to "%s()", "%s" given.', __METHOD__, get_debug_type($value))); @@ -73,6 +73,34 @@ public function set(string $key, mixed $value) $this->parameters[$key] = $value; } + /** + * Returns the parameter value converted to an enum. + * + * @template T of \BackedEnum + * + * @param class-string $class + * @param ?T $default + * + * @return ?T + */ + public function getEnum(string $key, string $class, \BackedEnum $default = null): ?\BackedEnum + { + try { + return parent::getEnum($key, $class, $default); + } catch (\UnexpectedValueException $e) { + throw new BadRequestException($e->getMessage(), $e->getCode(), $e); + } + } + + /** + * Returns the parameter value converted to string. + */ + public function getString(string $key, string $default = ''): string + { + // Shortcuts the parent method because the validation on scalar is already done in get(). + return (string) $this->get($key, $default); + } + public function filter(string $key, mixed $default = null, int $filter = \FILTER_DEFAULT, mixed $options = []): mixed { $value = $this->has($key) ? $this->all()[$key] : $default; @@ -90,6 +118,22 @@ public function filter(string $key, mixed $default = null, int $filter = \FILTER throw new \InvalidArgumentException(sprintf('A Closure must be passed to "%s()" when FILTER_CALLBACK is used, "%s" given.', __METHOD__, get_debug_type($options['options'] ?? null))); } - return filter_var($value, $filter, $options); + $options['flags'] ??= 0; + $nullOnFailure = $options['flags'] & \FILTER_NULL_ON_FAILURE; + $options['flags'] |= \FILTER_NULL_ON_FAILURE; + + $value = filter_var($value, $filter, $options); + + if (null !== $value || $nullOnFailure) { + return $value; + } + + $method = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS | \DEBUG_BACKTRACE_PROVIDE_OBJECT, 2)[1]; + $method = ($method['object'] ?? null) === $this ? $method['function'] : 'filter'; + $hint = 'filter' === $method ? 'pass' : 'use method "filter()" with'; + + trigger_deprecation('symfony/http-foundation', '6.3', 'Ignoring invalid values when using "%s::%s(\'%s\')" is deprecated and will throw a "%s" in 7.0; '.$hint.' flag "FILTER_NULL_ON_FAILURE" to keep ignoring them.', $this::class, $method, $key, BadRequestException::class); + + return false; } } diff --git a/core/vendor/symfony/http-foundation/IpUtils.php b/core/vendor/symfony/http-foundation/IpUtils.php index 917eb6e1a4..ceab620c2f 100644 --- a/core/vendor/symfony/http-foundation/IpUtils.php +++ b/core/vendor/symfony/http-foundation/IpUtils.php @@ -18,6 +18,21 @@ */ class IpUtils { + public const PRIVATE_SUBNETS = [ + '127.0.0.0/8', // RFC1700 (Loopback) + '10.0.0.0/8', // RFC1918 + '192.168.0.0/16', // RFC1918 + '172.16.0.0/12', // RFC1918 + '169.254.0.0/16', // RFC3927 + '0.0.0.0/8', // RFC5735 + '240.0.0.0/4', // RFC1112 + '::1/128', // Loopback + 'fc00::/7', // Unique Local Address + 'fe80::/10', // Link Local Address + '::ffff:0:0/96', // IPv4 translations + '::/128', // Unspecified address + ]; + private static array $checkedIps = []; /** @@ -60,23 +75,23 @@ public static function checkIp(string $requestIp, string|array $ips): bool public static function checkIp4(string $requestIp, string $ip): bool { $cacheKey = $requestIp.'-'.$ip.'-v4'; - if (isset(self::$checkedIps[$cacheKey])) { - return self::$checkedIps[$cacheKey]; + if (null !== $cacheValue = self::getCacheResult($cacheKey)) { + return $cacheValue; } if (!filter_var($requestIp, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4)) { - return self::$checkedIps[$cacheKey] = false; + return self::setCacheResult($cacheKey, false); } if (str_contains($ip, '/')) { [$address, $netmask] = explode('/', $ip, 2); if ('0' === $netmask) { - return self::$checkedIps[$cacheKey] = false !== filter_var($address, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4); + return self::setCacheResult($cacheKey, false !== filter_var($address, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4)); } if ($netmask < 0 || $netmask > 32) { - return self::$checkedIps[$cacheKey] = false; + return self::setCacheResult($cacheKey, false); } } else { $address = $ip; @@ -84,10 +99,10 @@ public static function checkIp4(string $requestIp, string $ip): bool } if (false === ip2long($address)) { - return self::$checkedIps[$cacheKey] = false; + return self::setCacheResult($cacheKey, false); } - return self::$checkedIps[$cacheKey] = 0 === substr_compare(sprintf('%032b', ip2long($requestIp)), sprintf('%032b', ip2long($address)), 0, $netmask); + return self::setCacheResult($cacheKey, 0 === substr_compare(sprintf('%032b', ip2long($requestIp)), sprintf('%032b', ip2long($address)), 0, $netmask)); } /** @@ -105,8 +120,8 @@ public static function checkIp4(string $requestIp, string $ip): bool public static function checkIp6(string $requestIp, string $ip): bool { $cacheKey = $requestIp.'-'.$ip.'-v6'; - if (isset(self::$checkedIps[$cacheKey])) { - return self::$checkedIps[$cacheKey]; + if (null !== $cacheValue = self::getCacheResult($cacheKey)) { + return $cacheValue; } if (!((\extension_loaded('sockets') && \defined('AF_INET6')) || @inet_pton('::1'))) { @@ -115,14 +130,14 @@ public static function checkIp6(string $requestIp, string $ip): bool // Check to see if we were given a IP4 $requestIp or $ip by mistake if (!filter_var($requestIp, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6)) { - return self::$checkedIps[$cacheKey] = false; + return self::setCacheResult($cacheKey, false); } if (str_contains($ip, '/')) { [$address, $netmask] = explode('/', $ip, 2); if (!filter_var($address, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6)) { - return self::$checkedIps[$cacheKey] = false; + return self::setCacheResult($cacheKey, false); } if ('0' === $netmask) { @@ -130,11 +145,11 @@ public static function checkIp6(string $requestIp, string $ip): bool } if ($netmask < 1 || $netmask > 128) { - return self::$checkedIps[$cacheKey] = false; + return self::setCacheResult($cacheKey, false); } } else { if (!filter_var($ip, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6)) { - return self::$checkedIps[$cacheKey] = false; + return self::setCacheResult($cacheKey, false); } $address = $ip; @@ -145,7 +160,7 @@ public static function checkIp6(string $requestIp, string $ip): bool $bytesTest = unpack('n*', @inet_pton($requestIp)); if (!$bytesAddr || !$bytesTest) { - return self::$checkedIps[$cacheKey] = false; + return self::setCacheResult($cacheKey, false); } for ($i = 1, $ceil = ceil($netmask / 16); $i <= $ceil; ++$i) { @@ -153,11 +168,11 @@ public static function checkIp6(string $requestIp, string $ip): bool $left = ($left <= 16) ? $left : 16; $mask = ~(0xFFFF >> $left) & 0xFFFF; if (($bytesAddr[$i] & $mask) != ($bytesTest[$i] & $mask)) { - return self::$checkedIps[$cacheKey] = false; + return self::setCacheResult($cacheKey, false); } } - return self::$checkedIps[$cacheKey] = true; + return self::setCacheResult($cacheKey, true); } /** @@ -191,4 +206,36 @@ public static function anonymize(string $ip): string return $ip; } + + /** + * Checks if an IPv4 or IPv6 address is contained in the list of private IP subnets. + */ + public static function isPrivateIp(string $requestIp): bool + { + return self::checkIp($requestIp, self::PRIVATE_SUBNETS); + } + + private static function getCacheResult(string $cacheKey): ?bool + { + if (isset(self::$checkedIps[$cacheKey])) { + // Move the item last in cache (LRU) + $value = self::$checkedIps[$cacheKey]; + unset(self::$checkedIps[$cacheKey]); + self::$checkedIps[$cacheKey] = $value; + + return self::$checkedIps[$cacheKey]; + } + + return null; + } + + private static function setCacheResult(string $cacheKey, bool $result): bool + { + if (1000 < \count(self::$checkedIps)) { + // stop memory leak if there are many keys + self::$checkedIps = \array_slice(self::$checkedIps, 500, null, true); + } + + return self::$checkedIps[$cacheKey] = $result; + } } diff --git a/core/vendor/symfony/http-foundation/ParameterBag.php b/core/vendor/symfony/http-foundation/ParameterBag.php index 72c8f0949c..9d7012de35 100644 --- a/core/vendor/symfony/http-foundation/ParameterBag.php +++ b/core/vendor/symfony/http-foundation/ParameterBag.php @@ -60,6 +60,8 @@ public function keys(): array /** * Replaces the current parameters by a new set. + * + * @return void */ public function replace(array $parameters = []) { @@ -68,6 +70,8 @@ public function replace(array $parameters = []) /** * Adds parameters. + * + * @return void */ public function add(array $parameters = []) { @@ -79,6 +83,9 @@ public function get(string $key, mixed $default = null): mixed return \array_key_exists($key, $this->parameters) ? $this->parameters[$key] : $default; } + /** + * @return void + */ public function set(string $key, mixed $value) { $this->parameters[$key] = $value; @@ -94,6 +101,8 @@ public function has(string $key): bool /** * Removes a parameter. + * + * @return void */ public function remove(string $key) { @@ -105,7 +114,7 @@ public function remove(string $key) */ public function getAlpha(string $key, string $default = ''): string { - return preg_replace('/[^[:alpha:]]/', '', $this->get($key, $default)); + return preg_replace('/[^[:alpha:]]/', '', $this->getString($key, $default)); } /** @@ -113,7 +122,7 @@ public function getAlpha(string $key, string $default = ''): string */ public function getAlnum(string $key, string $default = ''): string { - return preg_replace('/[^[:alnum:]]/', '', $this->get($key, $default)); + return preg_replace('/[^[:alnum:]]/', '', $this->getString($key, $default)); } /** @@ -121,8 +130,20 @@ public function getAlnum(string $key, string $default = ''): string */ public function getDigits(string $key, string $default = ''): string { - // we need to remove - and + because they're allowed in the filter - return str_replace(['-', '+'], '', $this->filter($key, $default, \FILTER_SANITIZE_NUMBER_INT)); + return preg_replace('/[^[:digit:]]/', '', $this->getString($key, $default)); + } + + /** + * Returns the parameter as string. + */ + public function getString(string $key, string $default = ''): string + { + $value = $this->get($key, $default); + if (!\is_scalar($value) && !$value instanceof \Stringable) { + throw new \UnexpectedValueException(sprintf('Parameter value "%s" cannot be converted to "string".', $key)); + } + + return (string) $value; } /** @@ -130,7 +151,8 @@ public function getDigits(string $key, string $default = ''): string */ public function getInt(string $key, int $default = 0): int { - return (int) $this->get($key, $default); + // In 7.0 remove the fallback to 0, in case of failure an exception will be thrown + return $this->filter($key, $default, \FILTER_VALIDATE_INT, ['flags' => \FILTER_REQUIRE_SCALAR]) ?: 0; } /** @@ -138,13 +160,39 @@ public function getInt(string $key, int $default = 0): int */ public function getBoolean(string $key, bool $default = false): bool { - return $this->filter($key, $default, \FILTER_VALIDATE_BOOL); + return $this->filter($key, $default, \FILTER_VALIDATE_BOOL, ['flags' => \FILTER_REQUIRE_SCALAR]); + } + + /** + * Returns the parameter value converted to an enum. + * + * @template T of \BackedEnum + * + * @param class-string $class + * @param ?T $default + * + * @return ?T + */ + public function getEnum(string $key, string $class, \BackedEnum $default = null): ?\BackedEnum + { + $value = $this->get($key); + + if (null === $value) { + return $default; + } + + try { + return $class::from($value); + } catch (\ValueError|\TypeError $e) { + throw new \UnexpectedValueException(sprintf('Parameter "%s" cannot be converted to enum: %s.', $key, $e->getMessage()), $e->getCode(), $e); + } } /** * Filter key. * - * @param int $filter FILTER_* constant + * @param int $filter FILTER_* constant + * @param int|array{flags?: int, options?: array} $options Flags from FILTER_* constants * * @see https://php.net/filter-var */ @@ -162,11 +210,31 @@ public function filter(string $key, mixed $default = null, int $filter = \FILTER $options['flags'] = \FILTER_REQUIRE_ARRAY; } + if (\is_object($value) && !$value instanceof \Stringable) { + throw new \UnexpectedValueException(sprintf('Parameter value "%s" cannot be filtered.', $key)); + } + if ((\FILTER_CALLBACK & $filter) && !(($options['options'] ?? null) instanceof \Closure)) { throw new \InvalidArgumentException(sprintf('A Closure must be passed to "%s()" when FILTER_CALLBACK is used, "%s" given.', __METHOD__, get_debug_type($options['options'] ?? null))); } - return filter_var($value, $filter, $options); + $options['flags'] ??= 0; + $nullOnFailure = $options['flags'] & \FILTER_NULL_ON_FAILURE; + $options['flags'] |= \FILTER_NULL_ON_FAILURE; + + $value = filter_var($value, $filter, $options); + + if (null !== $value || $nullOnFailure) { + return $value; + } + + $method = debug_backtrace(\DEBUG_BACKTRACE_IGNORE_ARGS | \DEBUG_BACKTRACE_PROVIDE_OBJECT, 2)[1]; + $method = ($method['object'] ?? null) === $this ? $method['function'] : 'filter'; + $hint = 'filter' === $method ? 'pass' : 'use method "filter()" with'; + + trigger_deprecation('symfony/http-foundation', '6.3', 'Ignoring invalid values when using "%s::%s(\'%s\')" is deprecated and will throw an "%s" in 7.0; '.$hint.' flag "FILTER_NULL_ON_FAILURE" to keep ignoring them.', $this::class, $method, $key, \UnexpectedValueException::class); + + return false; } /** diff --git a/core/vendor/symfony/http-foundation/Request.php b/core/vendor/symfony/http-foundation/Request.php index 80866bb3ba..633b4a63e2 100644 --- a/core/vendor/symfony/http-foundation/Request.php +++ b/core/vendor/symfony/http-foundation/Request.php @@ -89,6 +89,8 @@ class Request /** * Request body parameters ($_POST). * + * @see getPayload() for portability between content types + * * @var InputBag */ public $request; @@ -263,6 +265,8 @@ public function __construct(array $query = [], array $request = [], array $attri * @param array $files The FILES parameters * @param array $server The SERVER parameters * @param string|resource|null $content The raw body data + * + * @return void */ public function initialize(array $query = [], array $request = [], array $attributes = [], array $cookies = [], array $files = [], array $server = [], $content = null) { @@ -340,6 +344,10 @@ public static function create(string $uri, string $method = 'GET', array $parame $server['REQUEST_METHOD'] = strtoupper($method); $components = parse_url($uri); + if (false === $components) { + trigger_deprecation('symfony/http-foundation', '6.3', 'Calling "%s()" with an invalid URI is deprecated.', __METHOD__); + $components = []; + } if (isset($components['host'])) { $server['SERVER_NAME'] = $components['host']; $server['HTTP_HOST'] = $components['host']; @@ -417,6 +425,8 @@ public static function create(string $uri, string $method = 'GET', array $parame * This is mainly useful when you need to override the Request class * to keep BC with an existing system. It should not be used for any * other purpose. + * + * @return void */ public static function setFactory(?callable $callable) { @@ -521,6 +531,8 @@ public function __toString(): string * * It overrides $_GET, $_POST, $_REQUEST, $_SERVER, $_COOKIE. * $_FILES is never overridden, see rfc1867 + * + * @return void */ public function overrideGlobals() { @@ -561,6 +573,8 @@ public function overrideGlobals() * * @param array $proxies A list of trusted proxies, the string 'REMOTE_ADDR' will be replaced with $_SERVER['REMOTE_ADDR'] * @param int $trustedHeaderSet A bit field of Request::HEADER_*, to set which headers to trust from your proxies + * + * @return void */ public static function setTrustedProxies(array $proxies, int $trustedHeaderSet) { @@ -602,12 +616,12 @@ public static function getTrustedHeaderSet(): int * You should only list the hosts you manage using regexs. * * @param array $hostPatterns A list of trusted host patterns + * + * @return void */ public static function setTrustedHosts(array $hostPatterns) { - self::$trustedHostPatterns = array_map(function ($hostPattern) { - return sprintf('{%s}i', $hostPattern); - }, $hostPatterns); + self::$trustedHostPatterns = array_map(fn ($hostPattern) => sprintf('{%s}i', $hostPattern), $hostPatterns); // we need to reset trusted hosts on trusted host patterns change self::$trustedHosts = []; } @@ -650,6 +664,8 @@ public static function normalizeQueryString(?string $qs): string * If these methods are not protected against CSRF, this presents a possible vulnerability. * * The HTTP method can only be overridden when the real HTTP method is POST. + * + * @return void */ public static function enableHttpMethodParameterOverride() { @@ -735,6 +751,9 @@ public function hasSession(bool $skipIfUninitialized = false): bool return null !== $this->session && (!$skipIfUninitialized || $this->session instanceof SessionInterface); } + /** + * @return void + */ public function setSession(SessionInterface $session) { $this->session = $session; @@ -745,7 +764,7 @@ public function setSession(SessionInterface $session) * * @param callable(): SessionInterface $factory */ - public function setSessionFactory(callable $factory) + public function setSessionFactory(callable $factory): void { $this->session = $factory; } @@ -1155,6 +1174,8 @@ public function getHost(): string /** * Sets the request method. + * + * @return void */ public function setMethod(string $method) { @@ -1276,6 +1297,8 @@ public function getFormat(?string $mimeType): ?string * Associates a format with mime types. * * @param string|string[] $mimeTypes The associated mime types (the preferred one must be the first as it will be used as the content type) + * + * @return void */ public function setFormat(?string $format, string|array $mimeTypes) { @@ -1306,6 +1329,8 @@ public function getRequestFormat(?string $default = 'html'): ?string /** * Sets the request format. + * + * @return void */ public function setRequestFormat(?string $format) { @@ -1336,6 +1361,8 @@ public function getContentTypeFormat(): ?string /** * Sets the default locale. + * + * @return void */ public function setDefaultLocale(string $locale) { @@ -1356,6 +1383,8 @@ public function getDefaultLocale(): string /** * Sets the locale. + * + * @return void */ public function setLocale(string $locale) { @@ -1477,9 +1506,19 @@ public function getContent(bool $asResource = false) return $this->content; } + /** + * Gets the decoded form or json request body. + */ + public function getPayload(): InputBag + { + return $this->request->count() ? clone $this->request : new InputBag($this->toArray()); + } + /** * Gets the request body decoded as array, typically from a JSON payload. * + * @see getPayload() for portability between content types + * * @throws JsonException When the body cannot be decoded to an array */ public function toArray(): array @@ -1693,6 +1732,9 @@ public function preferSafeContent(): bool * Copyright (c) 2005-2010 Zend Technologies USA Inc. (https://www.zend.com/) */ + /** + * @return string + */ protected function prepareRequestUri() { $requestUri = ''; @@ -1861,6 +1903,8 @@ protected function preparePathInfo(): string /** * Initializes HTTP request formats. + * + * @return void */ protected static function initializeFormats() { diff --git a/core/vendor/symfony/http-foundation/RequestMatcher.php b/core/vendor/symfony/http-foundation/RequestMatcher.php index c2addd36e8..8c5f1d8134 100644 --- a/core/vendor/symfony/http-foundation/RequestMatcher.php +++ b/core/vendor/symfony/http-foundation/RequestMatcher.php @@ -69,6 +69,8 @@ public function __construct(string $path = null, string $host = null, string|arr * Adds a check for the HTTP scheme. * * @param string|string[]|null $scheme An HTTP scheme or an array of HTTP schemes + * + * @return void */ public function matchScheme(string|array|null $scheme) { @@ -77,6 +79,8 @@ public function matchScheme(string|array|null $scheme) /** * Adds a check for the URL host name. + * + * @return void */ public function matchHost(?string $regexp) { @@ -87,6 +91,8 @@ public function matchHost(?string $regexp) * Adds a check for the the URL port. * * @param int|null $port The port number to connect to + * + * @return void */ public function matchPort(?int $port) { @@ -95,6 +101,8 @@ public function matchPort(?int $port) /** * Adds a check for the URL path info. + * + * @return void */ public function matchPath(?string $regexp) { @@ -105,6 +113,8 @@ public function matchPath(?string $regexp) * Adds a check for the client IP. * * @param string $ip A specific IP address or a range specified using IP/netmask like 192.168.1.0/24 + * + * @return void */ public function matchIp(string $ip) { @@ -115,20 +125,22 @@ public function matchIp(string $ip) * Adds a check for the client IP. * * @param string|string[]|null $ips A specific IP address or a range specified using IP/netmask like 192.168.1.0/24 + * + * @return void */ public function matchIps(string|array|null $ips) { $ips = null !== $ips ? (array) $ips : []; - $this->ips = array_reduce($ips, static function (array $ips, string $ip) { - return array_merge($ips, preg_split('/\s*,\s*/', $ip)); - }, []); + $this->ips = array_reduce($ips, static fn (array $ips, string $ip) => array_merge($ips, preg_split('/\s*,\s*/', $ip)), []); } /** * Adds a check for the HTTP method. * * @param string|string[]|null $method An HTTP method or an array of HTTP methods + * + * @return void */ public function matchMethod(string|array|null $method) { @@ -137,6 +149,8 @@ public function matchMethod(string|array|null $method) /** * Adds a check for request attribute. + * + * @return void */ public function matchAttribute(string $key, string $regexp) { diff --git a/core/vendor/symfony/http-foundation/RequestMatcher/IpsRequestMatcher.php b/core/vendor/symfony/http-foundation/RequestMatcher/IpsRequestMatcher.php index 2ddff038df..333612e2f2 100644 --- a/core/vendor/symfony/http-foundation/RequestMatcher/IpsRequestMatcher.php +++ b/core/vendor/symfony/http-foundation/RequestMatcher/IpsRequestMatcher.php @@ -30,9 +30,7 @@ class IpsRequestMatcher implements RequestMatcherInterface */ public function __construct(array|string $ips) { - $this->ips = array_reduce((array) $ips, static function (array $ips, string $ip) { - return array_merge($ips, preg_split('/\s*,\s*/', $ip)); - }, []); + $this->ips = array_reduce((array) $ips, static fn (array $ips, string $ip) => array_merge($ips, preg_split('/\s*,\s*/', $ip)), []); } public function matches(Request $request): bool diff --git a/core/vendor/symfony/http-foundation/RequestMatcher/IsJsonRequestMatcher.php b/core/vendor/symfony/http-foundation/RequestMatcher/IsJsonRequestMatcher.php index 5da46840f4..875f992be1 100644 --- a/core/vendor/symfony/http-foundation/RequestMatcher/IsJsonRequestMatcher.php +++ b/core/vendor/symfony/http-foundation/RequestMatcher/IsJsonRequestMatcher.php @@ -23,12 +23,6 @@ class IsJsonRequestMatcher implements RequestMatcherInterface { public function matches(Request $request): bool { - try { - json_decode($request->getContent(), true, 512, \JSON_BIGINT_AS_STRING | \JSON_THROW_ON_ERROR); - } catch (\JsonException) { - return false; - } - - return true; + return json_validate($request->getContent()); } } diff --git a/core/vendor/symfony/http-foundation/RequestMatcher/MethodRequestMatcher.php b/core/vendor/symfony/http-foundation/RequestMatcher/MethodRequestMatcher.php index c7a915980c..b37f6e3c87 100644 --- a/core/vendor/symfony/http-foundation/RequestMatcher/MethodRequestMatcher.php +++ b/core/vendor/symfony/http-foundation/RequestMatcher/MethodRequestMatcher.php @@ -32,9 +32,7 @@ class MethodRequestMatcher implements RequestMatcherInterface */ public function __construct(array|string $methods) { - $this->methods = array_reduce(array_map('strtoupper', (array) $methods), static function (array $methods, string $method) { - return array_merge($methods, preg_split('/\s*,\s*/', $method)); - }, []); + $this->methods = array_reduce(array_map('strtoupper', (array) $methods), static fn (array $methods, string $method) => array_merge($methods, preg_split('/\s*,\s*/', $method)), []); } public function matches(Request $request): bool diff --git a/core/vendor/symfony/http-foundation/RequestMatcher/SchemeRequestMatcher.php b/core/vendor/symfony/http-foundation/RequestMatcher/SchemeRequestMatcher.php index 4f5eabc2c5..9c9cd58b98 100644 --- a/core/vendor/symfony/http-foundation/RequestMatcher/SchemeRequestMatcher.php +++ b/core/vendor/symfony/http-foundation/RequestMatcher/SchemeRequestMatcher.php @@ -32,9 +32,7 @@ class SchemeRequestMatcher implements RequestMatcherInterface */ public function __construct(array|string $schemes) { - $this->schemes = array_reduce(array_map('strtolower', (array) $schemes), static function (array $schemes, string $scheme) { - return array_merge($schemes, preg_split('/\s*,\s*/', $scheme)); - }, []); + $this->schemes = array_reduce(array_map('strtolower', (array) $schemes), static fn (array $schemes, string $scheme) => array_merge($schemes, preg_split('/\s*,\s*/', $scheme)), []); } public function matches(Request $request): bool diff --git a/core/vendor/symfony/http-foundation/RequestStack.php b/core/vendor/symfony/http-foundation/RequestStack.php index 6b13fa1e6e..5aa8ba7934 100644 --- a/core/vendor/symfony/http-foundation/RequestStack.php +++ b/core/vendor/symfony/http-foundation/RequestStack.php @@ -31,6 +31,8 @@ class RequestStack * * This method should generally not be called directly as the stack * management should be taken care of by the application itself. + * + * @return void */ public function push(Request $request) { diff --git a/core/vendor/symfony/http-foundation/Response.php b/core/vendor/symfony/http-foundation/Response.php index c141cbc0bb..888c6ad858 100644 --- a/core/vendor/symfony/http-foundation/Response.php +++ b/core/vendor/symfony/http-foundation/Response.php @@ -211,6 +211,11 @@ class Response 511 => 'Network Authentication Required', // RFC6585 ]; + /** + * Tracks headers already sent in informational responses. + */ + private array $sentHeaders; + /** * @param int $status The HTTP status code (200 "OK" by default) * @@ -326,21 +331,54 @@ public function prepare(Request $request): static /** * Sends HTTP headers. * + * @param null|positive-int $statusCode The status code to use, override the statusCode property if set and not null + * * @return $this */ - public function sendHeaders(): static + public function sendHeaders(/* int $statusCode = null */): static { // headers have already been sent by the developer if (headers_sent()) { return $this; } + $statusCode = \func_num_args() > 0 ? func_get_arg(0) : null; + $informationalResponse = $statusCode >= 100 && $statusCode < 200; + if ($informationalResponse && !\function_exists('headers_send')) { + // skip informational responses if not supported by the SAPI + return $this; + } + // headers foreach ($this->headers->allPreserveCaseWithoutCookies() as $name => $values) { - $replace = 0 === strcasecmp($name, 'Content-Type'); - foreach ($values as $value) { + $newValues = $values; + $replace = false; + + // As recommended by RFC 8297, PHP automatically copies headers from previous 103 responses, we need to deal with that if headers changed + if (103 === $statusCode) { + $previousValues = $this->sentHeaders[$name] ?? null; + if ($previousValues === $values) { + // Header already sent in a previous response, it will be automatically copied in this response by PHP + continue; + } + + $replace = 0 === strcasecmp($name, 'Content-Type'); + + if (null !== $previousValues && array_diff($previousValues, $values)) { + header_remove($name); + $previousValues = null; + } + + $newValues = null === $previousValues ? $values : array_diff($values, $previousValues); + } + + foreach ($newValues as $value) { header($name.': '.$value, $replace, $this->statusCode); } + + if ($informationalResponse) { + $this->sentHeaders[$name] = $values; + } } // cookies @@ -348,8 +386,16 @@ public function sendHeaders(): static header('Set-Cookie: '.$cookie, false, $this->statusCode); } + if ($informationalResponse) { + headers_send($statusCode); + + return $this; + } + + $statusCode ??= $this->statusCode; + // status - header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText), true, $this->statusCode); + header(sprintf('HTTP/%s %s %s', $this->version, $statusCode, $this->statusText), true, $statusCode); return $this; } diff --git a/core/vendor/symfony/http-foundation/ResponseHeaderBag.php b/core/vendor/symfony/http-foundation/ResponseHeaderBag.php index 9e8c5793a7..10450ca5e2 100644 --- a/core/vendor/symfony/http-foundation/ResponseHeaderBag.php +++ b/core/vendor/symfony/http-foundation/ResponseHeaderBag.php @@ -55,6 +55,9 @@ public function allPreserveCase(): array return $headers; } + /** + * @return array + */ public function allPreserveCaseWithoutCookies() { $headers = $this->allPreserveCase(); @@ -65,6 +68,9 @@ public function allPreserveCaseWithoutCookies() return $headers; } + /** + * @return void + */ public function replace(array $headers = []) { $this->headerNames = []; @@ -97,6 +103,9 @@ public function all(string $key = null): array return $headers; } + /** + * @return void + */ public function set(string $key, string|array|null $values, bool $replace = true) { $uniqueKey = strtr($key, self::UPPER, self::LOWER); @@ -125,6 +134,9 @@ public function set(string $key, string|array|null $values, bool $replace = true } } + /** + * @return void + */ public function remove(string $key) { $uniqueKey = strtr($key, self::UPPER, self::LOWER); @@ -157,6 +169,9 @@ public function getCacheControlDirective(string $key): bool|string|null return $this->computedCacheControl[$key] ?? null; } + /** + * @return void + */ public function setCookie(Cookie $cookie) { $this->cookies[$cookie->getDomain()][$cookie->getPath()][$cookie->getName()] = $cookie; @@ -165,6 +180,8 @@ public function setCookie(Cookie $cookie) /** * Removes a cookie from the array, but does not unset it in the browser. + * + * @return void */ public function removeCookie(string $name, ?string $path = '/', string $domain = null) { @@ -216,6 +233,8 @@ public function getCookies(string $format = self::COOKIES_FLAT): array /** * Clears a cookie in the browser. + * + * @return void */ public function clearCookie(string $name, ?string $path = '/', string $domain = null, bool $secure = false, bool $httpOnly = true, string $sameSite = null) { @@ -224,6 +243,8 @@ public function clearCookie(string $name, ?string $path = '/', string $domain = /** * @see HeaderUtils::makeDisposition() + * + * @return string */ public function makeDisposition(string $disposition, string $filename, string $filenameFallback = '') { diff --git a/core/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php b/core/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php index 6659617579..ad5a6590a5 100644 --- a/core/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php +++ b/core/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php @@ -36,11 +36,17 @@ public function getName(): string return $this->name; } + /** + * @return void + */ public function setName(string $name) { $this->name = $name; } + /** + * @return void + */ public function initialize(array &$attributes) { $this->attributes = &$attributes; @@ -61,6 +67,9 @@ public function get(string $name, mixed $default = null): mixed return \array_key_exists($name, $this->attributes) ? $this->attributes[$name] : $default; } + /** + * @return void + */ public function set(string $name, mixed $value) { $this->attributes[$name] = $value; @@ -71,6 +80,9 @@ public function all(): array return $this->attributes; } + /** + * @return void + */ public function replace(array $attributes) { $this->attributes = []; diff --git a/core/vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php b/core/vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php index 31a946444b..e8cd0b5a4d 100644 --- a/core/vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php +++ b/core/vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php @@ -32,6 +32,8 @@ public function get(string $name, mixed $default = null): mixed; /** * Sets an attribute. + * + * @return void */ public function set(string $name, mixed $value); @@ -42,6 +44,9 @@ public function set(string $name, mixed $value); */ public function all(): array; + /** + * @return void + */ public function replace(array $attributes); /** diff --git a/core/vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php b/core/vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php index 00b1ac9486..80bbeda0f8 100644 --- a/core/vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php +++ b/core/vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php @@ -35,11 +35,17 @@ public function getName(): string return $this->name; } + /** + * @return void + */ public function setName(string $name) { $this->name = $name; } + /** + * @return void + */ public function initialize(array &$flashes) { $this->flashes = &$flashes; @@ -51,6 +57,9 @@ public function initialize(array &$flashes) $this->flashes['new'] = []; } + /** + * @return void + */ public function add(string $type, mixed $message) { $this->flashes['new'][$type][] = $message; @@ -90,11 +99,17 @@ public function all(): array return $return; } + /** + * @return void + */ public function setAll(array $messages) { $this->flashes['new'] = $messages; } + /** + * @return void + */ public function set(string $type, string|array $messages) { $this->flashes['new'][$type] = (array) $messages; diff --git a/core/vendor/symfony/http-foundation/Session/Flash/FlashBag.php b/core/vendor/symfony/http-foundation/Session/Flash/FlashBag.php index a30d9528d1..659d59d186 100644 --- a/core/vendor/symfony/http-foundation/Session/Flash/FlashBag.php +++ b/core/vendor/symfony/http-foundation/Session/Flash/FlashBag.php @@ -35,16 +35,25 @@ public function getName(): string return $this->name; } + /** + * @return void + */ public function setName(string $name) { $this->name = $name; } + /** + * @return void + */ public function initialize(array &$flashes) { $this->flashes = &$flashes; } + /** + * @return void + */ public function add(string $type, mixed $message) { $this->flashes[$type][] = $message; @@ -81,11 +90,17 @@ public function all(): array return $return; } + /** + * @return void + */ public function set(string $type, string|array $messages) { $this->flashes[$type] = (array) $messages; } + /** + * @return void + */ public function setAll(array $messages) { $this->flashes = $messages; diff --git a/core/vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php b/core/vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php index cd10a23f3c..bbcf7f8b7d 100644 --- a/core/vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php +++ b/core/vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php @@ -22,11 +22,15 @@ interface FlashBagInterface extends SessionBagInterface { /** * Adds a flash message for the given type. + * + * @return void */ public function add(string $type, mixed $message); /** * Registers one or more messages for a given type. + * + * @return void */ public function set(string $type, string|array $messages); @@ -57,6 +61,8 @@ public function all(): array; /** * Sets all flash messages. + * + * @return void */ public function setAll(array $messages); diff --git a/core/vendor/symfony/http-foundation/Session/Session.php b/core/vendor/symfony/http-foundation/Session/Session.php index a55dde4821..b45be2f8c3 100644 --- a/core/vendor/symfony/http-foundation/Session/Session.php +++ b/core/vendor/symfony/http-foundation/Session/Session.php @@ -69,6 +69,9 @@ public function get(string $name, mixed $default = null): mixed return $this->getAttributeBag()->get($name, $default); } + /** + * @return void + */ public function set(string $name, mixed $value) { $this->getAttributeBag()->set($name, $value); @@ -79,6 +82,9 @@ public function all(): array return $this->getAttributeBag()->all(); } + /** + * @return void + */ public function replace(array $attributes) { $this->getAttributeBag()->replace($attributes); @@ -89,6 +95,9 @@ public function remove(string $name): mixed return $this->getAttributeBag()->remove($name); } + /** + * @return void + */ public function clear() { $this->getAttributeBag()->clear(); @@ -154,6 +163,9 @@ public function migrate(bool $destroy = false, int $lifetime = null): bool return $this->storage->regenerate($destroy, $lifetime); } + /** + * @return void + */ public function save() { $this->storage->save(); @@ -164,6 +176,9 @@ public function getId(): string return $this->storage->getId(); } + /** + * @return void + */ public function setId(string $id) { if ($this->storage->getId() !== $id) { @@ -176,6 +191,9 @@ public function getName(): string return $this->storage->getName(); } + /** + * @return void + */ public function setName(string $name) { $this->storage->setName($name); @@ -191,6 +209,9 @@ public function getMetadataBag(): MetadataBag return $this->storage->getMetadataBag(); } + /** + * @return void + */ public function registerBag(SessionBagInterface $bag) { $this->storage->registerBag(new SessionBagProxy($bag, $this->data, $this->usageIndex, $this->usageReporter)); diff --git a/core/vendor/symfony/http-foundation/Session/SessionBagInterface.php b/core/vendor/symfony/http-foundation/Session/SessionBagInterface.php index 821645d9b8..e1c2505549 100644 --- a/core/vendor/symfony/http-foundation/Session/SessionBagInterface.php +++ b/core/vendor/symfony/http-foundation/Session/SessionBagInterface.php @@ -25,6 +25,8 @@ public function getName(): string; /** * Initializes the Bag. + * + * @return void */ public function initialize(array &$array); diff --git a/core/vendor/symfony/http-foundation/Session/SessionInterface.php b/core/vendor/symfony/http-foundation/Session/SessionInterface.php index da2b3a37d6..534883d2d2 100644 --- a/core/vendor/symfony/http-foundation/Session/SessionInterface.php +++ b/core/vendor/symfony/http-foundation/Session/SessionInterface.php @@ -34,6 +34,8 @@ public function getId(): string; /** * Sets the session ID. + * + * @return void */ public function setId(string $id); @@ -44,6 +46,8 @@ public function getName(): string; /** * Sets the session name. + * + * @return void */ public function setName(string $name); @@ -78,6 +82,8 @@ public function migrate(bool $destroy = false, int $lifetime = null): bool; * This method is generally not required for real sessions as * the session will be automatically saved at the end of * code execution. + * + * @return void */ public function save(); @@ -93,6 +99,8 @@ public function get(string $name, mixed $default = null): mixed; /** * Sets an attribute. + * + * @return void */ public function set(string $name, mixed $value); @@ -103,6 +111,8 @@ public function all(): array; /** * Sets attributes. + * + * @return void */ public function replace(array $attributes); @@ -115,6 +125,8 @@ public function remove(string $name): mixed; /** * Clears all attributes. + * + * @return void */ public function clear(); @@ -125,6 +137,8 @@ public function isStarted(): bool; /** * Registers a SessionBagInterface with the session. + * + * @return void */ public function registerBag(SessionBagInterface $bag); diff --git a/core/vendor/symfony/http-foundation/Session/SessionUtils.php b/core/vendor/symfony/http-foundation/Session/SessionUtils.php index b5bce4a884..504c5848e9 100644 --- a/core/vendor/symfony/http-foundation/Session/SessionUtils.php +++ b/core/vendor/symfony/http-foundation/Session/SessionUtils.php @@ -25,7 +25,7 @@ final class SessionUtils * Finds the session header amongst the headers that are to be sent, removes it, and returns * it so the caller can process it further. */ - public static function popSessionCookie(string $sessionName, string $sessionId): ?string + public static function popSessionCookie(string $sessionName, #[\SensitiveParameter] string $sessionId): ?string { $sessionCookie = null; $sessionCookiePrefix = sprintf(' %s=', urlencode($sessionName)); diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php index 88e513c5dd..288c24232c 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php @@ -38,13 +38,13 @@ public function open(string $savePath, string $sessionName): bool return true; } - abstract protected function doRead(string $sessionId): string; + abstract protected function doRead(#[\SensitiveParameter] string $sessionId): string; - abstract protected function doWrite(string $sessionId, string $data): bool; + abstract protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool; - abstract protected function doDestroy(string $sessionId): bool; + abstract protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool; - public function validateId(string $sessionId): bool + public function validateId(#[\SensitiveParameter] string $sessionId): bool { $this->prefetchData = $this->read($sessionId); $this->prefetchId = $sessionId; @@ -52,7 +52,7 @@ public function validateId(string $sessionId): bool return '' !== $this->prefetchData; } - public function read(string $sessionId): string + public function read(#[\SensitiveParameter] string $sessionId): string { if (isset($this->prefetchId)) { $prefetchId = $this->prefetchId; @@ -72,7 +72,7 @@ public function read(string $sessionId): string return $data; } - public function write(string $sessionId, string $data): bool + public function write(#[\SensitiveParameter] string $sessionId, string $data): bool { // see https://github.com/igbinary/igbinary/issues/146 $this->igbinaryEmptyData ??= \function_exists('igbinary_serialize') ? igbinary_serialize([]) : ''; @@ -84,7 +84,7 @@ public function write(string $sessionId, string $data): bool return $this->doWrite($sessionId, $data); } - public function destroy(string $sessionId): bool + public function destroy(#[\SensitiveParameter] string $sessionId): bool { if (!headers_sent() && filter_var(\ini_get('session.use_cookies'), \FILTER_VALIDATE_BOOL)) { if (!isset($this->sessionName)) { diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php index 9962fef3d6..1567f54332 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php @@ -37,7 +37,7 @@ public function close(): bool return $this->handler->close(); } - public function destroy(string $sessionId): bool + public function destroy(#[\SensitiveParameter] string $sessionId): bool { return $this->handler->destroy($sessionId); } @@ -47,12 +47,12 @@ public function gc(int $maxlifetime): int|false return $this->handler->gc($maxlifetime); } - public function read(string $sessionId): string + public function read(#[\SensitiveParameter] string $sessionId): string { return $this->marshaller->unmarshall($this->handler->read($sessionId)); } - public function write(string $sessionId, string $data): bool + public function write(#[\SensitiveParameter] string $sessionId, string $data): bool { $failed = []; $marshalledData = $this->marshaller->marshall(['data' => $data], $failed); @@ -64,12 +64,12 @@ public function write(string $sessionId, string $data): bool return $this->handler->write($sessionId, $marshalledData['data']); } - public function validateId(string $sessionId): bool + public function validateId(#[\SensitiveParameter] string $sessionId): bool { return $this->handler->validateId($sessionId); } - public function updateTimestamp(string $sessionId, string $data): bool + public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool { return $this->handler->updateTimestamp($sessionId, $data); } diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php index 2bc29b459c..91a023ddbc 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php @@ -59,19 +59,19 @@ public function close(): bool return $this->memcached->quit(); } - protected function doRead(string $sessionId): string + protected function doRead(#[\SensitiveParameter] string $sessionId): string { return $this->memcached->get($this->prefix.$sessionId) ?: ''; } - public function updateTimestamp(string $sessionId, string $data): bool + public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool { $this->memcached->touch($this->prefix.$sessionId, $this->getCompatibleTtl()); return true; } - protected function doWrite(string $sessionId, string $data): bool + protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool { return $this->memcached->set($this->prefix.$sessionId, $data, $this->getCompatibleTtl()); } @@ -89,7 +89,7 @@ private function getCompatibleTtl(): int return $ttl; } - protected function doDestroy(string $sessionId): bool + protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool { $result = $this->memcached->delete($this->prefix.$sessionId); diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php index 1d42552368..8ed6a7b3fd 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php @@ -22,15 +22,8 @@ */ class MigratingSessionHandler implements \SessionHandlerInterface, \SessionUpdateTimestampHandlerInterface { - /** - * @var \SessionHandlerInterface&\SessionUpdateTimestampHandlerInterface - */ - private \SessionHandlerInterface $currentHandler; - - /** - * @var \SessionHandlerInterface&\SessionUpdateTimestampHandlerInterface - */ - private \SessionHandlerInterface $writeOnlyHandler; + private \SessionHandlerInterface&\SessionUpdateTimestampHandlerInterface $currentHandler; + private \SessionHandlerInterface&\SessionUpdateTimestampHandlerInterface $writeOnlyHandler; public function __construct(\SessionHandlerInterface $currentHandler, \SessionHandlerInterface $writeOnlyHandler) { @@ -53,7 +46,7 @@ public function close(): bool return $result; } - public function destroy(string $sessionId): bool + public function destroy(#[\SensitiveParameter] string $sessionId): bool { $result = $this->currentHandler->destroy($sessionId); $this->writeOnlyHandler->destroy($sessionId); @@ -77,13 +70,13 @@ public function open(string $savePath, string $sessionName): bool return $result; } - public function read(string $sessionId): string + public function read(#[\SensitiveParameter] string $sessionId): string { // No reading from new handler until switch-over return $this->currentHandler->read($sessionId); } - public function write(string $sessionId, string $sessionData): bool + public function write(#[\SensitiveParameter] string $sessionId, string $sessionData): bool { $result = $this->currentHandler->write($sessionId, $sessionData); $this->writeOnlyHandler->write($sessionId, $sessionData); @@ -91,13 +84,13 @@ public function write(string $sessionId, string $sessionData): bool return $result; } - public function validateId(string $sessionId): bool + public function validateId(#[\SensitiveParameter] string $sessionId): bool { // No reading from new handler until switch-over return $this->currentHandler->validateId($sessionId); } - public function updateTimestamp(string $sessionId, string $sessionData): bool + public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $sessionData): bool { $result = $this->currentHandler->updateTimestamp($sessionId, $sessionData); $this->writeOnlyHandler->updateTimestamp($sessionId, $sessionData); diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php index 63c609ae21..5ea5b4ae7d 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php @@ -84,7 +84,7 @@ public function close(): bool return true; } - protected function doDestroy(string $sessionId): bool + protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool { $this->getCollection()->deleteOne([ $this->options['id_field'] => $sessionId, @@ -100,7 +100,7 @@ public function gc(int $maxlifetime): int|false ])->getDeletedCount(); } - protected function doWrite(string $sessionId, string $data): bool + protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool { $ttl = ($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime'); $expiry = new UTCDateTime((time() + (int) $ttl) * 1000); @@ -120,7 +120,7 @@ protected function doWrite(string $sessionId, string $data): bool return true; } - public function updateTimestamp(string $sessionId, string $data): bool + public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool { $ttl = ($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime'); $expiry = new UTCDateTime((time() + (int) $ttl) * 1000); @@ -136,7 +136,7 @@ public function updateTimestamp(string $sessionId, string $data): bool return true; } - protected function doRead(string $sessionId): string + protected function doRead(#[\SensitiveParameter] string $sessionId): string { $dbData = $this->getCollection()->findOne([ $this->options['id_field'] => $sessionId, diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php index 790ac2fedd..a77185e2eb 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php @@ -23,27 +23,27 @@ public function close(): bool return true; } - public function validateId(string $sessionId): bool + public function validateId(#[\SensitiveParameter] string $sessionId): bool { return true; } - protected function doRead(string $sessionId): string + protected function doRead(#[\SensitiveParameter] string $sessionId): string { return ''; } - public function updateTimestamp(string $sessionId, string $data): bool + public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool { return true; } - protected function doWrite(string $sessionId, string $data): bool + protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool { return true; } - protected function doDestroy(string $sessionId): bool + protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool { return true; } diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php index 06429b4ba0..65452a5207 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php @@ -11,6 +11,9 @@ namespace Symfony\Component\HttpFoundation\Session\Storage\Handler; +use Doctrine\DBAL\Schema\Schema; +use Doctrine\DBAL\Types\Types; + /** * Session handler using a PDO connection to read and write data. * @@ -148,7 +151,7 @@ class PdoSessionHandler extends AbstractSessionHandler * * @throws \InvalidArgumentException When PDO error mode is not PDO::ERRMODE_EXCEPTION */ - public function __construct(\PDO|string $pdoOrDsn = null, array $options = []) + public function __construct(#[\SensitiveParameter] \PDO|string $pdoOrDsn = null, #[\SensitiveParameter] array $options = []) { if ($pdoOrDsn instanceof \PDO) { if (\PDO::ERRMODE_EXCEPTION !== $pdoOrDsn->getAttribute(\PDO::ATTR_ERRMODE)) { @@ -175,6 +178,56 @@ public function __construct(\PDO|string $pdoOrDsn = null, array $options = []) $this->ttl = $options['ttl'] ?? null; } + /** + * Adds the Table to the Schema if it doesn't exist. + */ + public function configureSchema(Schema $schema, \Closure $isSameDatabase = null): void + { + if ($schema->hasTable($this->table) || ($isSameDatabase && !$isSameDatabase($this->getConnection()->exec(...)))) { + return; + } + + $table = $schema->createTable($this->table); + switch ($this->driver) { + case 'mysql': + $table->addColumn($this->idCol, Types::BINARY)->setLength(128)->setNotnull(true); + $table->addColumn($this->dataCol, Types::BLOB)->setNotnull(true); + $table->addColumn($this->lifetimeCol, Types::INTEGER)->setUnsigned(true)->setNotnull(true); + $table->addColumn($this->timeCol, Types::INTEGER)->setUnsigned(true)->setNotnull(true); + $table->addOption('collate', 'utf8mb4_bin'); + $table->addOption('engine', 'InnoDB'); + break; + case 'sqlite': + $table->addColumn($this->idCol, Types::TEXT)->setNotnull(true); + $table->addColumn($this->dataCol, Types::BLOB)->setNotnull(true); + $table->addColumn($this->lifetimeCol, Types::INTEGER)->setNotnull(true); + $table->addColumn($this->timeCol, Types::INTEGER)->setNotnull(true); + break; + case 'pgsql': + $table->addColumn($this->idCol, Types::STRING)->setLength(128)->setNotnull(true); + $table->addColumn($this->dataCol, Types::BINARY)->setNotnull(true); + $table->addColumn($this->lifetimeCol, Types::INTEGER)->setNotnull(true); + $table->addColumn($this->timeCol, Types::INTEGER)->setNotnull(true); + break; + case 'oci': + $table->addColumn($this->idCol, Types::STRING)->setLength(128)->setNotnull(true); + $table->addColumn($this->dataCol, Types::BLOB)->setNotnull(true); + $table->addColumn($this->lifetimeCol, Types::INTEGER)->setNotnull(true); + $table->addColumn($this->timeCol, Types::INTEGER)->setNotnull(true); + break; + case 'sqlsrv': + $table->addColumn($this->idCol, Types::TEXT)->setLength(128)->setNotnull(true); + $table->addColumn($this->dataCol, Types::BLOB)->setNotnull(true); + $table->addColumn($this->lifetimeCol, Types::INTEGER)->setUnsigned(true)->setNotnull(true); + $table->addColumn($this->timeCol, Types::INTEGER)->setUnsigned(true)->setNotnull(true); + break; + default: + throw new \DomainException(sprintf('Creating the session table is currently not implemented for PDO driver "%s".', $this->driver)); + } + $table->setPrimaryKey([$this->idCol]); + $table->addIndex([$this->lifetimeCol], $this->lifetimeCol.'_idx'); + } + /** * Creates the table to store sessions which can be called once for setup. * @@ -183,6 +236,8 @@ public function __construct(\PDO|string $pdoOrDsn = null, array $options = []) * saved in a BLOB. One could also use a shorter inlined varbinary column * if one was sure the data fits into it. * + * @return void + * * @throws \PDOException When the table already exists * @throws \DomainException When an unsupported PDO driver is used */ @@ -207,7 +262,7 @@ public function createTable() try { $this->pdo->exec($sql); - $this->pdo->exec("CREATE INDEX expiry ON $this->table ($this->lifetimeCol)"); + $this->pdo->exec("CREATE INDEX {$this->lifetimeCol}_idx ON $this->table ($this->lifetimeCol)"); } catch (\PDOException $e) { $this->rollback(); @@ -236,7 +291,7 @@ public function open(string $savePath, string $sessionName): bool return parent::open($savePath, $sessionName); } - public function read(string $sessionId): string + public function read(#[\SensitiveParameter] string $sessionId): string { try { return parent::read($sessionId); @@ -256,7 +311,7 @@ public function gc(int $maxlifetime): int|false return 0; } - protected function doDestroy(string $sessionId): bool + protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool { // delete the record associated with this id $sql = "DELETE FROM $this->table WHERE $this->idCol = :id"; @@ -274,7 +329,7 @@ protected function doDestroy(string $sessionId): bool return true; } - protected function doWrite(string $sessionId, string $data): bool + protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool { $maxlifetime = (int) (($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime')); @@ -317,7 +372,7 @@ protected function doWrite(string $sessionId, string $data): bool return true; } - public function updateTimestamp(string $sessionId, string $data): bool + public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool { $expiry = time() + (int) (($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime')); @@ -366,7 +421,7 @@ public function close(): bool /** * Lazy-connects to the database. */ - private function connect(string $dsn): void + private function connect(#[\SensitiveParameter] string $dsn): void { $this->pdo = new \PDO($dsn, $this->username, $this->password, $this->connectionOptions); $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); @@ -378,7 +433,7 @@ private function connect(string $dsn): void * * @todo implement missing support for oci DSN (which look totally different from other PDO ones) */ - private function buildDsnFromUrl(string $dsnOrUrl): string + private function buildDsnFromUrl(#[\SensitiveParameter] string $dsnOrUrl): string { // (pdo_)?sqlite3?:///... => (pdo_)?sqlite3?://localhost/... or else the URL will be invalid $url = preg_replace('#^((?:pdo_)?sqlite3?):///#', '$1://localhost/', $dsnOrUrl); @@ -561,7 +616,7 @@ private function rollback(): void * We need to make sure we do not return session data that is already considered garbage according * to the session.gc_maxlifetime setting because gc() is called after read() and only sometimes. */ - protected function doRead(string $sessionId): string + protected function doRead(#[\SensitiveParameter] string $sessionId): string { if (self::LOCK_ADVISORY === $this->lockMode) { $this->unlockStatements[] = $this->doAdvisoryLock($sessionId); @@ -632,7 +687,7 @@ protected function doRead(string $sessionId): string * - for oci using DBMS_LOCK.REQUEST * - for sqlsrv using sp_getapplock with LockOwner = Session */ - private function doAdvisoryLock(string $sessionId): \PDOStatement + private function doAdvisoryLock(#[\SensitiveParameter] string $sessionId): \PDOStatement { switch ($this->driver) { case 'mysql': @@ -731,7 +786,7 @@ private function getSelectSql(): string /** * Returns an insert statement supported by the database for writing session data. */ - private function getInsertStatement(string $sessionId, string $sessionData, int $maxlifetime): \PDOStatement + private function getInsertStatement(#[\SensitiveParameter] string $sessionId, string $sessionData, int $maxlifetime): \PDOStatement { switch ($this->driver) { case 'oci': @@ -758,7 +813,7 @@ private function getInsertStatement(string $sessionId, string $sessionData, int /** * Returns an update statement supported by the database for writing session data. */ - private function getUpdateStatement(string $sessionId, string $sessionData, int $maxlifetime): \PDOStatement + private function getUpdateStatement(#[\SensitiveParameter] string $sessionId, string $sessionData, int $maxlifetime): \PDOStatement { switch ($this->driver) { case 'oci': @@ -785,7 +840,7 @@ private function getUpdateStatement(string $sessionId, string $sessionData, int /** * Returns a merge/upsert (i.e. insert or update) statement when supported by the database for writing session data. */ - private function getMergeStatement(string $sessionId, string $data, int $maxlifetime): ?\PDOStatement + private function getMergeStatement(#[\SensitiveParameter] string $sessionId, string $data, int $maxlifetime): ?\PDOStatement { switch (true) { case 'mysql' === $this->driver: diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php index 38f488644d..b696eee4b7 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php @@ -12,6 +12,7 @@ namespace Symfony\Component\HttpFoundation\Session\Storage\Handler; use Predis\Response\ErrorInterface; +use Relay\Relay; /** * Redis based session storage handler based on the Redis class @@ -39,7 +40,7 @@ class RedisSessionHandler extends AbstractSessionHandler * @throws \InvalidArgumentException When unsupported client or options are passed */ public function __construct( - private \Redis|\RedisArray|\RedisCluster|\Predis\ClientInterface $redis, + private \Redis|Relay|\RedisArray|\RedisCluster|\Predis\ClientInterface $redis, array $options = [], ) { if ($diff = array_diff(array_keys($options), ['prefix', 'ttl'])) { @@ -50,12 +51,12 @@ public function __construct( $this->ttl = $options['ttl'] ?? null; } - protected function doRead(string $sessionId): string + protected function doRead(#[\SensitiveParameter] string $sessionId): string { return $this->redis->get($this->prefix.$sessionId) ?: ''; } - protected function doWrite(string $sessionId, string $data): bool + protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool { $ttl = ($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime'); $result = $this->redis->setEx($this->prefix.$sessionId, (int) $ttl, $data); @@ -63,7 +64,7 @@ protected function doWrite(string $sessionId, string $data): bool return $result && !$result instanceof ErrorInterface; } - protected function doDestroy(string $sessionId): bool + protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool { static $unlink = true; @@ -93,7 +94,7 @@ public function gc(int $maxlifetime): int|false return 0; } - public function updateTimestamp(string $sessionId, string $data): bool + public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool { $ttl = ($this->ttl instanceof \Closure ? ($this->ttl)() : $this->ttl) ?? \ini_get('session.gc_maxlifetime'); diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php index e390c8feea..dbbe7dc880 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php @@ -12,6 +12,7 @@ namespace Symfony\Component\HttpFoundation\Session\Storage\Handler; use Doctrine\DBAL\DriverManager; +use Relay\Relay; use Symfony\Component\Cache\Adapter\AbstractAdapter; /** @@ -32,6 +33,7 @@ public static function createHandler(object|string $connection, array $options = switch (true) { case $connection instanceof \Redis: + case $connection instanceof Relay: case $connection instanceof \RedisArray: case $connection instanceof \RedisCluster: case $connection instanceof \Predis\ClientInterface: @@ -54,7 +56,7 @@ public static function createHandler(object|string $connection, array $options = case str_starts_with($connection, 'rediss:'): case str_starts_with($connection, 'memcached:'): if (!class_exists(AbstractAdapter::class)) { - throw new \InvalidArgumentException(sprintf('Unsupported DSN "%s". Try running "composer require symfony/cache".', $connection)); + throw new \InvalidArgumentException('Unsupported Redis or Memcached DSN. Try running "composer require symfony/cache".'); } $handlerClass = str_starts_with($connection, 'memcached:') ? MemcachedSessionHandler::class : RedisSessionHandler::class; $connection = AbstractAdapter::createConnection($connection, ['lazy' => true]); @@ -63,7 +65,7 @@ public static function createHandler(object|string $connection, array $options = case str_starts_with($connection, 'pdo_oci://'): if (!class_exists(DriverManager::class)) { - throw new \InvalidArgumentException(sprintf('Unsupported DSN "%s". Try running "composer require doctrine/dbal".', $connection)); + throw new \InvalidArgumentException('Unsupported PDO OCI DSN. Try running "composer require doctrine/dbal".'); } $connection = DriverManager::getConnection(['url' => $connection])->getWrappedConnection(); // no break; diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php b/core/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php index 1a16364815..1f86687447 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php @@ -47,22 +47,22 @@ public function open(string $savePath, string $sessionName): bool return $this->handler->open($savePath, $sessionName); } - protected function doRead(string $sessionId): string + protected function doRead(#[\SensitiveParameter] string $sessionId): string { return $this->handler->read($sessionId); } - public function updateTimestamp(string $sessionId, string $data): bool + public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool { return $this->write($sessionId, $data); } - protected function doWrite(string $sessionId, string $data): bool + protected function doWrite(#[\SensitiveParameter] string $sessionId, string $data): bool { return $this->handler->write($sessionId, $data); } - public function destroy(string $sessionId): bool + public function destroy(#[\SensitiveParameter] string $sessionId): bool { $this->doDestroy = true; $destroyed = parent::destroy($sessionId); @@ -70,7 +70,7 @@ public function destroy(string $sessionId): bool return $this->doDestroy ? $this->doDestroy($sessionId) : $destroyed; } - protected function doDestroy(string $sessionId): bool + protected function doDestroy(#[\SensitiveParameter] string $sessionId): bool { $this->doDestroy = false; diff --git a/core/vendor/symfony/http-foundation/Session/Storage/MetadataBag.php b/core/vendor/symfony/http-foundation/Session/Storage/MetadataBag.php index 2c77f9db6c..ebe4b748ad 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/MetadataBag.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/MetadataBag.php @@ -51,6 +51,9 @@ public function __construct(string $storageKey = '_sf2_meta', int $updateThresho $this->updateThreshold = $updateThreshold; } + /** + * @return void + */ public function initialize(array &$array) { $this->meta = &$array; @@ -82,6 +85,8 @@ public function getLifetime(): int * will leave the system settings unchanged, 0 sets the cookie * to expire with browser session. Time is in seconds, and is * not a Unix timestamp. + * + * @return void */ public function stampNew(int $lifetime = null) { @@ -126,6 +131,8 @@ public function getName(): string /** * Sets name. + * + * @return void */ public function setName(string $name) { diff --git a/core/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php b/core/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php index 67fa0f95e0..d30b56d691 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php @@ -68,6 +68,9 @@ public function __construct(string $name = 'MOCKSESSID', MetadataBag $metaBag = $this->setMetadataBag($metaBag); } + /** + * @return void + */ public function setSessionData(array $array) { $this->data = $array; @@ -105,6 +108,9 @@ public function getId(): string return $this->id; } + /** + * @return void + */ public function setId(string $id) { if ($this->started) { @@ -119,11 +125,17 @@ public function getName(): string return $this->name; } + /** + * @return void + */ public function setName(string $name) { $this->name = $name; } + /** + * @return void + */ public function save() { if (!$this->started || $this->closed) { @@ -134,6 +146,9 @@ public function save() $this->started = false; } + /** + * @return void + */ public function clear() { // clear out the bags @@ -148,6 +163,9 @@ public function clear() $this->loadSession(); } + /** + * @return void + */ public function registerBag(SessionBagInterface $bag) { $this->bags[$bag->getName()] = $bag; @@ -171,6 +189,9 @@ public function isStarted(): bool return $this->started; } + /** + * @return void + */ public function setMetadataBag(MetadataBag $bag = null) { if (1 > \func_num_args()) { @@ -198,6 +219,9 @@ protected function generateId(): string return hash('sha256', uniqid('ss_mock_', true)); } + /** + * @return void + */ protected function loadSession() { $bags = array_merge($this->bags, [$this->metadataBag]); diff --git a/core/vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php b/core/vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php index 28771ad54e..95f69f2e13 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php @@ -73,6 +73,9 @@ public function regenerate(bool $destroy = false, int $lifetime = null): bool return parent::regenerate($destroy, $lifetime); } + /** + * @return void + */ public function save() { if (!$this->started) { diff --git a/core/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php b/core/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php index 8b89478820..7c6b6f9296 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php @@ -183,6 +183,9 @@ public function getId(): string return $this->saveHandler->getId(); } + /** + * @return void + */ public function setId(string $id) { $this->saveHandler->setId($id); @@ -193,6 +196,9 @@ public function getName(): string return $this->saveHandler->getName(); } + /** + * @return void + */ public function setName(string $name) { $this->saveHandler->setName($name); @@ -222,6 +228,9 @@ public function regenerate(bool $destroy = false, int $lifetime = null): bool return session_regenerate_id($destroy); } + /** + * @return void + */ public function save() { // Store a copy so we can restore the bags in case the session was not left empty @@ -261,6 +270,9 @@ public function save() $this->started = false; } + /** + * @return void + */ public function clear() { // clear out the bags @@ -275,6 +287,9 @@ public function clear() $this->loadSession(); } + /** + * @return void + */ public function registerBag(SessionBagInterface $bag) { if ($this->started) { @@ -299,6 +314,9 @@ public function getBag(string $name): SessionBagInterface return $this->bags[$name]; } + /** + * @return void + */ public function setMetadataBag(MetadataBag $metaBag = null) { if (1 > \func_num_args()) { @@ -329,6 +347,8 @@ public function isStarted(): bool * @param array $options Session ini directives [key => value] * * @see https://php.net/session.configuration + * + * @return void */ public function setOptions(array $options) { @@ -372,6 +392,8 @@ public function setOptions(array $options) * @see https://php.net/sessionhandlerinterface * @see https://php.net/sessionhandler * + * @return void + * * @throws \InvalidArgumentException */ public function setSaveHandler(AbstractProxy|\SessionHandlerInterface $saveHandler = null) @@ -404,6 +426,8 @@ public function setSaveHandler(AbstractProxy|\SessionHandlerInterface $saveHandl * are set to (either PHP's internal, or a custom save handler set with session_set_save_handler()). * PHP takes the return value from the read() handler, unserializes it * and populates $_SESSION with the result automatically. + * + * @return void */ protected function loadSession(array &$session = null) { diff --git a/core/vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php b/core/vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php index eed748f811..28cb3c3d05 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php @@ -41,6 +41,9 @@ public function start(): bool return true; } + /** + * @return void + */ public function clear() { // clear out the bags and nothing else that may be set diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php b/core/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php index 1845ee2c9e..2fcd06b10b 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php @@ -71,6 +71,8 @@ public function getId(): string /** * Sets the session ID. * + * @return void + * * @throws \LogicException */ public function setId(string $id) @@ -93,6 +95,8 @@ public function getName(): string /** * Sets the session name. * + * @return void + * * @throws \LogicException */ public function setName(string $name) diff --git a/core/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php b/core/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php index c292e58f05..7bf3f9ff1e 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php @@ -44,17 +44,17 @@ public function close(): bool return $this->handler->close(); } - public function read(string $sessionId): string|false + public function read(#[\SensitiveParameter] string $sessionId): string|false { return $this->handler->read($sessionId); } - public function write(string $sessionId, string $data): bool + public function write(#[\SensitiveParameter] string $sessionId, string $data): bool { return $this->handler->write($sessionId, $data); } - public function destroy(string $sessionId): bool + public function destroy(#[\SensitiveParameter] string $sessionId): bool { return $this->handler->destroy($sessionId); } @@ -64,12 +64,12 @@ public function gc(int $maxlifetime): int|false return $this->handler->gc($maxlifetime); } - public function validateId(string $sessionId): bool + public function validateId(#[\SensitiveParameter] string $sessionId): bool { return !$this->handler instanceof \SessionUpdateTimestampHandlerInterface || $this->handler->validateId($sessionId); } - public function updateTimestamp(string $sessionId, string $data): bool + public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $data): bool { return $this->handler instanceof \SessionUpdateTimestampHandlerInterface ? $this->handler->updateTimestamp($sessionId, $data) : $this->write($sessionId, $data); } diff --git a/core/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php b/core/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php index 8bd62a43ae..ed2189e4e7 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php @@ -40,6 +40,8 @@ public function getId(): string; /** * Sets the session ID. + * + * @return void */ public function setId(string $id); @@ -50,6 +52,8 @@ public function getName(): string; /** * Sets the session name. + * + * @return void */ public function setName(string $name); @@ -90,6 +94,8 @@ public function regenerate(bool $destroy = false, int $lifetime = null): bool; * a real PHP session would interfere with testing, in which case * it should actually persist the session data if required. * + * @return void + * * @throws \RuntimeException if the session is saved without being started, or if the session * is already closed */ @@ -97,6 +103,8 @@ public function save(); /** * Clear all session data in memory. + * + * @return void */ public function clear(); @@ -109,6 +117,8 @@ public function getBag(string $name): SessionBagInterface; /** * Registers a SessionBagInterface for use. + * + * @return void */ public function registerBag(SessionBagInterface $bag); diff --git a/core/vendor/symfony/http-foundation/StreamedJsonResponse.php b/core/vendor/symfony/http-foundation/StreamedJsonResponse.php new file mode 100644 index 0000000000..cf858a5eb7 --- /dev/null +++ b/core/vendor/symfony/http-foundation/StreamedJsonResponse.php @@ -0,0 +1,143 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpFoundation; + +/** + * StreamedJsonResponse represents a streamed HTTP response for JSON. + * + * A StreamedJsonResponse uses a structure and generics to create an + * efficient resource-saving JSON response. + * + * It is recommended to use flush() function after a specific number of items to directly stream the data. + * + * @see flush() + * + * @author Alexander Schranz + * + * Example usage: + * + * function loadArticles(): \Generator + * // some streamed loading + * yield ['title' => 'Article 1']; + * yield ['title' => 'Article 2']; + * yield ['title' => 'Article 3']; + * // recommended to use flush() after every specific number of items + * }), + * + * $response = new StreamedJsonResponse( + * // json structure with generators in which will be streamed + * [ + * '_embedded' => [ + * 'articles' => loadArticles(), // any generator which you want to stream as list of data + * ], + * ], + * ); + */ +class StreamedJsonResponse extends StreamedResponse +{ + private const PLACEHOLDER = '__symfony_json__'; + + /** + * @param mixed[] $data JSON Data containing PHP generators which will be streamed as list of data + * @param int $status The HTTP status code (200 "OK" by default) + * @param array $headers An array of HTTP headers + * @param int $encodingOptions Flags for the json_encode() function + */ + public function __construct( + private readonly array $data, + int $status = 200, + array $headers = [], + private int $encodingOptions = JsonResponse::DEFAULT_ENCODING_OPTIONS, + ) { + parent::__construct($this->stream(...), $status, $headers); + + if (!$this->headers->get('Content-Type')) { + $this->headers->set('Content-Type', 'application/json'); + } + } + + private function stream(): void + { + $generators = []; + $structure = $this->data; + + array_walk_recursive($structure, function (&$item, $key) use (&$generators) { + if (self::PLACEHOLDER === $key) { + // if the placeholder is already in the structure it should be replaced with a new one that explode + // works like expected for the structure + $generators[] = $key; + } + + // generators should be used but for better DX all kind of Traversable and objects are supported + if (\is_object($item)) { + $generators[] = $item; + $item = self::PLACEHOLDER; + } elseif (self::PLACEHOLDER === $item) { + // if the placeholder is already in the structure it should be replaced with a new one that explode + // works like expected for the structure + $generators[] = $item; + } + }); + + $jsonEncodingOptions = \JSON_THROW_ON_ERROR | $this->encodingOptions; + $keyEncodingOptions = $jsonEncodingOptions & ~\JSON_NUMERIC_CHECK; + + $jsonParts = explode('"'.self::PLACEHOLDER.'"', json_encode($structure, $jsonEncodingOptions)); + + foreach ($generators as $index => $generator) { + // send first and between parts of the structure + echo $jsonParts[$index]; + + if ($generator instanceof \JsonSerializable || !$generator instanceof \Traversable) { + // the placeholders, JsonSerializable and none traversable items in the structure are rendered here + echo json_encode($generator, $jsonEncodingOptions); + + continue; + } + + $isFirstItem = true; + $startTag = '['; + + foreach ($generator as $key => $item) { + if ($isFirstItem) { + $isFirstItem = false; + // depending on the first elements key the generator is detected as a list or map + // we can not check for a whole list or map because that would hurt the performance + // of the streamed response which is the main goal of this response class + if (0 !== $key) { + $startTag = '{'; + } + + echo $startTag; + } else { + // if not first element of the generic, a separator is required between the elements + echo ','; + } + + if ('{' === $startTag) { + echo json_encode((string) $key, $keyEncodingOptions).':'; + } + + echo json_encode($item, $jsonEncodingOptions); + } + + if ($isFirstItem) { // indicates that the generator was empty + echo '['; + } + + echo '[' === $startTag ? ']' : '}'; + } + + // send last part of the structure + echo $jsonParts[array_key_last($jsonParts)]; + } +} diff --git a/core/vendor/symfony/http-foundation/StreamedResponse.php b/core/vendor/symfony/http-foundation/StreamedResponse.php index 0bddcdc9bb..2c8ff15f36 100644 --- a/core/vendor/symfony/http-foundation/StreamedResponse.php +++ b/core/vendor/symfony/http-foundation/StreamedResponse.php @@ -59,17 +59,22 @@ public function setCallback(callable $callback): static /** * This method only sends the headers once. * + * @param null|positive-int $statusCode The status code to use, override the statusCode property if set and not null + * * @return $this */ - public function sendHeaders(): static + public function sendHeaders(/* int $statusCode = null */): static { if ($this->headersSent) { return $this; } - $this->headersSent = true; + $statusCode = \func_num_args() > 0 ? func_get_arg(0) : null; + if ($statusCode < 100 || $statusCode >= 200) { + $this->headersSent = true; + } - return parent::sendHeaders(); + return parent::sendHeaders($statusCode); } /** diff --git a/core/vendor/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php b/core/vendor/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php index b3d375e4c3..417efc77a6 100644 --- a/core/vendor/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php +++ b/core/vendor/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php @@ -69,9 +69,7 @@ protected function getCookie(Response $response): ?Cookie { $cookies = $response->headers->getCookies(); - $filteredCookies = array_filter($cookies, function (Cookie $cookie) { - return $cookie->getName() === $this->name && $cookie->getPath() === $this->path && $cookie->getDomain() === $this->domain; - }); + $filteredCookies = array_filter($cookies, fn (Cookie $cookie) => $cookie->getName() === $this->name && $cookie->getPath() === $this->path && $cookie->getDomain() === $this->domain); return reset($filteredCookies) ?: null; } diff --git a/core/vendor/symfony/http-foundation/Test/Constraint/ResponseHasCookie.php b/core/vendor/symfony/http-foundation/Test/Constraint/ResponseHasCookie.php index 9b15aeae83..73393d386f 100644 --- a/core/vendor/symfony/http-foundation/Test/Constraint/ResponseHasCookie.php +++ b/core/vendor/symfony/http-foundation/Test/Constraint/ResponseHasCookie.php @@ -61,9 +61,7 @@ private function getCookie(Response $response): ?Cookie { $cookies = $response->headers->getCookies(); - $filteredCookies = array_filter($cookies, function (Cookie $cookie) { - return $cookie->getName() === $this->name && $cookie->getPath() === $this->path && $cookie->getDomain() === $this->domain; - }); + $filteredCookies = array_filter($cookies, fn (Cookie $cookie) => $cookie->getName() === $this->name && $cookie->getPath() === $this->path && $cookie->getDomain() === $this->domain); return reset($filteredCookies) ?: null; } diff --git a/core/vendor/symfony/http-foundation/UrlHelper.php b/core/vendor/symfony/http-foundation/UrlHelper.php index 42fcf0459a..d5641eff86 100644 --- a/core/vendor/symfony/http-foundation/UrlHelper.php +++ b/core/vendor/symfony/http-foundation/UrlHelper.php @@ -12,6 +12,7 @@ namespace Symfony\Component\HttpFoundation; use Symfony\Component\Routing\RequestContext; +use Symfony\Component\Routing\RequestContextAwareInterface; /** * A helper service for manipulating URLs within and outside the request scope. @@ -20,13 +21,11 @@ */ final class UrlHelper { - private RequestStack $requestStack; - private ?RequestContext $requestContext; - public function __construct(RequestStack $requestStack, RequestContext $requestContext = null) - { - $this->requestStack = $requestStack; - $this->requestContext = $requestContext; + public function __construct( + private RequestStack $requestStack, + private RequestContextAwareInterface|RequestContext|null $requestContext = null, + ) { } public function getAbsoluteUrl(string $path): string @@ -73,28 +72,36 @@ public function getRelativePath(string $path): string private function getAbsoluteUrlFromContext(string $path): string { - if (null === $this->requestContext || '' === $host = $this->requestContext->getHost()) { + if (null === $context = $this->requestContext) { + return $path; + } + + if ($context instanceof RequestContextAwareInterface) { + $context = $context->getContext(); + } + + if ('' === $host = $context->getHost()) { return $path; } - $scheme = $this->requestContext->getScheme(); + $scheme = $context->getScheme(); $port = ''; - if ('http' === $scheme && 80 !== $this->requestContext->getHttpPort()) { - $port = ':'.$this->requestContext->getHttpPort(); - } elseif ('https' === $scheme && 443 !== $this->requestContext->getHttpsPort()) { - $port = ':'.$this->requestContext->getHttpsPort(); + if ('http' === $scheme && 80 !== $context->getHttpPort()) { + $port = ':'.$context->getHttpPort(); + } elseif ('https' === $scheme && 443 !== $context->getHttpsPort()) { + $port = ':'.$context->getHttpsPort(); } if ('#' === $path[0]) { - $queryString = $this->requestContext->getQueryString(); - $path = $this->requestContext->getPathInfo().($queryString ? '?'.$queryString : '').$path; + $queryString = $context->getQueryString(); + $path = $context->getPathInfo().($queryString ? '?'.$queryString : '').$path; } elseif ('?' === $path[0]) { - $path = $this->requestContext->getPathInfo().$path; + $path = $context->getPathInfo().$path; } if ('/' !== $path[0]) { - $path = rtrim($this->requestContext->getBaseUrl(), '/').'/'.$path; + $path = rtrim($context->getBaseUrl(), '/').'/'.$path; } return $scheme.'://'.$host.$port.$path; diff --git a/core/vendor/symfony/http-foundation/composer.json b/core/vendor/symfony/http-foundation/composer.json index e333a23b7a..248bcbb163 100644 --- a/core/vendor/symfony/http-foundation/composer.json +++ b/core/vendor/symfony/http-foundation/composer.json @@ -17,11 +17,13 @@ ], "require": { "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php83": "^1.27" }, "require-dev": { - "predis/predis": "~1.0", + "doctrine/dbal": "^2.13.1|^3.0", + "predis/predis": "^1.1|^2.0", "symfony/cache": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", @@ -32,9 +34,6 @@ "conflict": { "symfony/cache": "<6.2" }, - "suggest" : { - "symfony/mime": "To use the file extension guesser" - }, "autoload": { "psr-4": { "Symfony\\Component\\HttpFoundation\\": "" }, "exclude-from-classmap": [ diff --git a/core/vendor/symfony/http-kernel/Attribute/AsTargetedValueResolver.php b/core/vendor/symfony/http-kernel/Attribute/AsTargetedValueResolver.php new file mode 100644 index 0000000000..c58f0e6dd5 --- /dev/null +++ b/core/vendor/symfony/http-kernel/Attribute/AsTargetedValueResolver.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Attribute; + +/** + * Service tag to autoconfigure targeted value resolvers. + */ +#[\Attribute(\Attribute::TARGET_CLASS)] +class AsTargetedValueResolver +{ + public function __construct( + public readonly ?string $name = null, + ) { + } +} diff --git a/core/vendor/symfony/http-kernel/Attribute/MapDateTime.php b/core/vendor/symfony/http-kernel/Attribute/MapDateTime.php index ce9f856855..bfe48a8090 100644 --- a/core/vendor/symfony/http-kernel/Attribute/MapDateTime.php +++ b/core/vendor/symfony/http-kernel/Attribute/MapDateTime.php @@ -11,14 +11,19 @@ namespace Symfony\Component\HttpKernel\Attribute; +use Symfony\Component\HttpKernel\Controller\ArgumentResolver\DateTimeValueResolver; + /** * Controller parameter tag to configure DateTime arguments. */ #[\Attribute(\Attribute::TARGET_PARAMETER)] -class MapDateTime +class MapDateTime extends ValueResolver { public function __construct( - public readonly ?string $format = null + public readonly ?string $format = null, + bool $disabled = false, + string $resolver = DateTimeValueResolver::class, ) { + parent::__construct($resolver, $disabled); } } diff --git a/core/vendor/symfony/http-kernel/Attribute/MapQueryParameter.php b/core/vendor/symfony/http-kernel/Attribute/MapQueryParameter.php new file mode 100644 index 0000000000..f83e331e41 --- /dev/null +++ b/core/vendor/symfony/http-kernel/Attribute/MapQueryParameter.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Attribute; + +use Symfony\Component\HttpKernel\Controller\ArgumentResolver\QueryParameterValueResolver; + +/** + * Can be used to pass a query parameter to a controller argument. + * + * @author Ruud Kamphuis + */ +#[\Attribute(\Attribute::TARGET_PARAMETER)] +final class MapQueryParameter extends ValueResolver +{ + /** + * @see https://php.net/filter.filters.validate for filter, flags and options + * + * @param string|null $name The name of the query parameter. If null, the name of the argument in the controller will be used. + */ + public function __construct( + public ?string $name = null, + public ?int $filter = null, + public int $flags = 0, + public array $options = [], + string $resolver = QueryParameterValueResolver::class, + ) { + parent::__construct($resolver); + } +} diff --git a/core/vendor/symfony/http-kernel/Attribute/MapQueryString.php b/core/vendor/symfony/http-kernel/Attribute/MapQueryString.php new file mode 100644 index 0000000000..6ba85e1bdd --- /dev/null +++ b/core/vendor/symfony/http-kernel/Attribute/MapQueryString.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Attribute; + +use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestPayloadValueResolver; +use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata; +use Symfony\Component\Validator\Constraints\GroupSequence; + +/** + * Controller parameter tag to map the query string of the request to typed object and validate it. + * + * @author Konstantin Myakshin + */ +#[\Attribute(\Attribute::TARGET_PARAMETER)] +class MapQueryString extends ValueResolver +{ + public ArgumentMetadata $metadata; + + public function __construct( + public readonly array $serializationContext = [], + public readonly string|GroupSequence|array|null $validationGroups = null, + string $resolver = RequestPayloadValueResolver::class, + ) { + parent::__construct($resolver); + } +} diff --git a/core/vendor/symfony/http-kernel/Attribute/MapRequestPayload.php b/core/vendor/symfony/http-kernel/Attribute/MapRequestPayload.php new file mode 100644 index 0000000000..02c01fa40b --- /dev/null +++ b/core/vendor/symfony/http-kernel/Attribute/MapRequestPayload.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Attribute; + +use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestPayloadValueResolver; +use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata; +use Symfony\Component\Validator\Constraints\GroupSequence; + +/** + * Controller parameter tag to map the request content to typed object and validate it. + * + * @author Konstantin Myakshin + */ +#[\Attribute(\Attribute::TARGET_PARAMETER)] +class MapRequestPayload extends ValueResolver +{ + public ArgumentMetadata $metadata; + + public function __construct( + public readonly array|string|null $acceptFormat = null, + public readonly array $serializationContext = [], + public readonly string|GroupSequence|array|null $validationGroups = null, + string $resolver = RequestPayloadValueResolver::class, + ) { + parent::__construct($resolver); + } +} diff --git a/core/vendor/symfony/http-kernel/Attribute/ValueResolver.php b/core/vendor/symfony/http-kernel/Attribute/ValueResolver.php new file mode 100644 index 0000000000..5875a27484 --- /dev/null +++ b/core/vendor/symfony/http-kernel/Attribute/ValueResolver.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Attribute; + +use Symfony\Component\HttpKernel\Controller\ValueResolverInterface; + +#[\Attribute(\Attribute::TARGET_PARAMETER | \Attribute::IS_REPEATABLE)] +class ValueResolver +{ + /** + * @param class-string|string $resolver + */ + public function __construct( + public string $resolver, + public bool $disabled = false, + ) { + } +} diff --git a/core/vendor/symfony/http-kernel/Attribute/WithHttpStatus.php b/core/vendor/symfony/http-kernel/Attribute/WithHttpStatus.php new file mode 100644 index 0000000000..718427aacc --- /dev/null +++ b/core/vendor/symfony/http-kernel/Attribute/WithHttpStatus.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Attribute; + +/** + * @author Dejan Angelov + */ +#[\Attribute(\Attribute::TARGET_CLASS)] +class WithHttpStatus +{ + /** + * @param array $headers + */ + public function __construct( + public readonly int $statusCode, + public readonly array $headers = [], + ) { + } +} diff --git a/core/vendor/symfony/http-kernel/Attribute/WithLogLevel.php b/core/vendor/symfony/http-kernel/Attribute/WithLogLevel.php new file mode 100644 index 0000000000..762b077043 --- /dev/null +++ b/core/vendor/symfony/http-kernel/Attribute/WithLogLevel.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Attribute; + +use Psr\Log\LogLevel; + +/** + * @author Dejan Angelov + */ +#[\Attribute(\Attribute::TARGET_CLASS)] +final class WithLogLevel +{ + /** + * @param LogLevel::* $level + */ + public function __construct(public readonly string $level) + { + if (!\defined('Psr\Log\LogLevel::'.strtoupper($this->level))) { + throw new \InvalidArgumentException(sprintf('Invalid log level "%s".', $this->level)); + } + } +} diff --git a/core/vendor/symfony/http-kernel/Bundle/Bundle.php b/core/vendor/symfony/http-kernel/Bundle/Bundle.php index 4d17cf5db3..2ddf55f2cb 100644 --- a/core/vendor/symfony/http-kernel/Bundle/Bundle.php +++ b/core/vendor/symfony/http-kernel/Bundle/Bundle.php @@ -31,10 +31,16 @@ abstract class Bundle implements BundleInterface protected $path; private string $namespace; + /** + * @return void + */ public function boot() { } + /** + * @return void + */ public function shutdown() { } @@ -42,6 +48,8 @@ public function shutdown() /** * This method can be overridden to register compilation passes, * other extensions, ... + * + * @return void */ public function build(ContainerBuilder $container) { @@ -110,6 +118,9 @@ final public function getName(): string return $this->name; } + /** + * @return void + */ public function registerCommands(Application $application) { } @@ -132,7 +143,7 @@ protected function createContainerExtension(): ?ExtensionInterface return class_exists($class = $this->getContainerExtensionClass()) ? new $class() : null; } - private function parseClassName() + private function parseClassName(): void { $pos = strrpos(static::class, '\\'); $this->namespace = false === $pos ? '' : substr(static::class, 0, $pos); diff --git a/core/vendor/symfony/http-kernel/Bundle/BundleInterface.php b/core/vendor/symfony/http-kernel/Bundle/BundleInterface.php index 5490632552..02cb9641db 100644 --- a/core/vendor/symfony/http-kernel/Bundle/BundleInterface.php +++ b/core/vendor/symfony/http-kernel/Bundle/BundleInterface.php @@ -24,11 +24,15 @@ interface BundleInterface extends ContainerAwareInterface { /** * Boots the Bundle. + * + * @return void */ public function boot(); /** * Shutdowns the Bundle. + * + * @return void */ public function shutdown(); @@ -36,6 +40,8 @@ public function shutdown(); * Builds the bundle. * * It is only ever called once when the cache is empty. + * + * @return void */ public function build(ContainerBuilder $container); diff --git a/core/vendor/symfony/http-kernel/CHANGELOG.md b/core/vendor/symfony/http-kernel/CHANGELOG.md index 2a5aad623b..8aceb90c86 100644 --- a/core/vendor/symfony/http-kernel/CHANGELOG.md +++ b/core/vendor/symfony/http-kernel/CHANGELOG.md @@ -1,6 +1,21 @@ CHANGELOG ========= +6.3 +--- + + * Deprecate parameters `container.dumper.inline_factories` and `container.dumper.inline_class_loader`, use `.container.dumper.inline_factories` and `.container.dumper.inline_class_loader` instead + * `FileProfilerStorage` removes profiles automatically after two days + * Add `#[WithHttpStatus]` for defining status codes for exceptions + * Use an instance of `Psr\Clock\ClockInterface` to generate the current date time in `DateTimeValueResolver` + * Add `#[WithLogLevel]` for defining log levels for exceptions + * Add `skip_response_headers` to the `HttpCache` options + * Introduce targeted value resolvers with `#[ValueResolver]` and `#[AsTargetedValueResolver]` + * Add `#[MapRequestPayload]` to map and validate request payload from `Request::getContent()` or `Request::$request->all()` to typed objects + * Add `#[MapQueryString]` to map and validate request query string from `Request::$query->all()` to typed objects + * Add `#[MapQueryParameter]` to map and validate individual query parameters to controller arguments + * Collect data from every event dispatcher + 6.2 --- diff --git a/core/vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php b/core/vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php index 270f690e5b..5ca4265624 100644 --- a/core/vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php +++ b/core/vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php @@ -20,6 +20,8 @@ interface CacheClearerInterface { /** * Clears any caches necessary. + * + * @return void */ public function clear(string $cacheDir); } diff --git a/core/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php b/core/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php index 8ce77e2b74..0c541f21b8 100644 --- a/core/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php +++ b/core/vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php @@ -30,7 +30,7 @@ public function __construct(iterable $clearers = []) $this->clearers = $clearers; } - public function clear(string $cacheDir) + public function clear(string $cacheDir): void { foreach ($this->clearers as $clearer) { $clearer->clear($cacheDir); diff --git a/core/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php b/core/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php index 054f77bc22..3c99b74af3 100644 --- a/core/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php +++ b/core/vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php @@ -57,6 +57,9 @@ public function clearPool(string $name): bool return $this->pools[$name]->clear(); } + /** + * @return void + */ public function clear(string $cacheDir) { foreach ($this->pools as $pool) { diff --git a/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php b/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php index aef42d62f4..f940ba4a72 100644 --- a/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php +++ b/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php @@ -18,6 +18,9 @@ */ abstract class CacheWarmer implements CacheWarmerInterface { + /** + * @return void + */ protected function writeCacheFile(string $file, $content) { $tmpFile = @tempnam(\dirname($file), basename($file)); diff --git a/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php b/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php index af0a2d13d1..3013292167 100644 --- a/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php +++ b/core/vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php @@ -11,6 +11,8 @@ namespace Symfony\Component\HttpKernel\CacheWarmer; +use Symfony\Component\Console\Style\SymfonyStyle; + /** * Aggregates several cache warmers into a single one. * @@ -36,17 +38,17 @@ public function __construct(iterable $warmers = [], bool $debug = false, string $this->deprecationLogsFilepath = $deprecationLogsFilepath; } - public function enableOptionalWarmers() + public function enableOptionalWarmers(): void { $this->optionalsEnabled = true; } - public function enableOnlyOptionalWarmers() + public function enableOnlyOptionalWarmers(): void { $this->onlyOptionalsEnabled = $this->optionalsEnabled = true; } - public function warmUp(string $cacheDir): array + public function warmUp(string $cacheDir, SymfonyStyle $io = null): array { if ($collectDeprecations = $this->debug && !\defined('PHPUNIT_COMPOSER_INSTALL')) { $collectedLogs = []; @@ -93,7 +95,17 @@ public function warmUp(string $cacheDir): array continue; } - $preload[] = array_values((array) $warmer->warmUp($cacheDir)); + $start = microtime(true); + foreach ((array) $warmer->warmUp($cacheDir) as $item) { + if (is_dir($item) || (str_starts_with($item, \dirname($cacheDir)) && !is_file($item))) { + throw new \LogicException(sprintf('"%s::warmUp()" should return a list of files or classes but "%s" is none of them.', $warmer::class, $item)); + } + $preload[] = $item; + } + + if ($io?->isDebug()) { + $io->info(sprintf('"%s" completed in %0.2fms.', $warmer::class, 1000 * (microtime(true) - $start))); + } } } finally { if ($collectDeprecations) { @@ -110,7 +122,7 @@ public function warmUp(string $cacheDir): array } } - return array_values(array_unique(array_merge([], ...$preload))); + return array_values(array_unique($preload)); } public function isOptional(): bool diff --git a/core/vendor/symfony/http-kernel/Controller/ArgumentResolver.php b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver.php index 52ac242141..3b0f89509f 100644 --- a/core/vendor/symfony/http-kernel/Controller/ArgumentResolver.php +++ b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver.php @@ -11,7 +11,9 @@ namespace Symfony\Component\HttpKernel\Controller; +use Psr\Container\ContainerInterface; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Attribute\ValueResolver; use Symfony\Component\HttpKernel\Controller\ArgumentResolver\DefaultValueResolver; use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestAttributeValueResolver; use Symfony\Component\HttpKernel\Controller\ArgumentResolver\RequestValueResolver; @@ -20,6 +22,8 @@ use Symfony\Component\HttpKernel\Controller\ArgumentResolver\VariadicValueResolver; use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactory; use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadataFactoryInterface; +use Symfony\Component\HttpKernel\Exception\ResolverNotFoundException; +use Symfony\Contracts\Service\ServiceProviderInterface; /** * Responsible for resolving the arguments passed to an action. @@ -30,14 +34,16 @@ final class ArgumentResolver implements ArgumentResolverInterface { private ArgumentMetadataFactoryInterface $argumentMetadataFactory; private iterable $argumentValueResolvers; + private ?ContainerInterface $namedResolvers; /** * @param iterable $argumentValueResolvers */ - public function __construct(ArgumentMetadataFactoryInterface $argumentMetadataFactory = null, iterable $argumentValueResolvers = []) + public function __construct(ArgumentMetadataFactoryInterface $argumentMetadataFactory = null, iterable $argumentValueResolvers = [], ContainerInterface $namedResolvers = null) { $this->argumentMetadataFactory = $argumentMetadataFactory ?? new ArgumentMetadataFactory(); $this->argumentValueResolvers = $argumentValueResolvers ?: self::getDefaultArgumentValueResolvers(); + $this->namedResolvers = $namedResolvers; } public function getArguments(Request $request, callable $controller, \ReflectionFunctionAbstract $reflector = null): array @@ -45,10 +51,40 @@ public function getArguments(Request $request, callable $controller, \Reflection $arguments = []; foreach ($this->argumentMetadataFactory->createArgumentMetadata($controller, $reflector) as $metadata) { - foreach ($this->argumentValueResolvers as $resolver) { + $argumentValueResolvers = $this->argumentValueResolvers; + $disabledResolvers = []; + + if ($this->namedResolvers && $attributes = $metadata->getAttributesOfType(ValueResolver::class, $metadata::IS_INSTANCEOF)) { + $resolverName = null; + foreach ($attributes as $attribute) { + if ($attribute->disabled) { + $disabledResolvers[$attribute->resolver] = true; + } elseif ($resolverName) { + throw new \LogicException(sprintf('You can only pin one resolver per argument, but argument "$%s" of "%s()" has more.', $metadata->getName(), $this->getPrettyName($controller))); + } else { + $resolverName = $attribute->resolver; + } + } + + if ($resolverName) { + if (!$this->namedResolvers->has($resolverName)) { + throw new ResolverNotFoundException($resolverName, $this->namedResolvers instanceof ServiceProviderInterface ? array_keys($this->namedResolvers->getProvidedServices()) : []); + } + + $argumentValueResolvers = [ + $this->namedResolvers->get($resolverName), + new DefaultValueResolver(), + ]; + } + } + + foreach ($argumentValueResolvers as $name => $resolver) { if ((!$resolver instanceof ValueResolverInterface || $resolver instanceof TraceableValueResolver) && !$resolver->supports($request, $metadata)) { continue; } + if (isset($disabledResolvers[\is_int($name) ? $resolver::class : $name])) { + continue; + } $count = 0; foreach ($resolver->resolve($request, $metadata) as $argument) { @@ -70,15 +106,7 @@ public function getArguments(Request $request, callable $controller, \Reflection } } - $representative = $controller; - - if (\is_array($representative)) { - $representative = sprintf('%s::%s()', \get_class($representative[0]), $representative[1]); - } elseif (\is_object($representative)) { - $representative = get_debug_type($representative); - } - - throw new \RuntimeException(sprintf('Controller "%s" requires that you provide a value for the "$%s" argument. Either the argument is nullable and no null value has been provided, no default value has been provided or because there is a non optional argument after this one.', $representative, $metadata->getName())); + throw new \RuntimeException(sprintf('Controller "%s" requires that you provide a value for the "$%s" argument. Either the argument is nullable and no null value has been provided, no default value has been provided or there is a non-optional argument after this one.', $this->getPrettyName($controller), $metadata->getName())); } return $arguments; @@ -97,4 +125,21 @@ public static function getDefaultArgumentValueResolvers(): iterable new VariadicValueResolver(), ]; } + + private function getPrettyName($controller): string + { + if (\is_array($controller)) { + if (\is_object($controller[0])) { + $controller[0] = get_debug_type($controller[0]); + } + + return $controller[0].'::'.$controller[1]; + } + + if (\is_object($controller)) { + return get_debug_type($controller); + } + + return $controller; + } } diff --git a/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/DateTimeValueResolver.php b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/DateTimeValueResolver.php index 8fd7015ad0..0cfd42badc 100644 --- a/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/DateTimeValueResolver.php +++ b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/DateTimeValueResolver.php @@ -11,6 +11,7 @@ namespace Symfony\Component\HttpKernel\Controller\ArgumentResolver; +use Psr\Clock\ClockInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\Attribute\MapDateTime; use Symfony\Component\HttpKernel\Controller\ArgumentValueResolverInterface; @@ -26,6 +27,11 @@ */ final class DateTimeValueResolver implements ArgumentValueResolverInterface, ValueResolverInterface { + public function __construct( + private readonly ?ClockInterface $clock = null, + ) { + } + /** * @deprecated since Symfony 6.2, use resolve() instead */ @@ -45,12 +51,18 @@ public function resolve(Request $request, ArgumentMetadata $argument): array $value = $request->attributes->get($argument->getName()); $class = \DateTimeInterface::class === $argument->getType() ? \DateTimeImmutable::class : $argument->getType(); - if ($value instanceof \DateTimeInterface) { - return [$value instanceof $class ? $value : $class::createFromInterface($value)]; + if (!$value) { + if ($argument->isNullable()) { + return [null]; + } + if (!$this->clock) { + return [new $class()]; + } + $value = $this->clock->now(); } - if ($argument->isNullable() && !$value) { - return [null]; + if ($value instanceof \DateTimeInterface) { + return [$value instanceof $class ? $value : $class::createFromInterface($value)]; } $format = null; @@ -61,7 +73,7 @@ public function resolve(Request $request, ArgumentMetadata $argument): array } if (null !== $format) { - $date = $class::createFromFormat($format, $value); + $date = $class::createFromFormat($format, $value, $this->clock?->now()->getTimeZone()); if (($class::getLastErrors() ?: ['warning_count' => 0])['warning_count']) { $date = false; @@ -71,7 +83,7 @@ public function resolve(Request $request, ArgumentMetadata $argument): array $value = '@'.$value; } try { - $date = new $class($value ?? 'now'); + $date = new $class($value, $this->clock?->now()->getTimeZone()); } catch (\Exception) { $date = false; } diff --git a/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/QueryParameterValueResolver.php b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/QueryParameterValueResolver.php new file mode 100644 index 0000000000..f2e4bee812 --- /dev/null +++ b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/QueryParameterValueResolver.php @@ -0,0 +1,100 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Controller\ArgumentResolver; + +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Attribute\MapQueryParameter; +use Symfony\Component\HttpKernel\Controller\ValueResolverInterface; +use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata; +use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; + +/** + * @author Ruud Kamphuis + * @author Nicolas Grekas + */ +final class QueryParameterValueResolver implements ValueResolverInterface +{ + public function resolve(Request $request, ArgumentMetadata $argument): array + { + if (!$attribute = $argument->getAttributesOfType(MapQueryParameter::class)[0] ?? null) { + return []; + } + + $name = $attribute->name ?? $argument->getName(); + if (!$request->query->has($name)) { + if ($argument->isNullable() || $argument->hasDefaultValue()) { + return []; + } + + throw new NotFoundHttpException(sprintf('Missing query parameter "%s".', $name)); + } + + $value = $request->query->all()[$name]; + + if (null === $attribute->filter && 'array' === $argument->getType()) { + if (!$argument->isVariadic()) { + return [(array) $value]; + } + + $filtered = array_values(array_filter((array) $value, \is_array(...))); + + if ($filtered !== $value && !($attribute->flags & \FILTER_NULL_ON_FAILURE)) { + throw new NotFoundHttpException(sprintf('Invalid query parameter "%s".', $name)); + } + + return $filtered; + } + + $options = [ + 'flags' => $attribute->flags | \FILTER_NULL_ON_FAILURE, + 'options' => $attribute->options, + ]; + + if ('array' === $argument->getType() || $argument->isVariadic()) { + $value = (array) $value; + $options['flags'] |= \FILTER_REQUIRE_ARRAY; + } else { + $options['flags'] |= \FILTER_REQUIRE_SCALAR; + } + + $filter = match ($argument->getType()) { + 'array' => \FILTER_DEFAULT, + 'string' => \FILTER_DEFAULT, + 'int' => \FILTER_VALIDATE_INT, + 'float' => \FILTER_VALIDATE_FLOAT, + 'bool' => \FILTER_VALIDATE_BOOL, + default => throw new \LogicException(sprintf('#[MapQueryParameter] cannot be used on controller argument "%s$%s" of type "%s"; one of array, string, int, float or bool should be used.', $argument->isVariadic() ? '...' : '', $argument->getName(), $argument->getType() ?? 'mixed')) + }; + + $value = filter_var($value, $attribute->filter ?? $filter, $options); + + if (null === $value && !($attribute->flags & \FILTER_NULL_ON_FAILURE)) { + throw new NotFoundHttpException(sprintf('Invalid query parameter "%s".', $name)); + } + + if (!\is_array($value)) { + return [$value]; + } + + $filtered = array_filter($value, static fn ($v) => null !== $v); + + if ($argument->isVariadic()) { + $filtered = array_values($filtered); + } + + if ($filtered !== $value && !($attribute->flags & \FILTER_NULL_ON_FAILURE)) { + throw new NotFoundHttpException(sprintf('Invalid query parameter "%s".', $name)); + } + + return $argument->isVariadic() ? $filtered : [$filtered]; + } +} diff --git a/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php new file mode 100644 index 0000000000..9ae65c7dfd --- /dev/null +++ b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php @@ -0,0 +1,189 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Controller\ArgumentResolver; + +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Attribute\MapQueryString; +use Symfony\Component\HttpKernel\Attribute\MapRequestPayload; +use Symfony\Component\HttpKernel\Controller\ValueResolverInterface; +use Symfony\Component\HttpKernel\ControllerMetadata\ArgumentMetadata; +use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent; +use Symfony\Component\HttpKernel\Exception\HttpException; +use Symfony\Component\HttpKernel\KernelEvents; +use Symfony\Component\Serializer\Exception\NotEncodableValueException; +use Symfony\Component\Serializer\Exception\PartialDenormalizationException; +use Symfony\Component\Serializer\Exception\UnsupportedFormatException; +use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; +use Symfony\Component\Serializer\SerializerInterface; +use Symfony\Component\Validator\ConstraintViolation; +use Symfony\Component\Validator\ConstraintViolationList; +use Symfony\Component\Validator\Exception\ValidationFailedException; +use Symfony\Component\Validator\Validator\ValidatorInterface; +use Symfony\Contracts\Translation\TranslatorInterface; + +/** + * @author Konstantin Myakshin + * + * @final + */ +class RequestPayloadValueResolver implements ValueResolverInterface, EventSubscriberInterface +{ + /** + * @see \Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer::DISABLE_TYPE_ENFORCEMENT + * @see DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS + */ + private const CONTEXT_DENORMALIZE = [ + 'disable_type_enforcement' => true, + 'collect_denormalization_errors' => true, + ]; + + /** + * @see DenormalizerInterface::COLLECT_DENORMALIZATION_ERRORS + */ + private const CONTEXT_DESERIALIZE = [ + 'collect_denormalization_errors' => true, + ]; + + public function __construct( + private readonly SerializerInterface&DenormalizerInterface $serializer, + private readonly ?ValidatorInterface $validator = null, + private readonly ?TranslatorInterface $translator = null, + ) { + } + + public function resolve(Request $request, ArgumentMetadata $argument): iterable + { + $attribute = $argument->getAttributesOfType(MapQueryString::class, ArgumentMetadata::IS_INSTANCEOF)[0] + ?? $argument->getAttributesOfType(MapRequestPayload::class, ArgumentMetadata::IS_INSTANCEOF)[0] + ?? null; + + if (!$attribute) { + return []; + } + + $attribute->metadata = $argument; + + return [$attribute]; + } + + public function onKernelControllerArguments(ControllerArgumentsEvent $event): void + { + $arguments = $event->getArguments(); + + foreach ($arguments as $i => $argument) { + if ($argument instanceof MapQueryString) { + $payloadMapper = 'mapQueryString'; + $validationFailedCode = Response::HTTP_NOT_FOUND; + } elseif ($argument instanceof MapRequestPayload) { + $payloadMapper = 'mapRequestPayload'; + $validationFailedCode = Response::HTTP_UNPROCESSABLE_ENTITY; + } else { + continue; + } + $request = $event->getRequest(); + + if (!$type = $argument->metadata->getType()) { + throw new \LogicException(sprintf('Could not resolve the "$%s" controller argument: argument should be typed.', $argument->metadata->getName())); + } + + if ($this->validator) { + $violations = new ConstraintViolationList(); + try { + $payload = $this->$payloadMapper($request, $type, $argument); + } catch (PartialDenormalizationException $e) { + $trans = $this->translator ? $this->translator->trans(...) : fn ($m, $p) => strtr($m, $p); + foreach ($e->getErrors() as $error) { + $parameters = ['{{ type }}' => implode('|', $error->getExpectedTypes())]; + if ($error->canUseMessageForUser()) { + $parameters['hint'] = $error->getMessage(); + } + $template = 'This value should be of type {{ type }}.'; + $message = $trans($template, $parameters, 'validators'); + $violations->add(new ConstraintViolation($message, $template, $parameters, null, $error->getPath(), null)); + } + $payload = $e->getData(); + } + + if (null !== $payload) { + $violations->addAll($this->validator->validate($payload, null, $argument->validationGroups ?? null)); + } + + if (\count($violations)) { + throw new HttpException($validationFailedCode, implode("\n", array_map(static fn ($e) => $e->getMessage(), iterator_to_array($violations))), new ValidationFailedException($payload, $violations)); + } + } else { + try { + $payload = $this->$payloadMapper($request, $type, $argument); + } catch (PartialDenormalizationException $e) { + throw new HttpException($validationFailedCode, implode("\n", array_map(static fn ($e) => $e->getMessage(), $e->getErrors())), $e); + } + } + + if (null === $payload && !$argument->metadata->isNullable()) { + throw new HttpException($validationFailedCode); + } + + $arguments[$i] = $payload; + } + + $event->setArguments($arguments); + } + + public static function getSubscribedEvents(): array + { + return [ + KernelEvents::CONTROLLER_ARGUMENTS => 'onKernelControllerArguments', + ]; + } + + private function mapQueryString(Request $request, string $type, MapQueryString $attribute): ?object + { + if (!$data = $request->query->all()) { + return null; + } + + return $this->serializer->denormalize($data, $type, null, self::CONTEXT_DENORMALIZE + $attribute->serializationContext); + } + + private function mapRequestPayload(Request $request, string $type, MapRequestPayload $attribute): ?object + { + if (null === $format = $request->getContentTypeFormat()) { + throw new HttpException(Response::HTTP_UNSUPPORTED_MEDIA_TYPE, 'Unsupported format.'); + } + + if ($attribute->acceptFormat && !\in_array($format, (array) $attribute->acceptFormat, true)) { + throw new HttpException(Response::HTTP_UNSUPPORTED_MEDIA_TYPE, sprintf('Unsupported format, expects "%s", but "%s" given.', implode('", "', (array) $attribute->acceptFormat), $format)); + } + + if ($data = $request->request->all()) { + return $this->serializer->denormalize($data, $type, null, self::CONTEXT_DENORMALIZE + $attribute->serializationContext); + } + + if ('' === $data = $request->getContent()) { + return null; + } + + if ('form' === $format) { + throw new HttpException(Response::HTTP_BAD_REQUEST, 'Request payload contains invalid "form" data.'); + } + + try { + return $this->serializer->deserialize($data, $type, $format, self::CONTEXT_DESERIALIZE + $attribute->serializationContext); + } catch (UnsupportedFormatException $e) { + throw new HttpException(Response::HTTP_UNSUPPORTED_MEDIA_TYPE, sprintf('Unsupported format: "%s".', $format), $e); + } catch (NotEncodableValueException $e) { + throw new HttpException(Response::HTTP_BAD_REQUEST, sprintf('Request payload contains invalid "%s" data.', $format), $e); + } + } +} diff --git a/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php index edc30e1806..0cb4703b29 100644 --- a/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php +++ b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php @@ -42,7 +42,7 @@ public function supports(Request $request, ArgumentMetadata $argument): bool return true; } - $method = \get_class($this->inner).'::'.__FUNCTION__; + $method = $this->inner::class.'::'.__FUNCTION__; $this->stopwatch->start($method, 'controller.argument_value_resolver'); $return = $this->inner->supports($request, $argument); @@ -54,7 +54,7 @@ public function supports(Request $request, ArgumentMetadata $argument): bool public function resolve(Request $request, ArgumentMetadata $argument): iterable { - $method = \get_class($this->inner).'::'.__FUNCTION__; + $method = $this->inner::class.'::'.__FUNCTION__; $this->stopwatch->start($method, 'controller.argument_value_resolver'); yield from $this->inner->resolve($request, $argument); diff --git a/core/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php b/core/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php index 6930738a28..1c9254e732 100644 --- a/core/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php +++ b/core/vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php @@ -54,7 +54,7 @@ protected function instantiateController(string $class): object throw new \InvalidArgumentException(sprintf('Controller "%s" does neither exist as service nor as class.', $class), 0, $e); } - private function throwExceptionIfControllerWasRemoved(string $controller, \Throwable $previous) + private function throwExceptionIfControllerWasRemoved(string $controller, \Throwable $previous): void { if ($this->container instanceof Container && isset($this->container->getRemovedIds()[$controller])) { throw new \InvalidArgumentException(sprintf('Controller "%s" cannot be fetched from the container because it is private. Did you forget to tag the service with "controller.service_arguments"?', $controller), 0, $previous); diff --git a/core/vendor/symfony/http-kernel/Controller/ControllerResolver.php b/core/vendor/symfony/http-kernel/Controller/ControllerResolver.php index 4a08041f33..b12ce8d35f 100644 --- a/core/vendor/symfony/http-kernel/Controller/ControllerResolver.php +++ b/core/vendor/symfony/http-kernel/Controller/ControllerResolver.php @@ -197,8 +197,6 @@ private function getClassMethodsWithoutMagicMethods($classOrObject): array { $methods = get_class_methods($classOrObject); - return array_filter($methods, function (string $method) { - return 0 !== strncmp($method, '__', 2); - }); + return array_filter($methods, fn (string $method) => 0 !== strncmp($method, '__', 2)); } } diff --git a/core/vendor/symfony/http-kernel/DataCollector/AjaxDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/AjaxDataCollector.php index fda6a4eaaa..016ef2eceb 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/AjaxDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/AjaxDataCollector.php @@ -21,12 +21,12 @@ */ class AjaxDataCollector extends DataCollector { - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { // all collecting is done client side } - public function reset() + public function reset(): void { // all collecting is done client side } diff --git a/core/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php index d489b023aa..9873a9255a 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php @@ -29,7 +29,7 @@ class ConfigDataCollector extends DataCollector implements LateDataCollectorInte /** * Sets the Kernel associated with this Request. */ - public function setKernel(KernelInterface $kernel = null) + public function setKernel(KernelInterface $kernel = null): void { if (1 > \func_num_args()) { trigger_deprecation('symfony/http-kernel', '6.2', 'Calling "%s()" without any arguments is deprecated, pass null explicitly instead.', __METHOD__); @@ -38,7 +38,7 @@ public function setKernel(KernelInterface $kernel = null) $this->kernel = $kernel; } - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { $eom = \DateTimeImmutable::createFromFormat('d/m/Y', '01/'.Kernel::END_OF_MAINTENANCE); $eol = \DateTimeImmutable::createFromFormat('d/m/Y', '01/'.Kernel::END_OF_LIFE); @@ -76,12 +76,12 @@ public function collect(Request $request, Response $response, \Throwable $except } } - public function reset() + public function reset(): void { $this->data = []; } - public function lateCollect() + public function lateCollect(): void { $this->data = $this->cloneVar($this->data); } diff --git a/core/vendor/symfony/http-kernel/DataCollector/DataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/DataCollector.php index 3a3be3af49..698ed31397 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/DataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/DataCollector.php @@ -89,14 +89,14 @@ public function __wakeup() /** * @internal to prevent implementing \Serializable */ - final protected function serialize() + final protected function serialize(): void { } /** * @internal to prevent implementing \Serializable */ - final protected function unserialize(string $data) + final protected function unserialize(string $data): void { } } diff --git a/core/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php b/core/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php index 1cb865fd66..8df94ccb8f 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php +++ b/core/vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php @@ -24,6 +24,8 @@ interface DataCollectorInterface extends ResetInterface { /** * Collects data for the given Request and Response. + * + * @return void */ public function collect(Request $request, Response $response, \Throwable $exception = null); diff --git a/core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php index 48ad9acb6d..d52b02b773 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php @@ -68,32 +68,37 @@ public function __clone() $this->clonesIndex = ++$this->clonesCount; } - public function dump(Data $data) + public function dump(Data $data): ?string { $this->stopwatch?->start('dump'); ['name' => $name, 'file' => $file, 'line' => $line, 'file_excerpt' => $fileExcerpt] = $this->sourceContextProvider->getContext(); - if ($this->dumper instanceof Connection) { - if (!$this->dumper->write($data)) { - $this->isCollected = false; - } - } elseif ($this->dumper) { - $this->doDump($this->dumper, $data, $name, $file, $line); - } else { + if (!$this->dumper || $this->dumper instanceof Connection && !$this->dumper->write($data)) { $this->isCollected = false; } + $context = $data->getContext(); + $label = $context['label'] ?? ''; + unset($context['label']); + $data = $data->withContext($context); + + if ($this->dumper && !$this->dumper instanceof Connection) { + $this->doDump($this->dumper, $data, $name, $file, $line, $label); + } + if (!$this->dataCount) { $this->data = []; } - $this->data[] = compact('data', 'name', 'file', 'line', 'fileExcerpt'); + $this->data[] = compact('data', 'name', 'file', 'line', 'fileExcerpt', 'label'); ++$this->dataCount; $this->stopwatch?->stop('dump'); + + return null; } - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { if (!$this->dataCount) { $this->data = []; @@ -123,12 +128,12 @@ public function collect(Request $request, Response $response, \Throwable $except } foreach ($this->data as $dump) { - $this->doDump($dumper, $dump['data'], $dump['name'], $dump['file'], $dump['line']); + $this->doDump($dumper, $dump['data'], $dump['name'], $dump['file'], $dump['line'], $dump['label'] ?? ''); } } } - public function reset() + public function reset(): void { $this->stopwatch?->reset(); $this->data = []; @@ -240,7 +245,7 @@ public function __destruct() foreach ($this->data as $i => $dump) { $this->data[$i] = null; - $this->doDump($dumper, $dump['data'], $dump['name'], $dump['file'], $dump['line']); + $this->doDump($dumper, $dump['data'], $dump['name'], $dump['file'], $dump['line'], $dump['label'] ?? ''); } $this->data = []; @@ -248,10 +253,12 @@ public function __destruct() } } - private function doDump(DataDumperInterface $dumper, Data $data, string $name, string $file, int $line) + private function doDump(DataDumperInterface $dumper, Data $data, string $name, string $file, int $line, string $label): void { if ($dumper instanceof CliDumper) { - $contextDumper = function ($name, $file, $line, $fmt) { + $contextDumper = function ($name, $file, $line, $fmt, $label) { + $this->line = '' !== $label ? $this->style('meta', $label).' in ' : ''; + if ($this instanceof HtmlDumper) { if ($file) { $s = $this->style('meta', '%s'); @@ -265,17 +272,17 @@ private function doDump(DataDumperInterface $dumper, Data $data, string $name, s } else { $name = $this->style('meta', $name); } - $this->line = $name.' on line '.$this->style('meta', $line).':'; + $this->line .= $name.' on line '.$this->style('meta', $line).':'; } else { - $this->line = $this->style('meta', $name).' on line '.$this->style('meta', $line).':'; + $this->line .= $this->style('meta', $name).' on line '.$this->style('meta', $line).':'; } $this->dumpLine(0); }; $contextDumper = $contextDumper->bindTo($dumper, $dumper); - $contextDumper($name, $file, $line, $this->fileLinkFormat); + $contextDumper($name, $file, $line, $this->fileLinkFormat, $label); } else { $cloner = new VarCloner(); - $dumper->dump($cloner->cloneVar($name.' on line '.$line.':')); + $dumper->dump($cloner->cloneVar(('' !== $label ? $label.' in ' : '').$name.' on line '.$line.':')); } $dumper->dump($data); } diff --git a/core/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php index 0c122e6cff..8c0eefdf39 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/EventDataCollector.php @@ -28,76 +28,92 @@ */ class EventDataCollector extends DataCollector implements LateDataCollectorInterface { - private ?EventDispatcherInterface $dispatcher; - private ?RequestStack $requestStack; + /** @var iterable */ + private iterable $dispatchers; private ?Request $currentRequest = null; - public function __construct(EventDispatcherInterface $dispatcher = null, RequestStack $requestStack = null) - { - $this->dispatcher = $dispatcher; + /** + * @param iterable|EventDispatcherInterface|null $dispatchers + */ + public function __construct( + iterable|EventDispatcherInterface $dispatchers = null, + private ?RequestStack $requestStack = null, + private string $defaultDispatcher = 'event_dispatcher', + ) { + if ($dispatchers instanceof EventDispatcherInterface) { + $dispatchers = [$this->defaultDispatcher => $dispatchers]; + } + $this->dispatchers = $dispatchers ?? []; $this->requestStack = $requestStack; } - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { $this->currentRequest = $this->requestStack && $this->requestStack->getMainRequest() !== $request ? $request : null; - $this->data = [ - 'called_listeners' => [], - 'not_called_listeners' => [], - 'orphaned_events' => [], - ]; + $this->data = []; } - public function reset() + public function reset(): void { $this->data = []; - if ($this->dispatcher instanceof ResetInterface) { - $this->dispatcher->reset(); + foreach ($this->dispatchers as $dispatcher) { + if ($dispatcher instanceof ResetInterface) { + $dispatcher->reset(); + } } } - public function lateCollect() + public function lateCollect(): void { - if ($this->dispatcher instanceof TraceableEventDispatcher) { - $this->setCalledListeners($this->dispatcher->getCalledListeners($this->currentRequest)); - $this->setNotCalledListeners($this->dispatcher->getNotCalledListeners($this->currentRequest)); - $this->setOrphanedEvents($this->dispatcher->getOrphanedEvents($this->currentRequest)); + foreach ($this->dispatchers as $name => $dispatcher) { + if (!$dispatcher instanceof TraceableEventDispatcher) { + continue; + } + + $this->setCalledListeners($dispatcher->getCalledListeners($this->currentRequest), $name); + $this->setNotCalledListeners($dispatcher->getNotCalledListeners($this->currentRequest), $name); + $this->setOrphanedEvents($dispatcher->getOrphanedEvents($this->currentRequest), $name); } $this->data = $this->cloneVar($this->data); } + public function getData(): array|Data + { + return $this->data; + } + /** * @see TraceableEventDispatcher */ - public function setCalledListeners(array $listeners) + public function setCalledListeners(array $listeners, string $dispatcher = null): void { - $this->data['called_listeners'] = $listeners; + $this->data[$dispatcher ?? $this->defaultDispatcher]['called_listeners'] = $listeners; } /** * @see TraceableEventDispatcher */ - public function getCalledListeners(): array|Data + public function getCalledListeners(string $dispatcher = null): array|Data { - return $this->data['called_listeners']; + return $this->data[$dispatcher ?? $this->defaultDispatcher]['called_listeners'] ?? []; } /** * @see TraceableEventDispatcher */ - public function setNotCalledListeners(array $listeners) + public function setNotCalledListeners(array $listeners, string $dispatcher = null): void { - $this->data['not_called_listeners'] = $listeners; + $this->data[$dispatcher ?? $this->defaultDispatcher]['not_called_listeners'] = $listeners; } /** * @see TraceableEventDispatcher */ - public function getNotCalledListeners(): array|Data + public function getNotCalledListeners(string $dispatcher = null): array|Data { - return $this->data['not_called_listeners']; + return $this->data[$dispatcher ?? $this->defaultDispatcher]['not_called_listeners'] ?? []; } /** @@ -105,17 +121,17 @@ public function getNotCalledListeners(): array|Data * * @see TraceableEventDispatcher */ - public function setOrphanedEvents(array $events) + public function setOrphanedEvents(array $events, string $dispatcher = null): void { - $this->data['orphaned_events'] = $events; + $this->data[$dispatcher ?? $this->defaultDispatcher]['orphaned_events'] = $events; } /** * @see TraceableEventDispatcher */ - public function getOrphanedEvents(): array|Data + public function getOrphanedEvents(string $dispatcher = null): array|Data { - return $this->data['orphaned_events']; + return $this->data[$dispatcher ?? $this->defaultDispatcher]['orphaned_events'] ?? []; } public function getName(): string diff --git a/core/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php index dbe24b414e..bcd7f238be 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php @@ -22,16 +22,16 @@ */ class ExceptionDataCollector extends DataCollector { - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { if (null !== $exception) { $this->data = [ - 'exception' => FlattenException::createFromThrowable($exception), + 'exception' => FlattenException::createWithDataRepresentation($exception), ]; } } - public function reset() + public function reset(): void { $this->data = []; } diff --git a/core/vendor/symfony/http-kernel/DataCollector/LateDataCollectorInterface.php b/core/vendor/symfony/http-kernel/DataCollector/LateDataCollectorInterface.php index 012332de47..efa1a4f737 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/LateDataCollectorInterface.php +++ b/core/vendor/symfony/http-kernel/DataCollector/LateDataCollectorInterface.php @@ -20,6 +20,8 @@ interface LateDataCollectorInterface { /** * Collects data as late as possible. + * + * @return void */ public function lateCollect(); } diff --git a/core/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php index 661b84e0ad..d10dd365ad 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php @@ -40,12 +40,12 @@ public function __construct(object $logger = null, string $containerPathPrefix = $this->requestStack = $requestStack; } - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { $this->currentRequest = $this->requestStack && $this->requestStack->getMainRequest() !== $request ? $request : null; } - public function reset() + public function reset(): void { if (isset($this->logger)) { $this->logger->clear(); @@ -53,7 +53,7 @@ public function reset() $this->data = []; } - public function lateCollect() + public function lateCollect(): void { if (isset($this->logger)) { $containerDeprecationLogs = $this->getContainerDeprecationLogs(); @@ -110,9 +110,7 @@ public function getProcessedLogs() } // sort logs from oldest to newest - usort($logs, static function ($logA, $logB) { - return $logA['timestamp'] <=> $logB['timestamp']; - }); + usort($logs, static fn ($logA, $logB) => $logA['timestamp'] <=> $logB['timestamp']); return $this->processedLogs = $logs; } @@ -229,7 +227,7 @@ private function getContainerCompilerLogs(string $compilerLogsFilepath = null): return $logs; } - private function sanitizeLogs(array $logs) + private function sanitizeLogs(array $logs): array { $sanitizedLogs = []; $silencedLogs = []; @@ -261,7 +259,7 @@ private function sanitizeLogs(array $logs) continue; } - $errorId = md5("{$exception->getSeverity()}/{$exception->getLine()}/{$exception->getFile()}\0{$message}", true); + $errorId = hash('xxh128', "{$exception->getSeverity()}/{$exception->getLine()}/{$exception->getFile()}\0{$message}", true); if (isset($sanitizedLogs[$errorId])) { ++$sanitizedLogs[$errorId]['errorCount']; diff --git a/core/vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php index 474b5bf3fe..8b88943675 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php @@ -26,12 +26,12 @@ public function __construct() $this->reset(); } - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { $this->updateMemoryUsage(); } - public function reset() + public function reset(): void { $this->data = [ 'memory' => 0, @@ -39,7 +39,7 @@ public function reset() ]; } - public function lateCollect() + public function lateCollect(): void { $this->updateMemoryUsage(); } @@ -54,7 +54,7 @@ public function getMemoryLimit(): int|float return $this->data['memory_limit']; } - public function updateMemoryUsage() + public function updateMemoryUsage(): void { $this->data['memory'] = memory_get_peak_usage(true); } diff --git a/core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php index aa505783bb..094683ccce 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php @@ -44,7 +44,7 @@ public function __construct(RequestStack $requestStack = null) $this->requestStack = $requestStack; } - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { // attributes are serialized and as they can be anything, they need to be converted to strings. $attributes = []; @@ -136,7 +136,7 @@ public function collect(Request $request, Response $response, \Throwable $except continue; } if ('request_headers' === $key || 'response_headers' === $key) { - $this->data[$key] = array_map(function ($v) { return isset($v[0]) && !isset($v[1]) ? $v[0] : $v; }, $value); + $this->data[$key] = array_map(fn ($v) => isset($v[0]) && !isset($v[1]) ? $v[0] : $v, $value); } } @@ -173,12 +173,12 @@ public function collect(Request $request, Response $response, \Throwable $except } } - public function lateCollect() + public function lateCollect(): void { $this->data = $this->cloneVar($this->data); } - public function reset() + public function reset(): void { $this->data = []; $this->controllers = new \SplObjectStorage(); @@ -195,46 +195,73 @@ public function getPathInfo() return $this->data['path_info']; } + /** + * @return ParameterBag + */ public function getRequestRequest() { return new ParameterBag($this->data['request_request']->getValue()); } + /** + * @return ParameterBag + */ public function getRequestQuery() { return new ParameterBag($this->data['request_query']->getValue()); } + /** + * @return ParameterBag + */ public function getRequestFiles() { return new ParameterBag($this->data['request_files']->getValue()); } + /** + * @return ParameterBag + */ public function getRequestHeaders() { return new ParameterBag($this->data['request_headers']->getValue()); } + /** + * @return ParameterBag + */ public function getRequestServer(bool $raw = false) { return new ParameterBag($this->data['request_server']->getValue($raw)); } + /** + * @return ParameterBag + */ public function getRequestCookies(bool $raw = false) { return new ParameterBag($this->data['request_cookies']->getValue($raw)); } + /** + * @return ParameterBag + */ public function getRequestAttributes() { return new ParameterBag($this->data['request_attributes']->getValue()); } + /** + * @return ParameterBag + */ public function getResponseHeaders() { return new ParameterBag($this->data['response_headers']->getValue()); } + /** + * @return ParameterBag + */ public function getResponseCookies() { return new ParameterBag($this->data['response_cookies']->getValue()); @@ -270,11 +297,17 @@ public function getContent() return $this->data['content']; } + /** + * @return bool + */ public function isJsonRequest() { return 1 === preg_match('{^application/(?:\w+\++)*json$}i', $this->data['request_headers']['content-type']); } + /** + * @return string|null + */ public function getPrettyJson() { $decoded = json_decode($this->getContent()); @@ -307,6 +340,9 @@ public function getLocale() return $this->data['locale']; } + /** + * @return ParameterBag + */ public function getDotenvVars() { return new ParameterBag($this->data['dotenv_vars']->getValue()); @@ -364,12 +400,12 @@ public function getForwardToken() return $this->data['forward_token'] ?? null; } - public function onKernelController(ControllerEvent $event) + public function onKernelController(ControllerEvent $event): void { $this->controllers[$event->getRequest()] = $event->getController(); } - public function onKernelResponse(ResponseEvent $event) + public function onKernelResponse(ResponseEvent $event): void { if (!$event->isMainRequest()) { return; diff --git a/core/vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php index 3c9f2142f4..444138da70 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php @@ -34,7 +34,7 @@ public function __construct() /** * @final */ - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { if ($response instanceof RedirectResponse) { $this->data['redirect'] = true; @@ -48,6 +48,9 @@ public function collect(Request $request, Response $response, \Throwable $except unset($this->controllers[$request]); } + /** + * @return void + */ public function reset() { $this->controllers = new \SplObjectStorage(); @@ -59,6 +62,9 @@ public function reset() ]; } + /** + * @return string + */ protected function guessRoute(Request $request, string|object|array $controller) { return 'n/a'; @@ -66,6 +72,8 @@ protected function guessRoute(Request $request, string|object|array $controller) /** * Remembers the controller associated to each request. + * + * @return void */ public function onKernelController(ControllerEvent $event) { diff --git a/core/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php index 71bf255d01..a8b7ead940 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php @@ -34,7 +34,7 @@ public function __construct(KernelInterface $kernel = null, Stopwatch $stopwatch $this->data = ['events' => [], 'stopwatch_installed' => false, 'start_time' => 0]; } - public function collect(Request $request, Response $response, \Throwable $exception = null) + public function collect(Request $request, Response $response, \Throwable $exception = null): void { if (null !== $this->kernel) { $startTime = $this->kernel->getStartTime(); @@ -50,14 +50,14 @@ public function collect(Request $request, Response $response, \Throwable $except ]; } - public function reset() + public function reset(): void { $this->data = ['events' => [], 'stopwatch_installed' => false, 'start_time' => 0]; $this->stopwatch?->reset(); } - public function lateCollect() + public function lateCollect(): void { if (null !== $this->stopwatch && isset($this->data['token'])) { $this->setEvents($this->stopwatch->getSectionEvents($this->data['token'])); @@ -68,7 +68,7 @@ public function lateCollect() /** * @param StopwatchEvent[] $events The request events */ - public function setEvents(array $events) + public function setEvents(array $events): void { foreach ($events as $event) { $event->ensureStopped(); diff --git a/core/vendor/symfony/http-kernel/Debug/ErrorHandlerConfigurator.php b/core/vendor/symfony/http-kernel/Debug/ErrorHandlerConfigurator.php new file mode 100644 index 0000000000..49f188c22d --- /dev/null +++ b/core/vendor/symfony/http-kernel/Debug/ErrorHandlerConfigurator.php @@ -0,0 +1,107 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Debug; + +use Psr\Log\LoggerInterface; +use Symfony\Component\ErrorHandler\ErrorHandler; + +/** + * Configures the error handler. + * + * @final + * + * @internal + */ +class ErrorHandlerConfigurator +{ + private ?LoggerInterface $logger; + private ?LoggerInterface $deprecationLogger; + private array|int|null $levels; + private ?int $throwAt; + private bool $scream; + private bool $scope; + + /** + * @param array|int|null $levels An array map of E_* to LogLevel::* or an integer bit field of E_* constants + * @param int|null $throwAt Thrown errors in a bit field of E_* constants, or null to keep the current value + * @param bool $scream Enables/disables screaming mode, where even silenced errors are logged + * @param bool $scope Enables/disables scoping mode + */ + public function __construct(LoggerInterface $logger = null, array|int|null $levels = \E_ALL, ?int $throwAt = \E_ALL, bool $scream = true, bool $scope = true, LoggerInterface $deprecationLogger = null) + { + $this->logger = $logger; + $this->levels = $levels ?? \E_ALL; + $this->throwAt = \is_int($throwAt) ? $throwAt : (null === $throwAt ? null : ($throwAt ? \E_ALL : null)); + $this->scream = $scream; + $this->scope = $scope; + $this->deprecationLogger = $deprecationLogger; + } + + /** + * Configures the error handler. + */ + public function configure(ErrorHandler $handler): void + { + if ($this->logger || $this->deprecationLogger) { + $this->setDefaultLoggers($handler); + if (\is_array($this->levels)) { + $levels = 0; + foreach ($this->levels as $type => $log) { + $levels |= $type; + } + } else { + $levels = $this->levels; + } + + if ($this->scream) { + $handler->screamAt($levels); + } + if ($this->scope) { + $handler->scopeAt($levels & ~\E_USER_DEPRECATED & ~\E_DEPRECATED); + } else { + $handler->scopeAt(0, true); + } + $this->logger = $this->deprecationLogger = $this->levels = null; + } + if (null !== $this->throwAt) { + $handler->throwAt($this->throwAt, true); + } + } + + private function setDefaultLoggers(ErrorHandler $handler): void + { + if (\is_array($this->levels)) { + $levelsDeprecatedOnly = []; + $levelsWithoutDeprecated = []; + foreach ($this->levels as $type => $log) { + if (\E_DEPRECATED == $type || \E_USER_DEPRECATED == $type) { + $levelsDeprecatedOnly[$type] = $log; + } else { + $levelsWithoutDeprecated[$type] = $log; + } + } + } else { + $levelsDeprecatedOnly = $this->levels & (\E_DEPRECATED | \E_USER_DEPRECATED); + $levelsWithoutDeprecated = $this->levels & ~\E_DEPRECATED & ~\E_USER_DEPRECATED; + } + + $defaultLoggerLevels = $this->levels; + if ($this->deprecationLogger && $levelsDeprecatedOnly) { + $handler->setDefaultLogger($this->deprecationLogger, $levelsDeprecatedOnly); + $defaultLoggerLevels = $levelsWithoutDeprecated; + } + + if ($this->logger && $defaultLoggerLevels) { + $handler->setDefaultLogger($this->logger, $defaultLoggerLevels); + } + } +} diff --git a/core/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php b/core/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php index 4eaeeb1513..fcb100859f 100644 --- a/core/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php +++ b/core/vendor/symfony/http-kernel/Debug/FileLinkFormatter.php @@ -37,8 +37,9 @@ public function __construct(string|array $fileLinkFormat = null, RequestStack $r { $fileLinkFormat ??= $_ENV['SYMFONY_IDE'] ?? $_SERVER['SYMFONY_IDE'] ?? ''; - if (!\is_array($fileLinkFormat) && $fileLinkFormat = (ErrorRendererInterface::IDE_LINK_FORMATS[$fileLinkFormat] ?? $fileLinkFormat) ?: \ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format') ?: false) { - $i = strpos($f = $fileLinkFormat, '&', max(strrpos($f, '%f'), strrpos($f, '%l'))) ?: \strlen($f); + if (!\is_array($f = $fileLinkFormat)) { + $f = (ErrorRendererInterface::IDE_LINK_FORMATS[$f] ?? $f) ?: \ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format') ?: 'file://%f#L%l'; + $i = strpos($f, '&', max(strrpos($f, '%f'), strrpos($f, '%l'))) ?: \strlen($f); $fileLinkFormat = [substr($f, 0, $i)] + preg_split('/&([^>]++)>/', substr($f, $i), -1, \PREG_SPLIT_DELIM_CAPTURE); } @@ -48,7 +49,10 @@ public function __construct(string|array $fileLinkFormat = null, RequestStack $r $this->urlFormat = $urlFormat; } - public function format(string $file, int $line) + /** + * @return string|false + */ + public function format(string $file, int $line): string|bool { if ($fmt = $this->getFileLinkFormat()) { for ($i = 1; isset($fmt[$i]); ++$i) { diff --git a/core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php b/core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php index dff3bc9474..4f6c34bc74 100644 --- a/core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php +++ b/core/vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php @@ -23,6 +23,9 @@ */ class TraceableEventDispatcher extends BaseTraceableEventDispatcher { + /** + * @return void + */ protected function beforeDispatch(string $eventName, object $event) { switch ($eventName) { @@ -55,6 +58,9 @@ protected function beforeDispatch(string $eventName, object $event) } } + /** + * @return void + */ protected function afterDispatch(string $eventName, object $event) { switch ($eventName) { diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php b/core/vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php index 9b691d26ef..1924b1ddb0 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php @@ -31,6 +31,9 @@ public function __construct(Kernel $kernel) $this->kernel = $kernel; } + /** + * @return void + */ public function process(ContainerBuilder $container) { $annotatedClasses = []; diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/ConfigurableExtension.php b/core/vendor/symfony/http-kernel/DependencyInjection/ConfigurableExtension.php index 8401dd4e8c..12d468cf04 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/ConfigurableExtension.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/ConfigurableExtension.php @@ -27,13 +27,15 @@ */ abstract class ConfigurableExtension extends Extension { - final public function load(array $configs, ContainerBuilder $container) + final public function load(array $configs, ContainerBuilder $container): void { $this->loadInternal($this->processConfiguration($this->getConfiguration($configs, $container), $configs), $container); } /** * Configures the passed container according to the merged configuration. + * + * @return void */ abstract protected function loadInternal(array $mergedConfig, ContainerBuilder $container); } diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php index 281a778295..d3b157418e 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php @@ -12,6 +12,8 @@ namespace Symfony\Component\HttpKernel\DependencyInjection; use Symfony\Component\DependencyInjection\Argument\IteratorArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; +use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\Compiler\PriorityTaggedServiceTrait; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -28,26 +30,44 @@ class ControllerArgumentValueResolverPass implements CompilerPassInterface { use PriorityTaggedServiceTrait; + /** + * @return void + */ public function process(ContainerBuilder $container) { if (!$container->hasDefinition('argument_resolver')) { return; } - $resolvers = $this->findAndSortTaggedServices('controller.argument_value_resolver', $container); + $definitions = $container->getDefinitions(); + $namedResolvers = $this->findAndSortTaggedServices(new TaggedIteratorArgument('controller.targeted_value_resolver', 'name', needsIndexes: true), $container); + $resolvers = $this->findAndSortTaggedServices(new TaggedIteratorArgument('controller.argument_value_resolver', 'name', needsIndexes: true), $container); + + foreach ($resolvers as $name => $resolver) { + if ($definitions[(string) $resolver]->hasTag('controller.targeted_value_resolver')) { + unset($resolvers[$name]); + } else { + $namedResolvers[$name] ??= clone $resolver; + } + } if ($container->getParameter('kernel.debug') && class_exists(Stopwatch::class) && $container->has('debug.stopwatch')) { - foreach ($resolvers as $resolverReference) { - $id = (string) $resolverReference; - $container->register("debug.$id", TraceableValueResolver::class) - ->setDecoratedService($id) - ->setArguments([new Reference("debug.$id.inner"), new Reference('debug.stopwatch')]); + foreach ($resolvers as $name => $resolver) { + $resolvers[$name] = new Reference('.debug.value_resolver.'.$resolver); + $container->register('.debug.value_resolver.'.$resolver, TraceableValueResolver::class) + ->setArguments([$resolver, new Reference('debug.stopwatch')]); + } + foreach ($namedResolvers as $name => $resolver) { + $namedResolvers[$name] = new Reference('.debug.value_resolver.'.$resolver); + $container->register('.debug.value_resolver.'.$resolver, TraceableValueResolver::class) + ->setArguments([$resolver, new Reference('debug.stopwatch')]); } } $container ->getDefinition('argument_resolver') - ->replaceArgument(1, new IteratorArgument($resolvers)) + ->replaceArgument(1, new IteratorArgument(array_values($resolvers))) + ->setArgument(2, new ServiceLocatorArgument($namedResolvers)) ; } } diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/Extension.php b/core/vendor/symfony/http-kernel/DependencyInjection/Extension.php index c8d546e9d9..d72efa1724 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/Extension.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/Extension.php @@ -34,6 +34,8 @@ public function getAnnotatedClassesToCompile(): array * Adds annotated classes to the class cache. * * @param array $annotatedClasses An array of class patterns + * + * @return void */ public function addAnnotatedClassesToCompile(array $annotatedClasses) { diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php index ced62ae380..f41d58b81b 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php @@ -25,6 +25,9 @@ */ class FragmentRendererPass implements CompilerPassInterface { + /** + * @return void + */ public function process(ContainerBuilder $container) { if (!$container->hasDefinition('fragment.handler')) { diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/LoggerPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/LoggerPass.php index d780645f1e..2b6cb00793 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/LoggerPass.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/LoggerPass.php @@ -25,6 +25,9 @@ */ class LoggerPass implements CompilerPassInterface { + /** + * @return void + */ public function process(ContainerBuilder $container) { $container->setAlias(LoggerInterface::class, 'logger') diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php index c0bc6eccf2..cec23e1970 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php @@ -31,6 +31,9 @@ public function __construct(array $extensions) $this->extensions = $extensions; } + /** + * @return void + */ public function process(ContainerBuilder $container) { foreach ($this->extensions as $extension) { diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php index c31fb35d71..d0e05340d8 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php @@ -33,6 +33,9 @@ */ class RegisterControllerArgumentLocatorsPass implements CompilerPassInterface { + /** + * @return void + */ public function process(ContainerBuilder $container) { if (!$container->hasDefinition('argument_resolver.service') && !$container->hasDefinition('argument_resolver.not_tagged_controller')) { @@ -143,7 +146,7 @@ public function process(ContainerBuilder $container) $args[$p->name] = $bindingValue; continue; - } elseif (!$autowire || (!($autowireAttributes ??= $p->getAttributes(Autowire::class)) && (!$type || '\\' !== $target[0]))) { + } elseif (!$autowire || (!($autowireAttributes ??= $p->getAttributes(Autowire::class, \ReflectionAttribute::IS_INSTANCEOF)) && (!$type || '\\' !== $target[0]))) { continue; } elseif (is_subclass_of($type, \UnitEnum::class)) { // do not attempt to register enum typed arguments if not already present in bindings diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/RegisterLocaleAwareServicesPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/RegisterLocaleAwareServicesPass.php index 2141a510d6..2a01365bd3 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/RegisterLocaleAwareServicesPass.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/RegisterLocaleAwareServicesPass.php @@ -23,6 +23,9 @@ */ class RegisterLocaleAwareServicesPass implements CompilerPassInterface { + /** + * @return void + */ public function process(ContainerBuilder $container) { if (!$container->hasDefinition('locale_aware_listener')) { diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php index cbc92355d6..7a21fe0e59 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php @@ -21,6 +21,9 @@ */ class RemoveEmptyControllerArgumentLocatorsPass implements CompilerPassInterface { + /** + * @return void + */ public function process(ContainerBuilder $container) { $controllerLocator = $container->findDefinition('argument_resolver.controller_locator'); diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php b/core/vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php index 8418b4da4a..da9f8d6320 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php @@ -23,6 +23,9 @@ */ class ResettableServicePass implements CompilerPassInterface { + /** + * @return void + */ public function process(ContainerBuilder $container) { if (!$container->has('services_resetter')) { diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php b/core/vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php index e7be3b88e7..b38ab5658d 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php @@ -11,6 +11,8 @@ namespace Symfony\Component\HttpKernel\DependencyInjection; +use ProxyManager\Proxy\LazyLoadingInterface; +use Symfony\Component\VarExporter\LazyObjectInterface; use Symfony\Contracts\Service\ResetInterface; /** @@ -36,9 +38,17 @@ public function __construct(\Traversable $resettableServices, array $resetMethod $this->resetMethods = $resetMethods; } - public function reset() + public function reset(): void { foreach ($this->resettableServices as $id => $service) { + if ($service instanceof LazyObjectInterface && !$service->isLazyObjectInitialized(true)) { + continue; + } + + if ($service instanceof LazyLoadingInterface && !$service->isProxyInitialized()) { + continue; + } + foreach ((array) $this->resetMethods[$id] as $resetMethod) { if ('?' === $resetMethod[0] && !method_exists($service, $resetMethod = substr($resetMethod, 1))) { continue; diff --git a/core/vendor/symfony/http-kernel/Event/ControllerArgumentsEvent.php b/core/vendor/symfony/http-kernel/Event/ControllerArgumentsEvent.php index 0af39671e6..64063abf25 100644 --- a/core/vendor/symfony/http-kernel/Event/ControllerArgumentsEvent.php +++ b/core/vendor/symfony/http-kernel/Event/ControllerArgumentsEvent.php @@ -63,7 +63,7 @@ public function getArguments(): array return $this->arguments; } - public function setArguments(array $arguments) + public function setArguments(array $arguments): void { $this->arguments = $arguments; unset($this->namedArguments); diff --git a/core/vendor/symfony/http-kernel/Event/ControllerEvent.php b/core/vendor/symfony/http-kernel/Event/ControllerEvent.php index b012263b93..d07d886db0 100644 --- a/core/vendor/symfony/http-kernel/Event/ControllerEvent.php +++ b/core/vendor/symfony/http-kernel/Event/ControllerEvent.php @@ -69,7 +69,7 @@ public function setController(callable $controller, array $attributes = null): v if (\is_array($controller) && method_exists(...$controller)) { $this->controllerReflector = new \ReflectionMethod(...$controller); - } elseif (\is_string($controller) && false !== $i = strpos($controller, '::')) { + } elseif (\is_string($controller) && str_contains($controller, '::')) { $this->controllerReflector = new \ReflectionMethod($controller); } else { $this->controllerReflector = new \ReflectionFunction($controller(...)); diff --git a/core/vendor/symfony/http-kernel/Event/RequestEvent.php b/core/vendor/symfony/http-kernel/Event/RequestEvent.php index c7cfcc1e13..b81a79b780 100644 --- a/core/vendor/symfony/http-kernel/Event/RequestEvent.php +++ b/core/vendor/symfony/http-kernel/Event/RequestEvent.php @@ -36,6 +36,8 @@ public function getResponse(): ?Response /** * Sets a response and stops event propagation. + * + * @return void */ public function setResponse(Response $response) { diff --git a/core/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php b/core/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php index c85e839230..ec27eaec12 100644 --- a/core/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php @@ -57,7 +57,7 @@ public function __construct(ContainerInterface $container = null, bool $debug = $this->sessionOptions = $sessionOptions; } - public function onKernelRequest(RequestEvent $event) + public function onKernelRequest(RequestEvent $event): void { if (!$event->isMainRequest()) { return; @@ -65,9 +65,10 @@ public function onKernelRequest(RequestEvent $event) $request = $event->getRequest(); if (!$request->hasSession()) { - // This variable prevents calling `$this->getSession()` twice in case the Request (and the below factory) is cloned - $sess = null; - $request->setSessionFactory(function () use (&$sess, $request) { + $request->setSessionFactory(function () use ($request) { + // Prevent calling `$this->getSession()` twice in case the Request (and the below factory) is cloned + static $sess; + if (!$sess) { $sess = $this->getSession(); $request->setSession($sess); @@ -89,7 +90,7 @@ public function onKernelRequest(RequestEvent $event) } } - public function onKernelResponse(ResponseEvent $event) + public function onKernelResponse(ResponseEvent $event): void { if (!$event->isMainRequest() || (!$this->container->has('initialized_session') && !$event->getRequest()->hasSession())) { return; diff --git a/core/vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php b/core/vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php index c3fc3fb657..d4ef3fe498 100644 --- a/core/vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php @@ -34,7 +34,7 @@ public function __construct(array $formats) /** * Adds request formats. */ - public function onKernelRequest(RequestEvent $event) + public function onKernelRequest(RequestEvent $event): void { $request = $event->getRequest(); foreach ($this->formats as $format => $mimeTypes) { diff --git a/core/vendor/symfony/http-kernel/EventListener/CacheAttributeListener.php b/core/vendor/symfony/http-kernel/EventListener/CacheAttributeListener.php index 2230b8f699..723e758cd0 100644 --- a/core/vendor/symfony/http-kernel/EventListener/CacheAttributeListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/CacheAttributeListener.php @@ -46,6 +46,8 @@ public function __construct( /** * Handles HTTP validation headers. + * + * @return void */ public function onKernelControllerArguments(ControllerArgumentsEvent $event) { @@ -90,6 +92,8 @@ public function onKernelControllerArguments(ControllerArgumentsEvent $event) /** * Modifies the response to apply HTTP cache headers when needed. + * + * @return void */ public function onKernelResponse(ResponseEvent $event) { diff --git a/core/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php b/core/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php index 4f9ceb73e3..e3e8924928 100644 --- a/core/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php @@ -11,7 +11,6 @@ namespace Symfony\Component\HttpKernel\EventListener; -use Psr\Log\LoggerInterface; use Symfony\Component\Console\ConsoleEvents; use Symfony\Component\Console\Event\ConsoleEvent; use Symfony\Component\Console\Output\ConsoleOutputInterface; @@ -21,7 +20,7 @@ use Symfony\Component\HttpKernel\KernelEvents; /** - * Configures errors and exceptions handlers. + * Sets an exception handler. * * @author Nicolas Grekas * @@ -33,41 +32,25 @@ class DebugHandlersListener implements EventSubscriberInterface { private string|object|null $earlyHandler; private ?\Closure $exceptionHandler; - private ?LoggerInterface $logger; - private ?LoggerInterface $deprecationLogger; - private array|int|null $levels; - private ?int $throwAt; - private bool $scream; - private bool $scope; private bool $firstCall = true; private bool $hasTerminatedWithException = false; /** - * @param callable|null $exceptionHandler A handler that must support \Throwable instances that will be called on Exception - * @param array|int|null $levels An array map of E_* to LogLevel::* or an integer bit field of E_* constants - * @param int|null $throwAt Thrown errors in a bit field of E_* constants, or null to keep the current value - * @param bool $scream Enables/disables screaming mode, where even silenced errors are logged - * @param bool $scope Enables/disables scoping mode + * @param callable|null $exceptionHandler A handler that must support \Throwable instances that will be called on Exception */ - public function __construct(callable $exceptionHandler = null, LoggerInterface $logger = null, array|int|null $levels = \E_ALL, ?int $throwAt = \E_ALL, bool $scream = true, bool $scope = true, LoggerInterface $deprecationLogger = null) + public function __construct(callable $exceptionHandler = null) { $handler = set_exception_handler('is_int'); $this->earlyHandler = \is_array($handler) ? $handler[0] : null; restore_exception_handler(); $this->exceptionHandler = null === $exceptionHandler ? null : $exceptionHandler(...); - $this->logger = $logger; - $this->levels = $levels ?? \E_ALL; - $this->throwAt = \is_int($throwAt) ? $throwAt : (null === $throwAt ? null : ($throwAt ? \E_ALL : null)); - $this->scream = $scream; - $this->scope = $scope; - $this->deprecationLogger = $deprecationLogger; } /** * Configures the error handler. */ - public function configure(object $event = null) + public function configure(object $event = null): void { if ($event instanceof ConsoleEvent && !\in_array(\PHP_SAPI, ['cli', 'phpdbg'], true)) { return; @@ -77,40 +60,6 @@ public function configure(object $event = null) } $this->firstCall = $this->hasTerminatedWithException = false; - $handler = set_exception_handler('is_int'); - $handler = \is_array($handler) ? $handler[0] : null; - restore_exception_handler(); - - if (!$handler instanceof ErrorHandler) { - $handler = $this->earlyHandler; - } - - if ($handler instanceof ErrorHandler) { - if ($this->logger || $this->deprecationLogger) { - $this->setDefaultLoggers($handler); - if (\is_array($this->levels)) { - $levels = 0; - foreach ($this->levels as $type => $log) { - $levels |= $type; - } - } else { - $levels = $this->levels; - } - - if ($this->scream) { - $handler->screamAt($levels); - } - if ($this->scope) { - $handler->scopeAt($levels & ~\E_USER_DEPRECATED & ~\E_DEPRECATED); - } else { - $handler->scopeAt(0, true); - } - $this->logger = $this->deprecationLogger = $this->levels = null; - } - if (null !== $this->throwAt) { - $handler->throwAt($this->throwAt, true); - } - } if (!$this->exceptionHandler) { if ($event instanceof KernelEvent) { if (method_exists($kernel = $event->getKernel(), 'terminateWithException')) { @@ -136,6 +85,14 @@ public function configure(object $event = null) } } if ($this->exceptionHandler) { + $handler = set_exception_handler('is_int'); + $handler = \is_array($handler) ? $handler[0] : null; + restore_exception_handler(); + + if (!$handler instanceof ErrorHandler) { + $handler = $this->earlyHandler; + } + if ($handler instanceof ErrorHandler) { $handler->setExceptionHandler($this->exceptionHandler); } @@ -143,34 +100,6 @@ public function configure(object $event = null) } } - private function setDefaultLoggers(ErrorHandler $handler): void - { - if (\is_array($this->levels)) { - $levelsDeprecatedOnly = []; - $levelsWithoutDeprecated = []; - foreach ($this->levels as $type => $log) { - if (\E_DEPRECATED == $type || \E_USER_DEPRECATED == $type) { - $levelsDeprecatedOnly[$type] = $log; - } else { - $levelsWithoutDeprecated[$type] = $log; - } - } - } else { - $levelsDeprecatedOnly = $this->levels & (\E_DEPRECATED | \E_USER_DEPRECATED); - $levelsWithoutDeprecated = $this->levels & ~\E_DEPRECATED & ~\E_USER_DEPRECATED; - } - - $defaultLoggerLevels = $this->levels; - if ($this->deprecationLogger && $levelsDeprecatedOnly) { - $handler->setDefaultLogger($this->deprecationLogger, $levelsDeprecatedOnly); - $defaultLoggerLevels = $levelsWithoutDeprecated; - } - - if ($this->logger && $defaultLoggerLevels) { - $handler->setDefaultLogger($this->logger, $defaultLoggerLevels); - } - } - public static function getSubscribedEvents(): array { $events = [KernelEvents::REQUEST => ['configure', 2048]]; diff --git a/core/vendor/symfony/http-kernel/EventListener/DumpListener.php b/core/vendor/symfony/http-kernel/EventListener/DumpListener.php index 151f96ea7e..b10bd37f43 100644 --- a/core/vendor/symfony/http-kernel/EventListener/DumpListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/DumpListener.php @@ -36,14 +36,20 @@ public function __construct(ClonerInterface $cloner, DataDumperInterface $dumper $this->connection = $connection; } + /** + * @return void + */ public function configure() { $cloner = $this->cloner; $dumper = $this->dumper; $connection = $this->connection; - VarDumper::setHandler(static function ($var) use ($cloner, $dumper, $connection) { + VarDumper::setHandler(static function ($var, string $label = null) use ($cloner, $dumper, $connection) { $data = $cloner->cloneVar($var); + if (null !== $label) { + $data = $data->withContext(['label' => $label]); + } if (!$connection || !$connection->write($data)) { $dumper->dump($data); diff --git a/core/vendor/symfony/http-kernel/EventListener/ErrorListener.php b/core/vendor/symfony/http-kernel/EventListener/ErrorListener.php index dd61050520..cc6936cfda 100644 --- a/core/vendor/symfony/http-kernel/EventListener/ErrorListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/ErrorListener.php @@ -12,9 +12,12 @@ namespace Symfony\Component\HttpKernel\EventListener; use Psr\Log\LoggerInterface; +use Psr\Log\LogLevel; use Symfony\Component\ErrorHandler\Exception\FlattenException; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpKernel\Attribute\WithHttpStatus; +use Symfony\Component\HttpKernel\Attribute\WithLogLevel; use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent; use Symfony\Component\HttpKernel\Event\ExceptionEvent; use Symfony\Component\HttpKernel\Event\ResponseEvent; @@ -48,17 +51,13 @@ public function __construct(string|object|array|null $controller, LoggerInterfac $this->exceptionsMapping = $exceptionsMapping; } + /** + * @return void + */ public function logKernelException(ExceptionEvent $event) { $throwable = $event->getThrowable(); - $logLevel = null; - - foreach ($this->exceptionsMapping as $class => $config) { - if ($throwable instanceof $class && $config['log_level']) { - $logLevel = $config['log_level']; - break; - } - } + $logLevel = $this->resolveLogLevel($throwable); foreach ($this->exceptionsMapping as $class => $config) { if (!$throwable instanceof $class || !$config['status_code']) { @@ -72,11 +71,30 @@ public function logKernelException(ExceptionEvent $event) break; } + // There's no specific status code defined in the configuration for this exception + if (!$throwable instanceof HttpExceptionInterface) { + $class = new \ReflectionClass($throwable); + + do { + if ($attributes = $class->getAttributes(WithHttpStatus::class, \ReflectionAttribute::IS_INSTANCEOF)) { + /** @var WithHttpStatus $instance */ + $instance = $attributes[0]->newInstance(); + + $throwable = new HttpException($instance->statusCode, $throwable->getMessage(), $throwable, $instance->headers); + $event->setThrowable($throwable); + break; + } + } while ($class = $class->getParentClass()); + } + $e = FlattenException::createFromThrowable($throwable); $this->logException($throwable, sprintf('Uncaught PHP Exception %s: "%s" at %s line %s', $e->getClass(), $e->getMessage(), $e->getFile(), $e->getLine()), $logLevel); } + /** + * @return void + */ public function onKernelException(ExceptionEvent $event) { if (null === $this->controller) { @@ -120,6 +138,9 @@ public function removeCspHeader(ResponseEvent $event): void } } + /** + * @return void + */ public function onControllerArguments(ControllerArgumentsEvent $event) { $e = $event->getRequest()->attributes->get('exception'); @@ -155,15 +176,42 @@ public static function getSubscribedEvents(): array */ protected function logException(\Throwable $exception, string $message, string $logLevel = null): void { - if (null !== $this->logger) { - if (null !== $logLevel) { - $this->logger->log($logLevel, $message, ['exception' => $exception]); - } elseif (!$exception instanceof HttpExceptionInterface || $exception->getStatusCode() >= 500) { - $this->logger->critical($message, ['exception' => $exception]); - } else { - $this->logger->error($message, ['exception' => $exception]); + if (null === $this->logger) { + return; + } + + $logLevel ??= $this->resolveLogLevel($exception); + + $this->logger->log($logLevel, $message, ['exception' => $exception]); + } + + /** + * Resolves the level to be used when logging the exception. + */ + private function resolveLogLevel(\Throwable $throwable): string + { + foreach ($this->exceptionsMapping as $class => $config) { + if ($throwable instanceof $class && $config['log_level']) { + return $config['log_level']; + } + } + + $class = new \ReflectionClass($throwable); + + do { + if ($attributes = $class->getAttributes(WithLogLevel::class)) { + /** @var WithLogLevel $instance */ + $instance = $attributes[0]->newInstance(); + + return $instance->level; } + } while ($class = $class->getParentClass()); + + if (!$throwable instanceof HttpExceptionInterface || $throwable->getStatusCode() >= 500) { + return LogLevel::CRITICAL; } + + return LogLevel::ERROR; } /** diff --git a/core/vendor/symfony/http-kernel/EventListener/FragmentListener.php b/core/vendor/symfony/http-kernel/EventListener/FragmentListener.php index 5c2fb09623..6392d699ff 100644 --- a/core/vendor/symfony/http-kernel/EventListener/FragmentListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/FragmentListener.php @@ -50,7 +50,7 @@ public function __construct(UriSigner $signer, string $fragmentPath = '/_fragmen * * @throws AccessDeniedHttpException if the request does not come from a trusted IP */ - public function onKernelRequest(RequestEvent $event) + public function onKernelRequest(RequestEvent $event): void { $request = $event->getRequest(); @@ -75,7 +75,7 @@ public function onKernelRequest(RequestEvent $event) $request->query->remove('_path'); } - protected function validateRequest(Request $request) + protected function validateRequest(Request $request): void { // is the Request safe? if (!$request->isMethodSafe()) { diff --git a/core/vendor/symfony/http-kernel/EventListener/LocaleListener.php b/core/vendor/symfony/http-kernel/EventListener/LocaleListener.php index 2502fa4be9..4516048be7 100644 --- a/core/vendor/symfony/http-kernel/EventListener/LocaleListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/LocaleListener.php @@ -44,12 +44,12 @@ public function __construct(RequestStack $requestStack, string $defaultLocale = $this->enabledLocales = $enabledLocales; } - public function setDefaultLocale(KernelEvent $event) + public function setDefaultLocale(KernelEvent $event): void { $event->getRequest()->setDefaultLocale($this->defaultLocale); } - public function onKernelRequest(RequestEvent $event) + public function onKernelRequest(RequestEvent $event): void { $request = $event->getRequest(); @@ -57,14 +57,14 @@ public function onKernelRequest(RequestEvent $event) $this->setRouterContext($request); } - public function onKernelFinishRequest(FinishRequestEvent $event) + public function onKernelFinishRequest(FinishRequestEvent $event): void { if (null !== $parentRequest = $this->requestStack->getParentRequest()) { $this->setRouterContext($parentRequest); } } - private function setLocale(Request $request) + private function setLocale(Request $request): void { if ($locale = $request->attributes->get('_locale')) { $request->setLocale($locale); @@ -76,7 +76,7 @@ private function setLocale(Request $request) } } - private function setRouterContext(Request $request) + private function setRouterContext(Request $request): void { $this->router?->getContext()->setParameter('_locale', $request->getLocale()); } diff --git a/core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php b/core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php index d63c0493d7..716d939fd0 100644 --- a/core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/ProfilerListener.php @@ -63,7 +63,7 @@ public function __construct(Profiler $profiler, RequestStack $requestStack, Requ /** * Handles the onKernelException event. */ - public function onKernelException(ExceptionEvent $event) + public function onKernelException(ExceptionEvent $event): void { if ($this->onlyMainRequests && !$event->isMainRequest()) { return; @@ -75,7 +75,7 @@ public function onKernelException(ExceptionEvent $event) /** * Handles the onKernelResponse event. */ - public function onKernelResponse(ResponseEvent $event) + public function onKernelResponse(ResponseEvent $event): void { if ($this->onlyMainRequests && !$event->isMainRequest()) { return; @@ -119,7 +119,7 @@ public function onKernelResponse(ResponseEvent $event) $this->parents[$request] = $this->requestStack->getParentRequest(); } - public function onKernelTerminate(TerminateEvent $event) + public function onKernelTerminate(TerminateEvent $event): void { // attach children to parents foreach ($this->profiles as $request) { diff --git a/core/vendor/symfony/http-kernel/EventListener/ResponseListener.php b/core/vendor/symfony/http-kernel/EventListener/ResponseListener.php index 435fd31d1b..5825e16e44 100644 --- a/core/vendor/symfony/http-kernel/EventListener/ResponseListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/ResponseListener.php @@ -36,7 +36,7 @@ public function __construct(string $charset, bool $addContentLanguageHeader = fa /** * Filters the Response. */ - public function onKernelResponse(ResponseEvent $event) + public function onKernelResponse(ResponseEvent $event): void { if (!$event->isMainRequest()) { return; diff --git a/core/vendor/symfony/http-kernel/EventListener/RouterListener.php b/core/vendor/symfony/http-kernel/EventListener/RouterListener.php index 72be3e6e78..bb393c7799 100644 --- a/core/vendor/symfony/http-kernel/EventListener/RouterListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/RouterListener.php @@ -67,7 +67,7 @@ public function __construct(UrlMatcherInterface|RequestMatcherInterface $matcher $this->debug = $debug; } - private function setCurrentRequest(?Request $request) + private function setCurrentRequest(?Request $request): void { if (null !== $request) { try { @@ -82,12 +82,12 @@ private function setCurrentRequest(?Request $request) * After a sub-request is done, we need to reset the routing context to the parent request so that the URL generator * operates on the correct context again. */ - public function onKernelFinishRequest() + public function onKernelFinishRequest(): void { $this->setCurrentRequest($this->requestStack->getParentRequest()); } - public function onKernelRequest(RequestEvent $event) + public function onKernelRequest(RequestEvent $event): void { $request = $event->getRequest(); @@ -132,7 +132,7 @@ public function onKernelRequest(RequestEvent $event) } } - public function onKernelException(ExceptionEvent $event) + public function onKernelException(ExceptionEvent $event): void { if (!$this->debug || !($e = $event->getThrowable()) instanceof NotFoundHttpException) { return; diff --git a/core/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php b/core/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php index c0b74fdf0e..312d5ee23b 100644 --- a/core/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php @@ -33,7 +33,7 @@ class StreamedResponseListener implements EventSubscriberInterface /** * Filters the Response. */ - public function onKernelResponse(ResponseEvent $event) + public function onKernelResponse(ResponseEvent $event): void { if (!$event->isMainRequest()) { return; diff --git a/core/vendor/symfony/http-kernel/EventListener/SurrogateListener.php b/core/vendor/symfony/http-kernel/EventListener/SurrogateListener.php index 3d1be0f2e1..17bdf2b392 100644 --- a/core/vendor/symfony/http-kernel/EventListener/SurrogateListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/SurrogateListener.php @@ -36,7 +36,7 @@ public function __construct(SurrogateInterface $surrogate = null) /** * Filters the Response. */ - public function onKernelResponse(ResponseEvent $event) + public function onKernelResponse(ResponseEvent $event): void { if (!$event->isMainRequest()) { return; diff --git a/core/vendor/symfony/http-kernel/EventListener/ValidateRequestListener.php b/core/vendor/symfony/http-kernel/EventListener/ValidateRequestListener.php index e2501c5777..187633d5d4 100644 --- a/core/vendor/symfony/http-kernel/EventListener/ValidateRequestListener.php +++ b/core/vendor/symfony/http-kernel/EventListener/ValidateRequestListener.php @@ -27,7 +27,7 @@ class ValidateRequestListener implements EventSubscriberInterface /** * Performs the validation. */ - public function onKernelRequest(RequestEvent $event) + public function onKernelRequest(RequestEvent $event): void { if (!$event->isMainRequest()) { return; diff --git a/core/vendor/symfony/http-kernel/Exception/HttpException.php b/core/vendor/symfony/http-kernel/Exception/HttpException.php index 418271065a..e12abce004 100644 --- a/core/vendor/symfony/http-kernel/Exception/HttpException.php +++ b/core/vendor/symfony/http-kernel/Exception/HttpException.php @@ -39,6 +39,9 @@ public function getHeaders(): array return $this->headers; } + /** + * @return void + */ public function setHeaders(array $headers) { $this->headers = $headers; diff --git a/core/vendor/symfony/http-kernel/Exception/ResolverNotFoundException.php b/core/vendor/symfony/http-kernel/Exception/ResolverNotFoundException.php new file mode 100644 index 0000000000..6d9fb8a01f --- /dev/null +++ b/core/vendor/symfony/http-kernel/Exception/ResolverNotFoundException.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpKernel\Exception; + +class ResolverNotFoundException extends \RuntimeException +{ + /** + * @param string[] $alternatives + */ + public function __construct(string $name, array $alternatives = []) + { + $msg = sprintf('You have requested a non-existent resolver "%s".', $name); + if ($alternatives) { + if (1 === \count($alternatives)) { + $msg .= ' Did you mean this: "'; + } else { + $msg .= ' Did you mean one of these: "'; + } + $msg .= implode('", "', $alternatives).'"?'; + } + + parent::__construct($msg); + } +} diff --git a/core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php b/core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php index dfc03db42d..62b21e6d4e 100644 --- a/core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php +++ b/core/vendor/symfony/http-kernel/Fragment/FragmentHandler.php @@ -48,6 +48,8 @@ public function __construct(RequestStack $requestStack, array $renderers = [], b /** * Adds a renderer. + * + * @return void */ public function addRenderer(FragmentRendererInterface $renderer) { diff --git a/core/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php b/core/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php index 0e53768ee9..d563182f96 100644 --- a/core/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php +++ b/core/vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php @@ -103,6 +103,9 @@ public function render(string|ControllerReference $uri, Request $request, array } } + /** + * @return Request + */ protected function createSubRequest(string $uri, Request $request) { $cookies = $request->cookies->all(); @@ -127,6 +130,9 @@ protected function createSubRequest(string $uri, Request $request) if ($request->getDefaultLocale() !== $request->getLocale()) { $subRequest->setLocale($request->getLocale()); } + if ($request->attributes->has('_stateless')) { + $subRequest->attributes->set('_stateless', $request->attributes->get('_stateless')); + } return $subRequest; } diff --git a/core/vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php b/core/vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php index 416b670417..47027233a7 100644 --- a/core/vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php +++ b/core/vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php @@ -31,6 +31,8 @@ abstract class RoutableFragmentRenderer implements FragmentRendererInterface * Sets the fragment path that triggers the fragment listener. * * @see FragmentListener + * + * @return void */ public function setFragmentPath(string $path) { diff --git a/core/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php b/core/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php index ca01a9240b..95518bed2b 100644 --- a/core/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php +++ b/core/vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php @@ -24,6 +24,10 @@ abstract class AbstractSurrogate implements SurrogateInterface { protected $contentTypes; + + /** + * @deprecated since Symfony 6.3 + */ protected $phpEscapeMap = [ ['', '', '', ''], @@ -55,6 +59,9 @@ public function hasSurrogateCapability(Request $request): bool return str_contains($value, sprintf('%s/1.0', strtoupper($this->getName()))); } + /** + * @return void + */ public function addSurrogateCapability(Request $request) { $current = $request->headers->get('Surrogate-Capability'); @@ -101,6 +108,8 @@ public function handle(HttpCache $cache, string $uri, string $alt, bool $ignoreE /** * Remove the Surrogate from the Surrogate-Control header. + * + * @return void */ protected function removeFromControl(Response $response) { @@ -119,4 +128,15 @@ protected function removeFromControl(Response $response) $response->headers->set('Surrogate-Control', preg_replace(sprintf('#content="%s/1.0",\s*#', $upperName), '', $value)); } } + + protected static function generateBodyEvalBoundary(): string + { + static $cookie; + $cookie = hash('xxh128', $cookie ?? $cookie = random_bytes(16), true); + $boundary = base64_encode($cookie); + + \assert(HttpCache::BODY_EVAL_BOUNDARY_LENGTH === \strlen($boundary)); + + return $boundary; + } } diff --git a/core/vendor/symfony/http-kernel/HttpCache/Esi.php b/core/vendor/symfony/http-kernel/HttpCache/Esi.php index 9e7c3f898a..5db840a802 100644 --- a/core/vendor/symfony/http-kernel/HttpCache/Esi.php +++ b/core/vendor/symfony/http-kernel/HttpCache/Esi.php @@ -32,6 +32,9 @@ public function getName(): string return 'esi'; } + /** + * @return void + */ public function addSurrogateControl(Response $response) { if (str_contains($response->getContent(), '.*?#s', '', $content); $content = preg_replace('#]+>#s', '', $content); + $boundary = self::generateBodyEvalBoundary(); $chunks = preg_split('##', $content, -1, \PREG_SPLIT_DELIM_CAPTURE); - $chunks[0] = str_replace($this->phpEscapeMap[0], $this->phpEscapeMap[1], $chunks[0]); $i = 1; while (isset($chunks[$i])) { @@ -86,16 +89,10 @@ public function process(Request $request, Response $response): Response throw new \RuntimeException('Unable to process an ESI tag without a "src" attribute.'); } - $chunks[$i] = sprintf('surrogate->handle($this, %s, %s, %s) ?>'."\n", - var_export($options['src'], true), - var_export($options['alt'] ?? '', true), - isset($options['onerror']) && 'continue' === $options['onerror'] ? 'true' : 'false' - ); - ++$i; - $chunks[$i] = str_replace($this->phpEscapeMap[0], $this->phpEscapeMap[1], $chunks[$i]); - ++$i; + $chunks[$i] = $boundary.$options['src']."\n".($options['alt'] ?? '')."\n".('continue' === ($options['onerror'] ?? ''))."\n"; + $i += 2; } - $content = implode('', $chunks); + $content = $boundary.implode('', $chunks).$boundary; $response->setContent($content); $response->headers->set('X-Body-Eval', 'ESI'); diff --git a/core/vendor/symfony/http-kernel/HttpCache/HttpCache.php b/core/vendor/symfony/http-kernel/HttpCache/HttpCache.php index f77a99e0ff..eabacfec62 100644 --- a/core/vendor/symfony/http-kernel/HttpCache/HttpCache.php +++ b/core/vendor/symfony/http-kernel/HttpCache/HttpCache.php @@ -29,6 +29,8 @@ */ class HttpCache implements HttpKernelInterface, TerminableInterface { + public const BODY_EVAL_BOUNDARY_LENGTH = 24; + private HttpKernelInterface $kernel; private StoreInterface $store; private Request $request; @@ -60,6 +62,9 @@ class HttpCache implements HttpKernelInterface, TerminableInterface * on responses that don't explicitly state whether the response is * public or private via a Cache-Control directive. (default: Authorization and Cookie) * + * * skip_response_headers Set of response headers that are never cached even if a response is cacheable (public). + * (default: Set-Cookie) + * * * allow_reload Specifies whether the client can force a cache reload by including a * Cache-Control "no-cache" directive in the request. Set it to ``true`` * for compliance with RFC 2616. (default: false) @@ -97,6 +102,7 @@ public function __construct(HttpKernelInterface $kernel, StoreInterface $store, 'debug' => false, 'default_ttl' => 0, 'private_headers' => ['Authorization', 'Cookie'], + 'skip_response_headers' => ['Set-Cookie'], 'allow_reload' => false, 'allow_revalidate' => false, 'stale_while_revalidate' => 2, @@ -127,7 +133,7 @@ public function getTraces(): array return $this->traces; } - private function addTraces(Response $response) + private function addTraces(Response $response): void { $traceString = null; @@ -236,6 +242,9 @@ public function handle(Request $request, int $type = HttpKernelInterface::MAIN_R return $response; } + /** + * @return void + */ public function terminate(Request $request, Response $response) { // Do not call any listeners in case of a cache hit. @@ -586,13 +595,24 @@ protected function lock(Request $request, Response $entry): bool /** * Writes the Response to the cache. * + * @return void + * * @throws \Exception */ protected function store(Request $request, Response $response) { try { - $this->store->write($request, $response); + $restoreHeaders = []; + foreach ($this->options['skip_response_headers'] as $header) { + if (!$response->headers->has($header)) { + continue; + } + + $restoreHeaders[$header] = $response->headers->all($header); + $response->headers->remove($header); + } + $this->store->write($request, $response); $this->record($request, 'store'); $response->headers->set('Age', $response->getAge()); @@ -602,6 +622,10 @@ protected function store(Request $request, Response $response) if ($this->options['debug']) { throw $e; } + } finally { + foreach ($restoreHeaders as $header => $values) { + $response->headers->set($header, $values); + } } // now that the response is cached, release the lock @@ -611,15 +635,25 @@ protected function store(Request $request, Response $response) /** * Restores the Response body. */ - private function restoreResponseBody(Request $request, Response $response) + private function restoreResponseBody(Request $request, Response $response): void { if ($response->headers->has('X-Body-Eval')) { + \assert(self::BODY_EVAL_BOUNDARY_LENGTH === 24); + ob_start(); - if ($response->headers->has('X-Body-File')) { - include $response->headers->get('X-Body-File'); - } else { - eval('; ?>'.$response->getContent().'getContent(); + $boundary = substr($content, 0, 24); + $j = strpos($content, $boundary, 24); + echo substr($content, 24, $j - 24); + $i = $j + 24; + + while (false !== $j = strpos($content, $boundary, $i)) { + [$uri, $alt, $ignoreErrors, $part] = explode("\n", substr($content, $i, $j - $i), 4); + $i = $j + 24; + + echo $this->surrogate->handle($this, $uri, $alt, $ignoreErrors); + echo $part; } $response->setContent(ob_get_clean()); @@ -640,6 +674,9 @@ private function restoreResponseBody(Request $request, Response $response) $response->headers->remove('X-Body-File'); } + /** + * @return void + */ protected function processResponseBody(Request $request, Response $response) { if ($this->surrogate?->needsParsing($response)) { @@ -671,7 +708,7 @@ private function isPrivateRequest(Request $request): bool /** * Records that an event took place. */ - private function record(Request $request, string $event) + private function record(Request $request, string $event): void { $this->traces[$this->getTraceKey($request)][] = $event; } diff --git a/core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php b/core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php index 0c9f10823a..57b5d21961 100644 --- a/core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php +++ b/core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php @@ -54,6 +54,9 @@ class ResponseCacheStrategy implements ResponseCacheStrategyInterface 'expires' => null, ]; + /** + * @return void + */ public function add(Response $response) { ++$this->embeddedResponses; @@ -95,6 +98,9 @@ public function add(Response $response) } } + /** + * @return void + */ public function update(Response $response) { // if we have no embedded Response, do nothing @@ -148,7 +154,7 @@ public function update(Response $response) if (is_numeric($this->ageDirectives['expires'])) { $date = clone $response->getDate(); - $date->modify('+'.($this->ageDirectives['expires'] + $this->age).' seconds'); + $date = $date->modify('+'.($this->ageDirectives['expires'] + $this->age).' seconds'); $response->setExpires($date); } } @@ -209,7 +215,7 @@ private function willMakeFinalResponseUncacheable(Response $response): bool * as cacheable in a public (shared) cache, but did not provide an explicit lifetime that would serve * as an upper bound. In this case, we can proceed and possibly keep the directive on the final response. */ - private function storeRelativeAgeDirective(string $directive, ?int $value, int $age, bool $isHeuristicallyCacheable) + private function storeRelativeAgeDirective(string $directive, ?int $value, int $age, bool $isHeuristicallyCacheable): void { if (null === $value) { if ($isHeuristicallyCacheable) { diff --git a/core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategyInterface.php b/core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategyInterface.php index e282299aee..33c8bd9412 100644 --- a/core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategyInterface.php +++ b/core/vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategyInterface.php @@ -27,11 +27,15 @@ interface ResponseCacheStrategyInterface { /** * Adds a Response. + * + * @return void */ public function add(Response $response); /** * Updates the Response HTTP headers based on the embedded Responses. + * + * @return void */ public function update(Response $response); } diff --git a/core/vendor/symfony/http-kernel/HttpCache/Ssi.php b/core/vendor/symfony/http-kernel/HttpCache/Ssi.php index 4bd1cef0a7..b17c90ac60 100644 --- a/core/vendor/symfony/http-kernel/HttpCache/Ssi.php +++ b/core/vendor/symfony/http-kernel/HttpCache/Ssi.php @@ -26,6 +26,9 @@ public function getName(): string return 'ssi'; } + /** + * @return void + */ public function addSurrogateControl(Response $response) { if (str_contains($response->getContent(), '#', $content, -1, \PREG_SPLIT_DELIM_CAPTURE); - $chunks[0] = str_replace($this->phpEscapeMap[0], $this->phpEscapeMap[1], $chunks[0]); $i = 1; while (isset($chunks[$i])) { @@ -68,14 +70,10 @@ public function process(Request $request, Response $response): Response throw new \RuntimeException('Unable to process an SSI tag without a "virtual" attribute.'); } - $chunks[$i] = sprintf('surrogate->handle($this, %s, \'\', false) ?>'."\n", - var_export($options['virtual'], true) - ); - ++$i; - $chunks[$i] = str_replace($this->phpEscapeMap[0], $this->phpEscapeMap[1], $chunks[$i]); - ++$i; + $chunks[$i] = $boundary.$options['virtual']."\n\n\n"; + $i += 2; } - $content = implode('', $chunks); + $content = $boundary.implode('', $chunks).$boundary; $response->setContent($content); $response->headers->set('X-Body-Eval', 'SSI'); diff --git a/core/vendor/symfony/http-kernel/HttpCache/Store.php b/core/vendor/symfony/http-kernel/HttpCache/Store.php index b21cb45874..3f21e383f4 100644 --- a/core/vendor/symfony/http-kernel/HttpCache/Store.php +++ b/core/vendor/symfony/http-kernel/HttpCache/Store.php @@ -55,6 +55,8 @@ public function __construct(string $root, array $options = []) /** * Cleanups storage. + * + * @return void */ public function cleanup() { @@ -247,6 +249,8 @@ protected function generateContentDigest(Response $response): string /** * Invalidates all cache entries that match the request. * + * @return void + * * @throws \RuntimeException */ public function invalidate(Request $request) @@ -413,6 +417,9 @@ private function save(string $key, string $data, bool $overwrite = true): bool return true; } + /** + * @return string + */ public function getPath(string $key) { return $this->root.\DIRECTORY_SEPARATOR.substr($key, 0, 2).\DIRECTORY_SEPARATOR.substr($key, 2, 2).\DIRECTORY_SEPARATOR.substr($key, 4, 2).\DIRECTORY_SEPARATOR.substr($key, 6); @@ -467,15 +474,25 @@ private function persistResponse(Response $response): array /** * Restores a Response from the HTTP headers and body. */ - private function restoreResponse(array $headers, string $path = null): Response + private function restoreResponse(array $headers, string $path = null): ?Response { $status = $headers['X-Status'][0]; unset($headers['X-Status']); + $content = null; if (null !== $path) { $headers['X-Body-File'] = [$path]; + unset($headers['x-body-file']); + + if ($headers['X-Body-Eval'] ?? $headers['x-body-eval'] ?? false) { + $content = file_get_contents($path); + \assert(HttpCache::BODY_EVAL_BOUNDARY_LENGTH === 24); + if (48 > \strlen($content) || substr($content, -24) !== substr($content, 0, 24)) { + return null; + } + } } - return new Response($path, $status, $headers); + return new Response($content, $status, $headers); } } diff --git a/core/vendor/symfony/http-kernel/HttpCache/StoreInterface.php b/core/vendor/symfony/http-kernel/HttpCache/StoreInterface.php index 0cf8921cd1..b73cb7a9e6 100644 --- a/core/vendor/symfony/http-kernel/HttpCache/StoreInterface.php +++ b/core/vendor/symfony/http-kernel/HttpCache/StoreInterface.php @@ -41,6 +41,8 @@ public function write(Request $request, Response $response): string; /** * Invalidates all cache entries that match the request. + * + * @return void */ public function invalidate(Request $request); @@ -74,6 +76,8 @@ public function purge(string $url): bool; /** * Cleanups storage. + * + * @return void */ public function cleanup(); } diff --git a/core/vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php b/core/vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php index 6e9b17b316..e444458f73 100644 --- a/core/vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php +++ b/core/vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php @@ -33,6 +33,8 @@ public function hasSurrogateCapability(Request $request): bool; /** * Adds Surrogate-capability to the given Request. + * + * @return void */ public function addSurrogateCapability(Request $request); @@ -40,6 +42,8 @@ public function addSurrogateCapability(Request $request); * Adds HTTP headers to specify that the Response needs to be parsed for Surrogate. * * This method only adds an Surrogate HTTP header if the Response has some Surrogate tags. + * + * @return void */ public function addSurrogateControl(Response $response); diff --git a/core/vendor/symfony/http-kernel/HttpKernel.php b/core/vendor/symfony/http-kernel/HttpKernel.php index 7f5c592506..794a55dc18 100644 --- a/core/vendor/symfony/http-kernel/HttpKernel.php +++ b/core/vendor/symfony/http-kernel/HttpKernel.php @@ -92,6 +92,9 @@ public function handle(Request $request, int $type = HttpKernelInterface::MAIN_R } } + /** + * @return void + */ public function terminate(Request $request, Response $response) { $this->dispatcher->dispatch(new TerminateEvent($this, $request, $response), KernelEvents::TERMINATE); @@ -100,7 +103,7 @@ public function terminate(Request $request, Response $response) /** * @internal */ - public function terminateWithException(\Throwable $exception, Request $request = null) + public function terminateWithException(\Throwable $exception, Request $request = null): void { if (!$request ??= $this->requestStack->getMainRequest()) { throw $exception; @@ -207,7 +210,7 @@ private function filterResponse(Response $response, Request $request, int $type) * operations such as {@link RequestStack::getParentRequest()} can lead to * weird results. */ - private function finishRequest(Request $request, int $type) + private function finishRequest(Request $request, int $type): void { $this->dispatcher->dispatch(new FinishRequestEvent($this, $request, $type), KernelEvents::FINISH_REQUEST); } diff --git a/core/vendor/symfony/http-kernel/HttpKernelBrowser.php b/core/vendor/symfony/http-kernel/HttpKernelBrowser.php index 0938617169..0f3630e7fe 100644 --- a/core/vendor/symfony/http-kernel/HttpKernelBrowser.php +++ b/core/vendor/symfony/http-kernel/HttpKernelBrowser.php @@ -47,6 +47,8 @@ public function __construct(HttpKernelInterface $kernel, array $server = [], His /** * Sets whether to catch exceptions when the kernel is handling a request. + * + * @return void */ public function catchExceptions(bool $catchExceptions) { @@ -110,6 +112,9 @@ protected function getScript(object $request) return $code.$this->getHandleScript(); } + /** + * @return string + */ protected function getHandleScript() { return <<<'EOF' diff --git a/core/vendor/symfony/http-kernel/Kernel.php b/core/vendor/symfony/http-kernel/Kernel.php index e9694e978e..c98705163d 100644 --- a/core/vendor/symfony/http-kernel/Kernel.php +++ b/core/vendor/symfony/http-kernel/Kernel.php @@ -17,6 +17,7 @@ use Symfony\Component\Config\Loader\LoaderResolver; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\Compiler\PassConfig; +use Symfony\Component\DependencyInjection\Compiler\RemoveBuildParametersPass; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Dumper\PhpDumper; @@ -75,15 +76,15 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl */ private static array $freshCache = []; - public const VERSION = '6.2.10'; - public const VERSION_ID = 60210; + public const VERSION = '6.3.0'; + public const VERSION_ID = 60300; public const MAJOR_VERSION = 6; - public const MINOR_VERSION = 2; - public const RELEASE_VERSION = 10; + public const MINOR_VERSION = 3; + public const RELEASE_VERSION = 0; public const EXTRA_VERSION = ''; - public const END_OF_MAINTENANCE = '07/2023'; - public const END_OF_LIFE = '07/2023'; + public const END_OF_MAINTENANCE = '01/2024'; + public const END_OF_LIFE = '01/2024'; public function __construct(string $environment, bool $debug) { @@ -102,6 +103,9 @@ public function __clone() $this->resetServices = false; } + /** + * @return void + */ public function boot() { if (true === $this->booted) { @@ -130,6 +134,9 @@ public function boot() $this->booted = true; } + /** + * @return void + */ public function reboot(?string $warmupDir) { $this->shutdown(); @@ -137,6 +144,9 @@ public function reboot(?string $warmupDir) $this->boot(); } + /** + * @return void + */ public function terminate(Request $request, Response $response) { if (false === $this->booted) { @@ -148,6 +158,9 @@ public function terminate(Request $request, Response $response) } } + /** + * @return void + */ public function shutdown() { if (false === $this->booted) { @@ -280,7 +293,7 @@ public function getContainer(): ContainerInterface /** * @internal */ - public function setAnnotatedClassCache(array $annotatedClasses) + public function setAnnotatedClassCache(array $annotatedClasses): void { file_put_contents(($this->warmupDir ?: $this->getBuildDir()).'/annotations.map', sprintf('container = include $cachePath)) { $this->container = null; - } elseif (!$oldContainer || \get_class($this->container) !== $oldContainer->name) { + } elseif (!$oldContainer || $this->container::class !== $oldContainer->name) { flock($lock, \LOCK_UN); fclose($lock); $this->container->set('kernel', $this); @@ -504,7 +523,7 @@ protected function initializeContainer() $this->container = require $cachePath; $this->container->set('kernel', $this); - if ($oldContainer && \get_class($this->container) !== $oldContainer->name) { + if ($oldContainer && $this->container::class !== $oldContainer->name) { // Because concurrent requests might still be using them, // old container files are not removed immediately, // but on a next dump of the container. @@ -526,7 +545,7 @@ protected function initializeContainer() $preload = array_merge($preload, (array) $this->container->get('cache_warmer')->warmUp($this->container->getParameter('kernel.cache_dir'))); } - if ($preload && method_exists(Preloader::class, 'append') && file_exists($preloadFile = $buildDir.'/'.$class.'.preload.php')) { + if ($preload && file_exists($preloadFile = $buildDir.'/'.$class.'.preload.php')) { Preloader::append($preloadFile, $preload); } } @@ -591,6 +610,8 @@ protected function buildContainer(): ContainerBuilder /** * Prepares the ContainerBuilder before it is compiled. + * + * @return void */ protected function prepareContainer(ContainerBuilder $container) { @@ -642,18 +663,45 @@ protected function getContainerBuilder(): ContainerBuilder * * @param string $class The name of the class to generate * @param string $baseClass The name of the container's base class + * + * @return void */ protected function dumpContainer(ConfigCache $cache, ContainerBuilder $container, string $class, string $baseClass) { // cache the container $dumper = new PhpDumper($container); + $buildParameters = []; + foreach ($container->getCompilerPassConfig()->getPasses() as $pass) { + if ($pass instanceof RemoveBuildParametersPass) { + $buildParameters = array_merge($buildParameters, $pass->getRemovedParameters()); + } + } + + $inlineFactories = false; + if (isset($buildParameters['.container.dumper.inline_factories'])) { + $inlineFactories = $buildParameters['.container.dumper.inline_factories']; + } elseif ($container->hasParameter('container.dumper.inline_factories')) { + trigger_deprecation('symfony/http-kernel', '6.3', 'Parameter "%s" is deprecated, use ".%1$s" instead.', 'container.dumper.inline_factories'); + $inlineFactories = $container->getParameter('container.dumper.inline_factories'); + } + + $inlineClassLoader = $this->debug; + if (isset($buildParameters['.container.dumper.inline_class_loader'])) { + $inlineClassLoader = $buildParameters['.container.dumper.inline_class_loader']; + } elseif ($container->hasParameter('container.dumper.inline_class_loader')) { + trigger_deprecation('symfony/http-kernel', '6.3', 'Parameter "%s" is deprecated, use ".%1$s" instead.', 'container.dumper.inline_class_loader'); + $inlineClassLoader = $container->getParameter('container.dumper.inline_class_loader'); + } + $content = $dumper->dump([ 'class' => $class, 'base_class' => $baseClass, 'file' => $cache->getPath(), 'as_files' => true, 'debug' => $this->debug, + 'inline_factories' => $inlineFactories, + 'inline_class_loader' => $inlineClassLoader, 'build_time' => $container->hasParameter('kernel.container_build_time') ? $container->getParameter('kernel.container_build_time') : time(), 'preload_classes' => array_map('get_class', $this->bundles), ]); diff --git a/core/vendor/symfony/http-kernel/KernelInterface.php b/core/vendor/symfony/http-kernel/KernelInterface.php index 0959febf14..14a053ab30 100644 --- a/core/vendor/symfony/http-kernel/KernelInterface.php +++ b/core/vendor/symfony/http-kernel/KernelInterface.php @@ -33,11 +33,15 @@ public function registerBundles(): iterable; /** * Loads the container configuration. + * + * @return void */ public function registerContainerConfiguration(LoaderInterface $loader); /** * Boots the current kernel. + * + * @return void */ public function boot(); @@ -45,6 +49,8 @@ public function boot(); * Shutdowns the kernel. * * This method is mainly useful when doing functional testing. + * + * @return void */ public function shutdown(); diff --git a/core/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php b/core/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php index 84452ae71f..1940c80a90 100644 --- a/core/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php +++ b/core/vendor/symfony/http-kernel/Log/DebugLoggerInterface.php @@ -44,6 +44,8 @@ public function countErrors(Request $request = null); /** * Removes all log records. + * + * @return void */ public function clear(); } diff --git a/core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php index d3c801de5b..0fdbfc44ba 100644 --- a/core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php +++ b/core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php @@ -87,6 +87,9 @@ public function find(?string $ip, ?string $url, ?int $limit, ?string $method, in return array_values($result); } + /** + * @return void + */ public function purge() { $flags = \FilesystemIterator::SKIP_DOTS; @@ -127,9 +130,7 @@ public function write(Profile $profile): bool // when there are errors in sub-requests, the parent and/or children tokens // may equal the profile token, resulting in infinite loops $parentToken = $profile->getParentToken() !== $profileToken ? $profile->getParentToken() : null; - $childrenToken = array_filter(array_map(function (Profile $p) use ($profileToken) { - return $profileToken !== $p->getToken() ? $p->getToken() : null; - }, $profile->getChildren())); + $childrenToken = array_filter(array_map(fn (Profile $p) => $profileToken !== $p->getToken() ? $p->getToken() : null, $profile->getChildren())); // Store profile $data = [ @@ -165,11 +166,15 @@ public function write(Profile $profile): bool $profile->getIp(), $profile->getMethod(), $profile->getUrl(), - $profile->getTime(), + $profile->getTime() ?: time(), $profile->getParentToken(), $profile->getStatusCode(), ]); fclose($file); + + if (1 === mt_rand(1, 10)) { + $this->removeExpiredProfiles(); + } } return true; @@ -240,6 +245,9 @@ protected function readLineFromFile($file): mixed return '' === $line ? null : $line; } + /** + * @return Profile + */ protected function createProfileFromData(string $token, array $data, Profile $parent = null) { $profile = new Profile($token); @@ -289,4 +297,29 @@ private function doRead($token, Profile $profile = null): ?Profile return $this->createProfileFromData($token, $data, $profile); } + + private function removeExpiredProfiles(): void + { + $minimalProfileTimestamp = time() - 2 * 86400; + $file = $this->getIndexFilename(); + $handle = fopen($file, 'r'); + + if ($offset = is_file($file.'.offset') ? (int) file_get_contents($file.'.offset') : 0) { + fseek($handle, $offset); + } + + while ($line = fgets($handle)) { + [$csvToken, , , , $csvTime] = str_getcsv($line); + + if ($csvTime >= $minimalProfileTimestamp) { + break; + } + + @unlink($this->getFilename($csvToken)); + $offset += \strlen($line); + } + fclose($handle); + + file_put_contents($file.'.offset', $offset); + } } diff --git a/core/vendor/symfony/http-kernel/Profiler/Profile.php b/core/vendor/symfony/http-kernel/Profiler/Profile.php index 5ca2d96009..8de1468ac6 100644 --- a/core/vendor/symfony/http-kernel/Profiler/Profile.php +++ b/core/vendor/symfony/http-kernel/Profiler/Profile.php @@ -44,6 +44,9 @@ public function __construct(string $token) $this->token = $token; } + /** + * @return void + */ public function setToken(string $token) { $this->token = $token; @@ -59,6 +62,8 @@ public function getToken(): string /** * Sets the parent token. + * + * @return void */ public function setParent(self $parent) { @@ -89,6 +94,9 @@ public function getIp(): ?string return $this->ip; } + /** + * @return void + */ public function setIp(?string $ip) { $this->ip = $ip; @@ -102,6 +110,9 @@ public function getMethod(): ?string return $this->method; } + /** + * @return void + */ public function setMethod(string $method) { $this->method = $method; @@ -115,6 +126,9 @@ public function getUrl(): ?string return $this->url; } + /** + * @return void + */ public function setUrl(?string $url) { $this->url = $url; @@ -125,11 +139,17 @@ public function getTime(): int return $this->time ?? 0; } + /** + * @return void + */ public function setTime(int $time) { $this->time = $time; } + /** + * @return void + */ public function setStatusCode(int $statusCode) { $this->statusCode = $statusCode; @@ -154,6 +174,8 @@ public function getChildren(): array * Sets children profiler. * * @param Profile[] $children + * + * @return void */ public function setChildren(array $children) { @@ -165,6 +187,8 @@ public function setChildren(array $children) /** * Adds the child token. + * + * @return void */ public function addChild(self $child) { @@ -211,6 +235,8 @@ public function getCollectors(): array * Sets the Collectors associated with this profile. * * @param DataCollectorInterface[] $collectors + * + * @return void */ public function setCollectors(array $collectors) { @@ -222,6 +248,8 @@ public function setCollectors(array $collectors) /** * Adds a Collector. + * + * @return void */ public function addCollector(DataCollectorInterface $collector) { diff --git a/core/vendor/symfony/http-kernel/Profiler/Profiler.php b/core/vendor/symfony/http-kernel/Profiler/Profiler.php index 2bcabdfea4..58508e5b48 100644 --- a/core/vendor/symfony/http-kernel/Profiler/Profiler.php +++ b/core/vendor/symfony/http-kernel/Profiler/Profiler.php @@ -46,6 +46,8 @@ public function __construct(ProfilerStorageInterface $storage, LoggerInterface $ /** * Disables the profiler. + * + * @return void */ public function disable() { @@ -54,6 +56,8 @@ public function disable() /** * Enables the profiler. + * + * @return void */ public function enable() { @@ -98,7 +102,7 @@ public function saveProfile(Profile $profile): bool } if (!($ret = $this->storage->write($profile)) && null !== $this->logger) { - $this->logger->warning('Unable to store the profiler information.', ['configured_storage' => \get_class($this->storage)]); + $this->logger->warning('Unable to store the profiler information.', ['configured_storage' => $this->storage::class]); } return $ret; @@ -106,6 +110,8 @@ public function saveProfile(Profile $profile): bool /** * Purges all data from the storage. + * + * @return void */ public function purge() { @@ -162,6 +168,9 @@ public function collect(Request $request, Response $response, \Throwable $except return $profile; } + /** + * @return void + */ public function reset() { foreach ($this->collectors as $collector) { @@ -182,6 +191,8 @@ public function all(): array * Sets the Collectors associated with this profiler. * * @param DataCollectorInterface[] $collectors An array of collectors + * + * @return void */ public function set(array $collectors = []) { @@ -193,6 +204,8 @@ public function set(array $collectors = []) /** * Adds a Collector. + * + * @return void */ public function add(DataCollectorInterface $collector) { diff --git a/core/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php b/core/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php index 95d72f46b3..247e51fce9 100644 --- a/core/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php +++ b/core/vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php @@ -49,6 +49,8 @@ public function write(Profile $profile): bool; /** * Purges all data from the database. + * + * @return void */ public function purge(); } diff --git a/core/vendor/symfony/http-kernel/RebootableInterface.php b/core/vendor/symfony/http-kernel/RebootableInterface.php index e257237da9..e973f55400 100644 --- a/core/vendor/symfony/http-kernel/RebootableInterface.php +++ b/core/vendor/symfony/http-kernel/RebootableInterface.php @@ -25,6 +25,8 @@ interface RebootableInterface * while building the container. Use the %kernel.build_dir% parameter instead. * * @param string|null $warmupDir pass null to reboot in the regular build directory + * + * @return void */ public function reboot(?string $warmupDir); } diff --git a/core/vendor/symfony/http-kernel/Resources/welcome.html.php b/core/vendor/symfony/http-kernel/Resources/welcome.html.php index 44d962d503..2670ce1ab8 100644 --- a/core/vendor/symfony/http-kernel/Resources/welcome.html.php +++ b/core/vendor/symfony/http-kernel/Resources/welcome.html.php @@ -7,8 +7,8 @@ '.$this->dumpHeader; } + /** + * @return void + */ public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut) { if ('' === $str && isset($cursor->attr['img-data'], $cursor->attr['content-type'])) { @@ -788,6 +804,9 @@ public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut) } } + /** + * @return void + */ public function enterHash(Cursor $cursor, int $type, string|int|null $class, bool $hasChild) { if (Cursor::HASH_OBJECT === $type) { @@ -816,6 +835,9 @@ public function enterHash(Cursor $cursor, int $type, string|int|null $class, boo } } + /** + * @return void + */ public function leaveHash(Cursor $cursor, int $type, string|int|null $class, bool $hasChild, int $cut) { $this->dumpEllipsis($cursor, $hasChild, $cut); @@ -827,7 +849,7 @@ public function leaveHash(Cursor $cursor, int $type, string|int|null $class, boo protected function style(string $style, string $value, array $attr = []): string { - if ('' === $value) { + if ('' === $value && ('label' !== $style || !isset($attr['file']) && !isset($attr['href']))) { return ''; } @@ -862,7 +884,6 @@ protected function style(string $style, string $value, array $attr = []): string } elseif ('private' === $style) { $style .= sprintf(' title="Private property defined in class: `%s`"', esc($this->utf8Encode($attr['class']))); } - $map = static::$controlCharsMap; if (isset($attr['ellipsis'])) { $class = 'sf-dump-ellipsis'; @@ -881,6 +902,7 @@ protected function style(string $style, string $value, array $attr = []): string } } + $map = static::$controlCharsMap; $v = "".preg_replace_callback(static::$controlCharsRx, function ($c) use ($map) { $s = $b = '%s', esc($this->utf8Encode($attr['href'])), $target, $v); } if (isset($attr['lang'])) { $v = sprintf('%s', esc($attr['lang']), $v); } + if ('label' === $style) { + $v .= ' '; + } return $v; } + /** + * @return void + */ protected function dumpLine(int $depth, bool $endOfValue = false) { if (-1 === $this->lastDepth) { @@ -944,7 +981,7 @@ protected function dumpLine(int $depth, bool $endOfValue = false) AbstractDumper::dumpLine($depth); } - private function getSourceLink(string $file, int $line) + private function getSourceLink(string $file, int $line): string|false { $options = $this->extraDisplayOptions + $this->displayOptions; @@ -956,7 +993,7 @@ private function getSourceLink(string $file, int $line) } } -function esc(string $str) +function esc(string $str): string { return htmlspecialchars($str, \ENT_QUOTES, 'UTF-8'); } diff --git a/core/vendor/symfony/var-dumper/Dumper/ServerDumper.php b/core/vendor/symfony/var-dumper/Dumper/ServerDumper.php index f2c891b6a1..98c2149330 100644 --- a/core/vendor/symfony/var-dumper/Dumper/ServerDumper.php +++ b/core/vendor/symfony/var-dumper/Dumper/ServerDumper.php @@ -41,10 +41,15 @@ public function getContextProviders(): array return $this->connection->getContextProviders(); } + /** + * @return string|null + */ public function dump(Data $data) { if (!$this->connection->write($data) && $this->wrappedDumper) { - $this->wrappedDumper->dump($data); + return $this->wrappedDumper->dump($data); } + + return null; } } diff --git a/core/vendor/symfony/var-dumper/Resources/functions/dump.php b/core/vendor/symfony/var-dumper/Resources/functions/dump.php index 6221a4d182..a0e5addff1 100644 --- a/core/vendor/symfony/var-dumper/Resources/functions/dump.php +++ b/core/vendor/symfony/var-dumper/Resources/functions/dump.php @@ -9,40 +9,52 @@ * file that was distributed with this source code. */ +use Symfony\Component\VarDumper\Caster\ScalarStub; use Symfony\Component\VarDumper\VarDumper; if (!function_exists('dump')) { /** * @author Nicolas Grekas + * @author Alexandre Daubois */ - function dump(mixed $var, mixed ...$moreVars): mixed + function dump(mixed ...$vars): mixed { - VarDumper::dump($var); + if (!$vars) { + VarDumper::dump(new ScalarStub('🐛')); - foreach ($moreVars as $v) { - VarDumper::dump($v); + return null; } - if (1 < func_num_args()) { - return func_get_args(); + if (array_key_exists(0, $vars) && 1 === count($vars)) { + VarDumper::dump($vars[0]); + $k = 0; + } else { + foreach ($vars as $k => $v) { + VarDumper::dump($v, is_int($k) ? 1 + $k : $k); + } } - return $var; + if (1 < count($vars)) { + return $vars; + } + + return $vars[$k]; } } if (!function_exists('dd')) { - /** - * @return never - */ - function dd(...$vars): void + function dd(mixed ...$vars): never { if (!in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) && !headers_sent()) { header('HTTP/1.1 500 Internal Server Error'); } - foreach ($vars as $v) { - VarDumper::dump($v); + if (array_key_exists(0, $vars) && 1 === count($vars)) { + VarDumper::dump($vars[0]); + } else { + foreach ($vars as $k => $v) { + VarDumper::dump($v, is_int($k) ? 1 + $k : $k); + } } exit(1); diff --git a/core/vendor/symfony/var-dumper/Server/Connection.php b/core/vendor/symfony/var-dumper/Server/Connection.php index c68408678f..3c0f36864f 100644 --- a/core/vendor/symfony/var-dumper/Server/Connection.php +++ b/core/vendor/symfony/var-dumper/Server/Connection.php @@ -62,7 +62,7 @@ public function write(Data $data): bool $context = array_filter($context); $encodedPayload = base64_encode(serialize([$data, $context]))."\n"; - set_error_handler([self::class, 'nullErrorHandler']); + set_error_handler(fn () => true); try { if (-1 !== stream_socket_sendto($this->socket, $encodedPayload)) { return true; @@ -82,16 +82,14 @@ public function write(Data $data): bool return false; } - private static function nullErrorHandler(int $t, string $m) - { - // no-op - } - + /** + * @return resource|null + */ private function createSocket() { - set_error_handler([self::class, 'nullErrorHandler']); + set_error_handler(fn () => true); try { - return stream_socket_client($this->host, $errno, $errstr, 3); + return stream_socket_client($this->host, $errno, $errstr, 3) ?: null; } finally { restore_error_handler(); } diff --git a/core/vendor/symfony/var-dumper/VarDumper.php b/core/vendor/symfony/var-dumper/VarDumper.php index 840bfd6496..2e1dad116c 100644 --- a/core/vendor/symfony/var-dumper/VarDumper.php +++ b/core/vendor/symfony/var-dumper/VarDumper.php @@ -37,13 +37,19 @@ class VarDumper */ private static $handler; - public static function dump(mixed $var) + /** + * @param string|null $label + * + * @return mixed + */ + public static function dump(mixed $var/* , string $label = null */) { + $label = 2 <= \func_num_args() ? func_get_arg(1) : null; if (null === self::$handler) { self::register(); } - return (self::$handler)($var); + return (self::$handler)($var, $label); } public static function setHandler(callable $callable = null): ?callable @@ -90,8 +96,14 @@ private static function register(): void $dumper = new ContextualizedDumper($dumper, [new SourceContextProvider()]); } - self::$handler = function ($var) use ($cloner, $dumper) { - $dumper->dump($cloner->cloneVar($var)); + self::$handler = function ($var, string $label = null) use ($cloner, $dumper) { + $var = $cloner->cloneVar($var); + + if (null !== $label) { + $var = $var->withContext(['label' => $label]); + } + + $dumper->dump($var); }; } diff --git a/core/vendor/symfony/var-dumper/composer.json b/core/vendor/symfony/var-dumper/composer.json index 71ec64c0de..e9967f0e52 100644 --- a/core/vendor/symfony/var-dumper/composer.json +++ b/core/vendor/symfony/var-dumper/composer.json @@ -27,14 +27,8 @@ "twig/twig": "^2.13|^3.0.4" }, "conflict": { - "phpunit/phpunit": "<5.4.3", "symfony/console": "<5.4" }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, "autoload": { "files": [ "Resources/functions/dump.php" ], "psr-4": { "Symfony\\Component\\VarDumper\\": "" }, diff --git a/core/vendor/voku/portable-ascii/.whitesource b/core/vendor/voku/portable-ascii/.whitesource deleted file mode 100644 index 55b922e8c1..0000000000 --- a/core/vendor/voku/portable-ascii/.whitesource +++ /dev/null @@ -1,12 +0,0 @@ -{ - "scanSettings": { - "baseBranches": [] - }, - "checkRunSettings": { - "vulnerableCheckRunConclusionLevel": "failure", - "displayMode": "diff" - }, - "issueSettings": { - "minSeverityLevel": "LOW" - } -} \ No newline at end of file diff --git a/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_by_languages.php b/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_by_languages.php index d51f557a1d..68c3f9d254 100644 --- a/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_by_languages.php +++ b/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_by_languages.php @@ -1060,9 +1060,9 @@ 'Я' => 'Ya', 'я' => 'ya', ], - // Russian - Passport (2013), ICAO + // Russian - GOST 7.79-2000(B) // -> https://en.m.wikipedia.org/wiki/Romanization_of_Russian#content-collapsible-block-1 - 'ru__passport_2013' => [ + 'ru__gost_2000_b' => [ 'А' => 'A', 'а' => 'a', 'Б' => 'B', @@ -1075,8 +1075,8 @@ 'д' => 'd', 'Е' => 'E', 'е' => 'e', - 'Ё' => 'E', - 'ё' => 'e', + 'Ё' => 'Yo', + 'ё' => 'yo', 'Ж' => 'Zh', 'ж' => 'zh', 'З' => 'Z', @@ -1107,42 +1107,42 @@ 'у' => 'u', 'Ф' => 'F', 'ф' => 'f', - 'Х' => 'Kh', - 'х' => 'kh', - 'Ц' => 'Ts', - 'ц' => 'ts', + 'Х' => 'X', + 'х' => 'x', + 'Ц' => 'Cz', + 'ц' => 'cz', 'Ч' => 'Ch', 'ч' => 'ch', 'ш' => 'sh', 'Ш' => 'Sh', - 'Щ' => 'Shch', - 'щ' => 'shch', - 'Ъ' => 'Ie', - 'ъ' => 'ie', - 'Ы' => 'Y', - 'ы' => 'y', + 'Щ' => 'Shh', + 'щ' => 'shh', + 'Ъ' => '', + 'ъ' => '', + 'Ы' => 'Y\'', + 'ы' => 'y\'', 'Ь' => '', 'ь' => '', - 'Э' => 'E', - 'э' => 'e', - 'Ю' => 'Iu', - 'ю' => 'iu', - 'Я' => 'Ia', - 'я' => 'ia', - 'І' => '', - 'і' => '', - 'Ѳ' => '', - 'ѳ' => '', - 'Ѣ' => '', - 'ѣ' => '', - 'Ѵ' => '', - 'ѵ' => '', + 'Э' => 'E\'', + 'э' => 'e\'', + 'Ю' => 'Yu', + 'ю' => 'yu', + 'Я' => 'Ya', + 'я' => 'ya', + 'І' => 'I', + 'і' => 'i', + 'Ѳ' => 'Fh', + 'ѳ' => 'fh', + 'Ѣ' => 'Ye', + 'ѣ' => 'ye', + 'Ѵ' => 'Yh', + 'ѵ' => 'yh', 'Є' => '', 'є' => '', 'Ѥ' => '', 'ѥ' => '', - 'Ѕ' => '', - 'ѕ' => '', + 'Ѕ' => 'Js', + 'ѕ' => 'js', 'Ꙋ' => '', 'ꙋ' => '', 'Ѡ' => '', @@ -1162,9 +1162,9 @@ 'Ѱ' => '', 'ѱ' => '', ], - // Russian - GOST 7.79-2000(B) + // Russian - Passport (2013), ICAO // -> https://en.m.wikipedia.org/wiki/Romanization_of_Russian#content-collapsible-block-1 - 'ru__gost_2000_b' => [ + 'ru__passport_2013' => [ 'А' => 'A', 'а' => 'a', 'Б' => 'B', @@ -1177,8 +1177,8 @@ 'д' => 'd', 'Е' => 'E', 'е' => 'e', - 'Ё' => 'Yo', - 'ё' => 'yo', + 'Ё' => 'E', + 'ё' => 'e', 'Ж' => 'Zh', 'ж' => 'zh', 'З' => 'Z', @@ -1209,42 +1209,42 @@ 'у' => 'u', 'Ф' => 'F', 'ф' => 'f', - 'Х' => 'X', - 'х' => 'x', - 'Ц' => 'Cz', - 'ц' => 'cz', + 'Х' => 'Kh', + 'х' => 'kh', + 'Ц' => 'Ts', + 'ц' => 'ts', 'Ч' => 'Ch', 'ч' => 'ch', 'ш' => 'sh', 'Ш' => 'Sh', - 'Щ' => 'Shh', - 'щ' => 'shh', - 'Ъ' => '', - 'ъ' => '', - 'Ы' => 'Y\'', - 'ы' => 'y\'', + 'Щ' => 'Shch', + 'щ' => 'shch', + 'Ъ' => 'Ie', + 'ъ' => 'ie', + 'Ы' => 'Y', + 'ы' => 'y', 'Ь' => '', 'ь' => '', - 'Э' => 'E\'', - 'э' => 'e\'', - 'Ю' => 'Yu', - 'ю' => 'yu', - 'Я' => 'Ya', - 'я' => 'ya', - 'І' => 'I', - 'і' => 'i', - 'Ѳ' => 'Fh', - 'ѳ' => 'fh', - 'Ѣ' => 'Ye', - 'ѣ' => 'ye', - 'Ѵ' => 'Yh', - 'ѵ' => 'yh', + 'Э' => 'E', + 'э' => 'e', + 'Ю' => 'Iu', + 'ю' => 'iu', + 'Я' => 'Ia', + 'я' => 'ia', + 'І' => '', + 'і' => '', + 'Ѳ' => '', + 'ѳ' => '', + 'Ѣ' => '', + 'ѣ' => '', + 'Ѵ' => '', + 'ѵ' => '', 'Є' => '', 'є' => '', 'Ѥ' => '', 'ѥ' => '', - 'Ѕ' => 'Js', - 'ѕ' => 'js', + 'Ѕ' => '', + 'ѕ' => '', 'Ꙋ' => '', 'ꙋ' => '', 'Ѡ' => '', @@ -1265,15 +1265,32 @@ 'ѱ' => '', ], // Ukrainian + // -> https://zakon.rada.gov.ua/laws/show/55-2010-%D0%BF?lang=en 'uk' => [ + 'Г' => 'H', + 'г' => 'h', + 'Ґ' => 'G', + 'ґ' => 'g', 'Є' => 'Ye', 'є' => 'ye', + 'И' => 'Y', + 'и' => 'y', 'І' => 'I', 'і' => 'i', 'Ї' => 'Yi', 'ї' => 'yi', - 'Ґ' => 'G', - 'ґ' => 'g', + 'Й' => 'Y', + 'й' => 'y', + 'Х' => 'Kh', + 'х' => 'kh', + 'Ц' => 'Ts', + 'ц' => 'ts', + 'Ч' => 'Ch', + 'ч' => 'ch', + 'Ш' => 'Sh', + 'ш' => 'sh', + 'Щ' => 'Shch', + 'щ' => 'shch', ], // Kazakh 'kk' => [ @@ -1602,10 +1619,10 @@ 'fa' => [ 'ا' => 'a', 'ب' => 'b', - 'پ' => 'b', + 'پ' => 'p', 'ت' => 't', 'ث' => 's', - 'ج' => 'g', + 'ج' => 'j', 'چ' => 'ch', 'ح' => 'h', 'خ' => 'kh', @@ -2555,6 +2572,8 @@ 'j̄' => 'j', 'J̃' => 'J', 'j̃' => 'j', + 'Й' => 'i', + 'й' => 'i', 'ĸ' => 'k', 'Ĺ' => 'L', 'Ľ' => 'L', @@ -2810,6 +2829,8 @@ 'ȳ' => 'y', 'Ỹ' => 'Y', 'ỹ' => 'y', + 'Щ' => 'Shh', + 'щ' => 'shh', 'Ź' => 'Z', 'ź' => 'z', 'Z̀' => 'Z', diff --git a/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_extras_by_languages.php b/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_extras_by_languages.php index 426d84a4dc..afe31ae2cc 100644 --- a/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_extras_by_languages.php +++ b/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_extras_by_languages.php @@ -199,8 +199,8 @@ '&' => ' i ', '+' => ' plus ', ], - // Russian - Passport (2013), ICAO - 'ru__passport_2013' => [ + // Russian - GOST 7.79-2000(B) + 'ru__gost_2000_b' => [ '=' => ' ravnyj ', '%' => ' procent ', '∑' => ' summa ', @@ -210,8 +210,8 @@ '&' => ' i ', '+' => ' plus ', ], - // Russian - GOST 7.79-2000(B) - 'ru__gost_2000_b' => [ + // Russian - Passport (2013), ICAO + 'ru__passport_2013' => [ '=' => ' ravnyj ', '%' => ' procent ', '∑' => ' summa ', diff --git a/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_language_max_key.php b/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_language_max_key.php index a6345f2138..da81ae2366 100644 --- a/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_language_max_key.php +++ b/core/vendor/voku/portable-ascii/src/voku/helper/data/ascii_language_max_key.php @@ -31,8 +31,8 @@ 'fi' => 1, 'ka' => 1, 'ru' => 1, - 'ru__passport_2013' => 1, 'ru__gost_2000_b' => 1, + 'ru__passport_2013' => 1, 'uk' => 1, 'kk' => 1, 'cs' => 1,