From 779f4ad0d412ab6fb920c3e4314818191fd68d33 Mon Sep 17 00:00:00 2001 From: Serhii Korneliuk Date: Tue, 29 Aug 2023 20:16:38 +0300 Subject: [PATCH] [ADD] setLexicon() and update composer. --- core/composer.json | 43 +- core/composer.lock | 17040 ++++++++-------- core/src/ManagerTheme.php | 22 +- core/vendor/bin/carbon.bat | 5 + core/vendor/bin/composer.bat | 5 + core/vendor/bin/doctrine-dbal.bat | 5 + core/vendor/bin/patch-type-declarations.bat | 5 + core/vendor/bin/var-dump-server.bat | 5 + core/vendor/composer/autoload_classmap.php | 342 +- core/vendor/composer/autoload_files.php | 7 +- core/vendor/composer/autoload_psr4.php | 7 +- core/vendor/composer/autoload_static.php | 378 +- core/vendor/composer/ca-bundle/res/cacert.pem | 103 +- .../composer/class-map-generator/README.md | 4 +- .../class-map-generator/composer.json | 4 +- .../src/ClassMapGenerator.php | 6 +- .../class-map-generator/src/PhpFileParser.php | 7 +- core/vendor/composer/composer/CHANGELOG.md | 8 + .../src/Composer/Autoload/ClassLoader.php | 96 +- .../composer/src/Composer/Composer.php | 4 +- .../EventDispatcher/EventDispatcher.php | 8 + .../composer/src/Composer/Package/Locker.php | 2 +- .../Repository/PlatformRepository.php | 6 +- core/vendor/composer/installed.json | 1525 +- core/vendor/composer/installed.php | 445 +- .../redis-session-handler/.gitignore | 2 - core/vendor/doctrine/dbal/composer.json | 9 +- .../doctrine/dbal/src/Cache/ArrayResult.php | 12 +- .../dbal/src/Driver/AbstractDB2Driver.php | 4 +- .../dbal/src/Driver/AbstractException.php | 2 +- .../dbal/src/Driver/AbstractMySQLDriver.php | 6 +- .../dbal/src/Driver/AbstractOracleDriver.php | 4 +- .../src/Driver/AbstractPostgreSQLDriver.php | 6 +- .../src/Driver/AbstractSQLServerDriver.php | 4 +- .../dbal/src/Driver/AbstractSQLiteDriver.php | 4 +- .../dbal/src/Driver/IBMDB2/Connection.php | 6 +- .../dbal/src/Driver/IBMDB2/Driver.php | 2 +- .../dbal/src/Driver/IBMDB2/Statement.php | 8 +- .../AbstractConnectionMiddleware.php | 12 +- .../Middleware/AbstractDriverMiddleware.php | 8 +- .../Middleware/AbstractResultMiddleware.php | 12 +- .../AbstractStatementMiddleware.php | 6 +- .../dbal/src/Driver/Mysqli/Connection.php | 4 +- .../dbal/src/Driver/Mysqli/Driver.php | 2 +- .../dbal/src/Driver/Mysqli/Result.php | 10 +- .../dbal/src/Driver/Mysqli/Statement.php | 6 +- .../dbal/src/Driver/OCI8/Connection.php | 4 +- .../doctrine/dbal/src/Driver/OCI8/Driver.php | 2 +- .../dbal/src/Driver/OCI8/Statement.php | 6 +- .../dbal/src/Driver/PDO/Connection.php | 6 +- .../dbal/src/Driver/PDO/MySQL/Driver.php | 2 +- .../dbal/src/Driver/PDO/OCI/Driver.php | 2 +- .../dbal/src/Driver/PDO/PgSQL/Driver.php | 2 +- .../dbal/src/Driver/PDO/SQLSrv/Driver.php | 2 +- .../dbal/src/Driver/PDO/SQLSrv/Statement.php | 4 +- .../dbal/src/Driver/PDO/SQLite/Driver.php | 2 +- .../dbal/src/Driver/PDO/Statement.php | 4 +- .../dbal/src/Driver/PgSQL/Connection.php | 4 +- .../doctrine/dbal/src/Driver/PgSQL/Driver.php | 2 +- .../doctrine/dbal/src/Driver/PgSQL/Result.php | 12 +- .../dbal/src/Driver/PgSQL/Statement.php | 6 +- .../dbal/src/Driver/SQLSrv/Connection.php | 2 +- .../dbal/src/Driver/SQLSrv/Driver.php | 2 +- .../dbal/src/Driver/SQLSrv/Statement.php | 6 +- .../dbal/src/Driver/SQLite3/Driver.php | 2 +- .../src/Event/Listeners/OracleSessionInit.php | 2 +- .../src/Event/Listeners/SQLSessionInit.php | 2 +- .../src/Event/Listeners/SQLiteSessionInit.php | 2 +- .../src/Id/TableGeneratorSchemaVisitor.php | 12 +- .../doctrine/dbal/src/Logging/DebugStack.php | 4 +- .../doctrine/dbal/src/Logging/LoggerChain.php | 4 +- .../doctrine/dbal/src/Logging/Statement.php | 6 +- .../src/Platforms/AbstractMySQLPlatform.php | 18 +- .../dbal/src/Platforms/AbstractPlatform.php | 2 +- .../dbal/src/Platforms/DB2Platform.php | 24 +- .../src/Platforms/Keywords/DB2Keywords.php | 4 +- .../Platforms/Keywords/MariaDBKeywords.php | 2 +- .../Platforms/Keywords/MySQL57Keywords.php | 4 +- .../Platforms/Keywords/MySQL80Keywords.php | 4 +- .../src/Platforms/Keywords/MySQLKeywords.php | 4 +- .../src/Platforms/Keywords/OracleKeywords.php | 4 +- .../Platforms/Keywords/PostgreSQLKeywords.php | 4 +- .../Keywords/ReservedKeywordsValidator.php | 12 +- .../Platforms/Keywords/SQLServerKeywords.php | 4 +- .../src/Platforms/Keywords/SQLiteKeywords.php | 4 +- .../dbal/src/Platforms/MariaDBPlatform.php | 2 +- .../dbal/src/Platforms/MySQL57Platform.php | 14 +- .../dbal/src/Platforms/MySQL80Platform.php | 2 +- .../dbal/src/Platforms/OraclePlatform.php | 18 +- .../dbal/src/Platforms/PostgreSQLPlatform.php | 59 +- .../dbal/src/Platforms/SQLServerPlatform.php | 24 +- .../dbal/src/Platforms/SqlitePlatform.php | 12 +- .../dbal/src/Portability/Statement.php | 2 +- .../dbal/src/Schema/AbstractSchemaManager.php | 8 +- .../doctrine/dbal/src/Schema/Column.php | 2 +- .../dbal/src/Schema/DB2SchemaManager.php | 14 +- .../dbal/src/Schema/ForeignKeyConstraint.php | 2 +- .../vendor/doctrine/dbal/src/Schema/Index.php | 4 +- .../dbal/src/Schema/MySQLSchemaManager.php | 14 +- .../dbal/src/Schema/OracleSchemaManager.php | 20 +- .../src/Schema/PostgreSQLSchemaManager.php | 18 +- .../src/Schema/SQLServerSchemaManager.php | 24 +- .../dbal/src/Schema/SqliteSchemaManager.php | 24 +- .../vendor/doctrine/dbal/src/Schema/Table.php | 4 +- .../doctrine/dbal/src/Schema/TableDiff.php | 4 +- .../dbal/src/Schema/UniqueConstraint.php | 4 +- .../src/Schema/Visitor/AbstractVisitor.php | 2 +- .../Visitor/CreateSchemaSqlCollector.php | 8 +- .../Schema/Visitor/DropSchemaSqlCollector.php | 6 +- .../dbal/src/Schema/Visitor/Graphviz.php | 6 +- .../Schema/Visitor/RemoveNamespacedAssets.php | 8 +- .../Console/Command/ReservedWordsCommand.php | 2 +- .../Tools/Console/Command/RunSqlCommand.php | 2 +- .../doctrine/dbal/src/Types/ArrayType.php | 10 +- .../dbal/src/Types/AsciiStringType.php | 2 +- .../doctrine/dbal/src/Types/BigIntType.php | 8 +- .../doctrine/dbal/src/Types/BinaryType.php | 8 +- .../doctrine/dbal/src/Types/BlobType.php | 8 +- .../doctrine/dbal/src/Types/BooleanType.php | 10 +- .../dbal/src/Types/DateImmutableType.php | 8 +- .../dbal/src/Types/DateIntervalType.php | 10 +- .../dbal/src/Types/DateTimeImmutableType.php | 8 +- .../doctrine/dbal/src/Types/DateTimeType.php | 8 +- .../src/Types/DateTimeTzImmutableType.php | 8 +- .../dbal/src/Types/DateTimeTzType.php | 8 +- .../doctrine/dbal/src/Types/DateType.php | 8 +- .../doctrine/dbal/src/Types/DecimalType.php | 6 +- .../doctrine/dbal/src/Types/FloatType.php | 6 +- .../doctrine/dbal/src/Types/GuidType.php | 6 +- .../doctrine/dbal/src/Types/IntegerType.php | 8 +- .../doctrine/dbal/src/Types/JsonType.php | 10 +- .../doctrine/dbal/src/Types/ObjectType.php | 10 +- .../dbal/src/Types/SimpleArrayType.php | 10 +- .../doctrine/dbal/src/Types/SmallIntType.php | 8 +- .../doctrine/dbal/src/Types/StringType.php | 4 +- .../doctrine/dbal/src/Types/TextType.php | 6 +- .../dbal/src/Types/TimeImmutableType.php | 8 +- .../doctrine/dbal/src/Types/TimeType.php | 8 +- core/vendor/doctrine/dbal/src/Types/Type.php | 3 +- .../src/Types/VarDateTimeImmutableType.php | 8 +- .../dbal/src/Types/VarDateTimeType.php | 2 +- .../doctrine/deprecations/composer.json | 20 +- .../lib/Doctrine/Deprecations/Deprecation.php | 68 +- .../vendor/doctrine/deprecations/phpstan.neon | 9 + core/vendor/doctrine/deprecations/psalm.xml | 30 + core/vendor/doctrine/inflector/composer.json | 4 +- .../Inflector/Rules/English/Inflectible.php | 1 + .../cron-expression/CHANGELOG.md | 240 + .../dragonmantank/cron-expression/LICENSE | 19 + .../dragonmantank/cron-expression/README.md | 87 + .../cron-expression/composer.json | 47 + .../src/Cron/AbstractField.php | 346 + .../src/Cron/CronExpression.php | 578 + .../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 | 97 + .../cron-expression/src/Cron/MonthField.php | 61 + core/vendor/guzzlehttp/guzzle/CHANGELOG.md | 15 + core/vendor/guzzlehttp/guzzle/UPGRADING.md | 2 +- core/vendor/guzzlehttp/guzzle/composer.json | 4 +- core/vendor/guzzlehttp/guzzle/src/Client.php | 2 +- .../guzzlehttp/guzzle/src/ClientInterface.php | 2 +- .../guzzle/src/Cookie/CookieJar.php | 38 +- .../guzzle/src/Cookie/CookieJarInterface.php | 3 +- .../guzzle/src/Handler/CurlFactory.php | 18 +- .../guzzle/src/Handler/CurlMultiHandler.php | 10 +- .../guzzlehttp/guzzle/src/HandlerStack.php | 4 +- .../guzzle/src/MessageFormatter.php | 2 +- .../guzzle/src/MessageFormatterInterface.php | 2 +- .../guzzle/src/RedirectMiddleware.php | 4 +- .../guzzlehttp/guzzle/src/TransferStats.php | 4 +- core/vendor/guzzlehttp/promises/CHANGELOG.md | 9 +- core/vendor/guzzlehttp/promises/README.md | 2 +- .../promises/src/RejectionException.php | 2 +- .../vendor-bin/php-cs-fixer/composer.json | 9 - .../promises/vendor-bin/phpstan/composer.json | 10 - .../promises/vendor-bin/psalm/composer.json | 9 - core/vendor/guzzlehttp/psr7/CHANGELOG.md | 23 +- core/vendor/guzzlehttp/psr7/README.md | 24 +- .../guzzlehttp/psr7/src/AppendStream.php | 14 +- .../guzzlehttp/psr7/src/BufferStream.php | 2 - core/vendor/guzzlehttp/psr7/src/FnStream.php | 9 +- core/vendor/guzzlehttp/psr7/src/Header.php | 2 +- .../guzzlehttp/psr7/src/HttpFactory.php | 8 +- .../guzzlehttp/psr7/src/InflateStream.php | 6 +- core/vendor/guzzlehttp/psr7/src/Message.php | 26 +- .../guzzlehttp/psr7/src/MessageTrait.php | 12 +- core/vendor/guzzlehttp/psr7/src/MimeType.php | 34 +- .../guzzlehttp/psr7/src/MultipartStream.php | 8 +- .../vendor/guzzlehttp/psr7/src/PumpStream.php | 6 +- core/vendor/guzzlehttp/psr7/src/Query.php | 4 +- core/vendor/guzzlehttp/psr7/src/Request.php | 6 +- core/vendor/guzzlehttp/psr7/src/Response.php | 1 + core/vendor/guzzlehttp/psr7/src/Rfc7230.php | 2 +- .../guzzlehttp/psr7/src/ServerRequest.php | 14 +- core/vendor/guzzlehttp/psr7/src/Stream.php | 11 +- .../psr7/src/StreamDecoratorTrait.php | 5 +- .../guzzlehttp/psr7/src/StreamWrapper.php | 60 +- core/vendor/guzzlehttp/psr7/src/Uri.php | 51 +- .../guzzlehttp/psr7/src/UriNormalizer.php | 10 +- .../guzzlehttp/psr7/src/UriResolver.php | 18 +- core/vendor/guzzlehttp/psr7/src/Utils.php | 10 +- .../guzzlehttp/uri-template/CHANGELOG.md | 8 + .../guzzlehttp/uri-template/composer.json | 9 +- .../uri-template/src/UriTemplate.php | 5 +- .../bus/DatabaseBatchRepository.php | 2 +- core/vendor/illuminate/cache/CacheManager.php | 3 +- core/vendor/illuminate/cache/DatabaseLock.php | 15 +- .../vendor/illuminate/cache/DatabaseStore.php | 20 +- core/vendor/illuminate/cache/FileStore.php | 2 +- core/vendor/illuminate/cache/RedisStore.php | 2 +- .../illuminate/collections/Collection.php | 14 +- .../illuminate/collections/LazyCollection.php | 2 +- .../collections/Traits/EnumeratesValues.php | 64 +- .../vendor/illuminate/collections/helpers.php | 36 + .../illuminate/console/CacheCommandMutex.php | 71 +- core/vendor/illuminate/console/Command.php | 5 +- .../console/Concerns/CallsCommands.php | 6 +- .../console/Concerns/ConfiguresPrompts.php | 132 + .../console/Concerns/InteractsWithIO.php | 10 + .../Concerns/PromptsForMissingInput.php | 49 +- .../illuminate/console/ConfirmableTrait.php | 8 +- .../console/Contracts/NewLineAware.php | 9 + .../illuminate/console/GeneratorCommand.php | 30 +- .../vendor/illuminate/console/OutputStyle.php | 68 +- core/vendor/illuminate/console/Parser.php | 18 +- .../console/Scheduling/CacheEventMutex.php | 18 +- .../illuminate/console/Scheduling/Event.php | 39 + .../console/Scheduling/ManagesFrequencies.php | 150 +- .../console/Scheduling/Schedule.php | 9 +- .../Scheduling/ScheduleInterruptCommand.php | 58 + .../Scheduling/ScheduleListCommand.php | 182 +- .../console/Scheduling/ScheduleRunCommand.php | 88 +- .../Scheduling/ScheduleTestCommand.php | 31 +- core/vendor/illuminate/console/Signals.php | 2 +- .../console/View/Components/Component.php | 2 - .../console/View/Components/Line.php | 2 +- .../console/View/Components/Secret.php | 24 + core/vendor/illuminate/console/composer.json | 1 + .../vendor/illuminate/container/Container.php | 8 +- .../Database/Eloquent/CastsAttributes.php | 4 +- .../Database/Query/ConditionExpression.php | 7 + .../contracts/Events/Dispatcher.php | 2 +- .../contracts/Filesystem/Filesystem.php | 2 +- .../vendor/illuminate/database/Connection.php | 35 +- .../Console/DatabaseInspectionCommand.php | 4 +- .../database/Console/DumpCommand.php | 2 +- .../Console/Migrations/FreshCommand.php | 2 +- .../Console/Migrations/MigrateCommand.php | 16 +- .../Console/Migrations/MigrateMakeCommand.php | 4 +- .../Console/Migrations/RefreshCommand.php | 2 +- .../Console/Migrations/StatusCommand.php | 12 +- .../database/Console/PruneCommand.php | 6 + .../database/Console/TableCommand.php | 4 +- .../database/DetectsLostConnections.php | 4 + .../illuminate/database/Eloquent/Builder.php | 68 +- .../database/Eloquent/Collection.php | 8 +- .../Eloquent/Concerns/GuardsAttributes.php | 4 +- .../Eloquent/Concerns/HasAttributes.php | 22 +- .../Eloquent/Concerns/HasUniqueIds.php | 2 +- .../database/Eloquent/Factories/Factory.php | 20 +- .../illuminate/database/Eloquent/Model.php | 14 +- .../database/Eloquent/Relations/BelongsTo.php | 19 +- .../Eloquent/Relations/BelongsToMany.php | 37 +- .../Eloquent/Relations/HasManyThrough.php | 18 + .../Eloquent/Relations/HasOneOrMany.php | 21 +- .../Eloquent/Relations/MorphOneOrMany.php | 14 + .../database/Eloquent/Relations/MorphTo.php | 51 + .../database/Eloquent/SoftDeletingScope.php | 19 +- .../database/Events/DatabaseRefreshed.php | 14 +- .../database/Events/ModelPruningFinished.php | 24 + .../database/Events/ModelPruningStarting.php | 24 + .../illuminate/database/MySqlConnection.php | 12 + .../database/PostgresConnection.php | 12 + .../illuminate/database/Query/Builder.php | 73 +- .../database/Query/Grammars/Grammar.php | 86 +- .../Query/Grammars/PostgresGrammar.php | 22 + .../Query/Grammars/SqlServerGrammar.php | 32 - .../illuminate/database/SQLiteConnection.php | 12 + .../database/Schema/MySqlSchemaState.php | 2 +- .../database/Schema/PostgresSchemaState.php | 2 +- .../database/SqlServerConnection.php | 12 + .../UniqueConstraintViolationException.php | 7 + core/vendor/illuminate/events/Dispatcher.php | 20 +- .../illuminate/events/NullDispatcher.php | 2 +- .../filesystem/FilesystemManager.php | 12 +- .../vendor/illuminate/http/Client/Factory.php | 49 +- .../illuminate/http/Client/PendingRequest.php | 76 +- core/vendor/illuminate/http/Client/Pool.php | 2 +- .../vendor/illuminate/http/Client/Request.php | 2 +- core/vendor/illuminate/http/JsonResponse.php | 17 +- .../http/Middleware/TrustProxies.php | 18 +- core/vendor/illuminate/http/Request.php | 12 +- .../ConditionallyLoadsAttributes.php | 45 +- core/vendor/illuminate/log/LogManager.php | 4 +- .../illuminate/log/ParsesLogConfiguration.php | 2 + .../illuminate/macroable/Traits/Macroable.php | 1 - .../redis/Connections/Connection.php | 15 +- .../redis/Connections/PredisConnection.php | 17 + .../redis/Connectors/PhpRedisConnector.php | 2 +- .../redis/Connectors/PredisConnector.php | 2 +- .../routing/CompiledRouteCollection.php | 2 +- .../routing/Console/ControllerMakeCommand.php | 31 +- .../routing/Controllers/Middleware.php | 2 +- .../routing/Events/PreparingResponse.php | 33 + .../routing/Events/ResponsePrepared.php | 33 + .../routing/Middleware/ThrottleRequests.php | 37 +- .../Middleware/ThrottleRequestsWithRedis.php | 12 +- .../illuminate/routing/ResourceRegistrar.php | 5 +- core/vendor/illuminate/routing/Router.php | 8 +- .../illuminate/routing/UrlGenerator.php | 25 + core/vendor/illuminate/support/Benchmark.php | 19 + core/vendor/illuminate/support/Composer.php | 123 +- .../illuminate/support/Facades/Blade.php | 1 + .../vendor/illuminate/support/Facades/Bus.php | 1 + core/vendor/illuminate/support/Facades/DB.php | 1 + .../illuminate/support/Facades/Event.php | 2 +- .../illuminate/support/Facades/Gate.php | 1 + .../illuminate/support/Facades/Http.php | 10 +- .../illuminate/support/Facades/Mail.php | 3 + .../illuminate/support/Facades/Queue.php | 1 + .../illuminate/support/Facades/Request.php | 9 +- .../illuminate/support/Facades/Storage.php | 4 +- .../vendor/illuminate/support/Facades/URL.php | 1 + .../illuminate/support/Facades/Vite.php | 1 + core/vendor/illuminate/support/Sleep.php | 4 +- core/vendor/illuminate/support/Str.php | 121 +- core/vendor/illuminate/support/Stringable.php | 47 + .../support/Testing/Fakes/BatchFake.php | 3 + .../support/Testing/Fakes/BusFake.php | 57 +- .../support/Testing/Fakes/EventFake.php | 2 +- .../support/Testing/Fakes/MailFake.php | 50 + .../support/Testing/Fakes/QueueFake.php | 33 +- .../support/Traits/ForwardsCalls.php | 6 +- core/vendor/illuminate/support/composer.json | 2 +- core/vendor/illuminate/support/helpers.php | 12 +- .../CreatesPotentiallyTranslatedStrings.php | 54 + .../illuminate/translation/Translator.php | 13 +- .../translation/lang/en/validation.php | 1 + .../validation/ClosureValidationRule.php | 52 +- .../validation/Concerns/FormatsMessages.php | 4 + .../Concerns/ValidatesAttributes.php | 68 +- .../validation/InvokableValidationRule.php | 55 +- .../illuminate/validation/NestedRules.php | 6 +- core/vendor/illuminate/validation/Rule.php | 13 + .../illuminate/validation/Rules/Can.php | 65 + .../validation/Rules/DatabaseRule.php | 17 +- .../illuminate/validation/Rules/File.php | 54 +- .../validation/ValidationRuleParser.php | 2 +- .../validation/ValidationServiceProvider.php | 4 +- .../illuminate/validation/Validator.php | 28 +- .../view/Compilers/BladeCompiler.php | 28 +- .../view/Compilers/ComponentTagCompiler.php | 6 +- .../illuminate/view/ComponentAttributeBag.php | 37 +- .../view/Concerns/ManagesComponents.php | 3 +- .../view/Engines/CompilerEngine.php | 6 + .../phpthumb/demo/phpThumb.demo.demo.php | 5 +- .../phpthumb/docs/phpthumb.changelog.txt | 9 + .../phpthumb/phpThumb.config.php.default | 4 + .../james-heinrich/phpthumb/phpThumb.php | 12 +- .../phpthumb/phpthumb.class.php | 58 +- .../phpthumb/phpthumb.filters.php | 57 +- .../phpthumb/phpthumb.functions.php | 29 +- .../phpthumb/phpthumb.unsharp.php | 6 +- core/vendor/laravel/prompts/LICENSE.md | 21 + core/vendor/laravel/prompts/README.md | 34 + core/vendor/laravel/prompts/composer.json | 38 + core/vendor/laravel/prompts/phpunit.xml | 14 + .../laravel/prompts/src/Concerns/Colors.php | 206 + .../laravel/prompts/src/Concerns/Cursor.php | 63 + .../laravel/prompts/src/Concerns/Erase.php | 31 + .../laravel/prompts/src/Concerns/Events.php | 33 + .../prompts/src/Concerns/FakesInputOutput.php | 88 + .../laravel/prompts/src/Concerns/Fallback.php | 56 + .../laravel/prompts/src/Concerns/Termwind.php | 25 + .../laravel/prompts/src/Concerns/Themes.php | 102 + .../prompts/src/Concerns/Truncation.php | 20 + .../prompts/src/Concerns/TypedValue.php | 110 + .../laravel/prompts/src/ConfirmPrompt.php | 52 + core/vendor/laravel/prompts/src/Key.php | 36 + .../laravel/prompts/src/MultiSelectPrompt.php | 166 + core/vendor/laravel/prompts/src/Note.php | 44 + .../src/Output/BufferedConsoleOutput.php | 50 + .../prompts/src/Output/ConsoleOutput.php | 49 + .../laravel/prompts/src/PasswordPrompt.php | 43 + core/vendor/laravel/prompts/src/Prompt.php | 330 + .../laravel/prompts/src/SearchPrompt.php | 178 + .../laravel/prompts/src/SelectPrompt.php | 119 + core/vendor/laravel/prompts/src/Spinner.php | 126 + .../laravel/prompts/src/SuggestPrompt.php | 169 + core/vendor/laravel/prompts/src/Terminal.php | 79 + .../vendor/laravel/prompts/src/TextPrompt.php | 36 + .../Themes/Default/Concerns/DrawsBoxes.php | 89 + .../Default/Concerns/DrawsScrollbars.php | 55 + .../Themes/Default/ConfirmPromptRenderer.php | 71 + .../Default/MultiSelectPromptRenderer.php | 112 + .../src/Themes/Default/NoteRenderer.php | 56 + .../Themes/Default/PasswordPromptRenderer.php | 53 + .../prompts/src/Themes/Default/Renderer.php | 118 + .../Themes/Default/SearchPromptRenderer.php | 126 + .../Themes/Default/SelectPromptRenderer.php | 86 + .../src/Themes/Default/SpinnerRenderer.php | 41 + .../Themes/Default/SuggestPromptRenderer.php | 114 + .../src/Themes/Default/TextPromptRenderer.php | 53 + core/vendor/laravel/prompts/src/helpers.php | 141 + .../FallbackMimeTypeDetector.php | 51 + .../LocalFilesystemAdapter.php | 463 + .../league/flysystem-local/composer.json | 25 + core/vendor/league/flysystem/.dockerignore | 1 + .../league/flysystem/CODE_OF_CONDUCT.md | 76 - core/vendor/league/flysystem/INFO.md | 2 + core/vendor/league/flysystem/LICENSE | 2 +- core/vendor/league/flysystem/SECURITY.md | 16 - core/vendor/league/flysystem/composer.json | 105 +- core/vendor/league/flysystem/deprecations.md | 19 - .../league/flysystem/docker-compose.yml | 77 + core/vendor/league/flysystem/readme.md | 55 + .../flysystem/src/Adapter/AbstractAdapter.php | 72 - .../src/Adapter/AbstractFtpAdapter.php | 705 - .../src/Adapter/CanOverwriteFiles.php | 12 - .../league/flysystem/src/Adapter/Ftp.php | 584 - .../league/flysystem/src/Adapter/Ftpd.php | 48 - .../league/flysystem/src/Adapter/Local.php | 533 - .../flysystem/src/Adapter/NullAdapter.php | 144 - .../Polyfill/NotSupportingVisibilityTrait.php | 33 - .../Adapter/Polyfill/StreamedCopyTrait.php | 51 - .../Adapter/Polyfill/StreamedReadingTrait.php | 44 - .../src/Adapter/Polyfill/StreamedTrait.php | 9 - .../Adapter/Polyfill/StreamedWritingTrait.php | 60 - .../flysystem/src/Adapter/SynologyFtp.php | 8 - .../league/flysystem/src/AdapterInterface.php | 118 - .../src/CalculateChecksumFromStream.php | 30 + .../src/ChecksumAlgoIsNotSupported.php | 11 + .../league/flysystem/src/ChecksumProvider.php | 14 + core/vendor/league/flysystem/src/Config.php | 100 +- .../league/flysystem/src/ConfigAwareTrait.php | 49 - .../src/ConnectionErrorException.php | 9 - .../src/ConnectionRuntimeException.php | 9 - .../flysystem/src/CorruptedPathDetected.php | 10 +- .../vendor/league/flysystem/src/Directory.php | 31 - .../flysystem/src/DirectoryAttributes.php | 87 + .../league/flysystem/src/DirectoryListing.php | 90 + .../vendor/league/flysystem/src/Exception.php | 8 - core/vendor/league/flysystem/src/File.php | 205 - .../league/flysystem/src/FileAttributes.php | 100 + .../flysystem/src/FileExistsException.php | 37 - .../flysystem/src/FileNotFoundException.php | 37 - .../league/flysystem/src/Filesystem.php | 446 +- .../flysystem/src/FilesystemAdapter.php | 115 + .../flysystem/src/FilesystemException.php | 6 +- .../flysystem/src/FilesystemInterface.php | 284 - .../src/FilesystemNotFoundException.php | 12 - .../src/FilesystemOperationFailed.php | 25 + .../flysystem/src/FilesystemOperator.php | 9 + .../league/flysystem/src/FilesystemReader.php | 85 + .../league/flysystem/src/FilesystemWriter.php | 58 + core/vendor/league/flysystem/src/Handler.php | 137 - .../flysystem/src/InvalidRootException.php | 9 - .../flysystem/src/InvalidStreamProvided.php | 11 + .../src/InvalidVisibilityProvided.php | 20 + .../league/flysystem/src/MountManager.php | 774 +- .../flysystem/src/NotSupportedException.php | 37 - .../league/flysystem/src/PathNormalizer.php | 10 + .../league/flysystem/src/PathPrefixer.php | 50 + .../flysystem/src/PathTraversalDetected.php | 25 + .../flysystem/src/Plugin/AbstractPlugin.php | 24 - .../league/flysystem/src/Plugin/EmptyDir.php | 34 - .../flysystem/src/Plugin/ForcedCopy.php | 44 - .../flysystem/src/Plugin/ForcedRename.php | 44 - .../flysystem/src/Plugin/GetWithMetadata.php | 51 - .../league/flysystem/src/Plugin/ListFiles.php | 35 - .../league/flysystem/src/Plugin/ListPaths.php | 36 - .../league/flysystem/src/Plugin/ListWith.php | 60 - .../flysystem/src/Plugin/PluggableTrait.php | 97 - .../src/Plugin/PluginNotFoundException.php | 10 - .../league/flysystem/src/PluginInterface.php | 20 - .../flysystem/src/PortableVisibilityGuard.php | 19 + .../src/ProxyArrayAccessToProperties.php | 62 + .../league/flysystem/src/ReadInterface.php | 88 - .../flysystem/src/RootViolationException.php | 10 - .../league/flysystem/src/SafeStorage.php | 39 - .../flysystem/src/StorageAttributes.php | 40 + .../flysystem/src/SymbolicLinkEncountered.php | 25 + .../src/UnableToCheckDirectoryExistence.php | 13 + .../flysystem/src/UnableToCheckExistence.php | 26 + .../src/UnableToCheckFileExistence.php | 13 + .../league/flysystem/src/UnableToCopyFile.php | 48 + .../flysystem/src/UnableToCreateDirectory.php | 50 + .../flysystem/src/UnableToDeleteDirectory.php | 48 + .../flysystem/src/UnableToDeleteFile.php | 45 + .../src/UnableToGeneratePublicUrl.php | 26 + .../src/UnableToGenerateTemporaryUrl.php | 26 + .../flysystem/src/UnableToListContents.php | 24 + .../flysystem/src/UnableToMountFilesystem.php | 32 + .../league/flysystem/src/UnableToMoveFile.php | 49 + .../flysystem/src/UnableToProvideChecksum.php | 16 + .../league/flysystem/src/UnableToReadFile.php | 45 + .../src/UnableToResolveFilesystemMount.php | 20 + .../src/UnableToRetrieveMetadata.php | 76 + .../flysystem/src/UnableToSetVisibility.php | 49 + .../flysystem/src/UnableToWriteFile.php | 45 + .../PortableVisibilityConverter.php | 79 + .../UnixVisibility/VisibilityConverter.php | 14 + .../src/UnreadableFileEncountered.php | 28 + .../flysystem/src/UnreadableFileException.php | 18 - .../ChainedPublicUrlGenerator.php | 30 + .../PrefixPublicUrlGenerator.php | 23 + .../src/UrlGeneration/PublicUrlGenerator.php | 16 + .../ShardedPrefixPublicUrlGenerator.php | 39 + .../UrlGeneration/TemporaryUrlGenerator.php | 16 + core/vendor/league/flysystem/src/Util.php | 354 - .../src/Util/ContentListingFormatter.php | 122 - .../league/flysystem/src/Util/MimeType.php | 80 - .../flysystem/src/Util/StreamHasher.php | 36 - .../league/flysystem/src/Visibility.php | 11 + .../src/WhitespacePathNormalizer.php | 49 + .../league/mime-type-detection/CHANGELOG.md | 18 + .../vendor/league/mime-type-detection/LICENSE | 2 +- .../league/mime-type-detection/composer.json | 6 +- .../src/ExtensionLookup.php | 14 + .../src/ExtensionMimeTypeDetector.php | 16 +- .../src/FinfoMimeTypeDetector.php | 16 +- .../src/GeneratedExtensionToMimeTypeMap.php | 1076 +- core/vendor/monolog/monolog/README.md | 4 +- core/vendor/monolog/monolog/composer.json | 4 +- .../Monolog/Attribute/AsMonologProcessor.php | 10 +- .../monolog/src/Monolog/ErrorHandler.php | 2 +- .../Monolog/Handler/FingersCrossedHandler.php | 6 +- .../Monolog/Handler/RotatingFileHandler.php | 41 +- .../src/Monolog/Handler/SyslogHandler.php | 4 +- .../Monolog/Handler/TelegramBotHandler.php | 26 +- .../src/Monolog/Handler/TestHandler.php | 64 +- .../Processor/LoadAverageProcessor.php | 66 + .../monolog/monolog/src/Monolog/Utils.php | 2 +- core/vendor/nesbot/carbon/composer.json | 4 + core/vendor/nesbot/carbon/readme.md | 6 +- core/vendor/nesbot/carbon/sponsors.php | 12 +- .../nesbot/carbon/src/Carbon/CarbonPeriod.php | 78 +- .../carbon/src/Carbon/FactoryImmutable.php | 20 +- .../nesbot/carbon/src/Carbon/Lang/ms.php | 2 +- .../nesbot/carbon/src/Carbon/Lang/sl.php | 2 +- .../carbon/src/Carbon/Traits/Creator.php | 11 +- .../carbon/src/Carbon/Traits/Difference.php | 8 +- .../nesbot/carbon/src/Carbon/Traits/Mixin.php | 51 +- .../carbon/src/Carbon/Traits/Options.php | 4 +- core/vendor/phpmailer/phpmailer/README.md | 4 +- core/vendor/phpmailer/phpmailer/VERSION | 2 +- core/vendor/phpmailer/phpmailer/composer.json | 4 +- .../phpmailer/language/phpmailer.lang-fi.php | 1 - .../phpmailer/language/phpmailer.lang-fr.php | 1 - .../phpmailer/language/phpmailer.lang-nb.php | 45 +- .../phpmailer/language/phpmailer.lang-si.php | 34 + .../language/phpmailer.lang-zh_cn.php | 11 +- .../phpmailer/src/DSNConfigurator.php | 4 +- .../phpmailer/phpmailer/src/PHPMailer.php | 4 +- core/vendor/phpmailer/phpmailer/src/POP3.php | 2 +- core/vendor/phpmailer/phpmailer/src/SMTP.php | 6 +- core/vendor/predis/predis/README.md | 27 +- .../predis/predis/bin/create-command-test | 274 - core/vendor/predis/predis/composer.json | 3 + .../predis/docker/unstable_cluster/Dockerfile | 7 + .../docker/unstable_cluster/create_cluster.sh | 47 + .../unstable_cluster/docker-compose.yml | 17 + .../predis/docker/unstable_cluster/redis.conf | 9 + core/vendor/predis/predis/src/Client.php | 74 +- .../predis/predis/src/ClientConfiguration.php | 42 + .../predis/src/ClientContextInterface.php | 142 +- .../predis/predis/src/ClientInterface.php | 140 + .../predis/src/Cluster/ClusterStrategy.php | 14 + .../predis/predis/src/Cluster/SlotMap.php | 3 +- .../Iterator/CursorBasedIterator.php | 10 +- .../src/Collection/Iterator/ListKey.php | 10 +- .../Argument/Search/AggregateArguments.php | 161 + .../Argument/Search/AlterArguments.php | 17 + .../Argument/Search/CommonArguments.php | 182 + .../Argument/Search/CreateArguments.php | 191 + .../Argument/Search/CursorArguments.php | 44 + .../Command/Argument/Search/DropArguments.php | 43 + .../Argument/Search/ExplainArguments.php | 17 + .../Argument/Search/ProfileArguments.php | 81 + .../Search/SchemaFields/AbstractField.php | 69 + .../Search/SchemaFields/FieldInterface.php | 22 + .../Argument/Search/SchemaFields/GeoField.php | 31 + .../Search/SchemaFields/NumericField.php | 31 + .../Argument/Search/SchemaFields/TagField.php | 44 + .../Search/SchemaFields/TextField.php | 57 + .../Search/SchemaFields/VectorField.php | 47 + .../Argument/Search/SearchArguments.php | 306 + .../Argument/Search/SpellcheckArguments.php | 59 + .../Argument/Search/SugAddArguments.php | 28 + .../Argument/Search/SugGetArguments.php | 41 + .../Argument/Search/SynUpdateArguments.php | 17 + .../Argument/TimeSeries/AddArguments.php | 30 + .../Argument/TimeSeries/AlterArguments.php | 17 + .../Argument/TimeSeries/CommonArguments.php | 143 + .../Argument/TimeSeries/CreateArguments.php | 17 + .../Argument/TimeSeries/DecrByArguments.php | 17 + .../Argument/TimeSeries/GetArguments.php | 17 + .../Argument/TimeSeries/IncrByArguments.php | 41 + .../Argument/TimeSeries/InfoArguments.php | 43 + .../Argument/TimeSeries/MGetArguments.php | 17 + .../Argument/TimeSeries/MRangeArguments.php | 44 + .../Argument/TimeSeries/RangeArguments.php | 85 + .../Command/Processor/KeyPrefixProcessor.php | 107 + .../src/Command/Processor/ProcessorChain.php | 13 +- .../predis/predis/src/Command/Redis/ACL.php | 53 + .../src/Command/Redis/BloomFilter/BFADD.php | 29 + .../Command/Redis/BloomFilter/BFEXISTS.php | 28 + .../src/Command/Redis/BloomFilter/BFINFO.php | 79 + .../Command/Redis/BloomFilter/BFINSERT.php | 72 + .../Command/Redis/BloomFilter/BFLOADCHUNK.php | 28 + .../src/Command/Redis/BloomFilter/BFMADD.php | 29 + .../Command/Redis/BloomFilter/BFMEXISTS.php | 28 + .../Command/Redis/BloomFilter/BFRESERVE.php | 49 + .../Command/Redis/BloomFilter/BFSCANDUMP.php | 29 + .../predis/src/Command/Redis/COMMAND.php | 11 + .../predis/src/Command/Redis/CONFIG.php | 4 + .../src/Command/Redis/Container/ACL.php | 28 + .../Redis/Container/AbstractContainer.php | 2 +- .../Redis/Container/ContainerFactory.php | 29 +- .../Redis/Container/ContainerInterface.php | 6 +- .../Redis/Container/FunctionContainer.php | 10 +- .../Redis/Container/Json/JSONDEBUG.php | 27 + .../Redis/Container/Search/FTCONFIG.php | 29 + .../Redis/Container/Search/FTCURSOR.php | 29 + .../Redis/CountMinSketch/CMSINCRBY.php | 29 + .../Command/Redis/CountMinSketch/CMSINFO.php | 45 + .../Redis/CountMinSketch/CMSINITBYDIM.php | 28 + .../Redis/CountMinSketch/CMSINITBYPROB.php | 28 + .../Command/Redis/CountMinSketch/CMSMERGE.php | 42 + .../Command/Redis/CountMinSketch/CMSQUERY.php | 28 + .../src/Command/Redis/CuckooFilter/CFADD.php | 28 + .../Command/Redis/CuckooFilter/CFADDNX.php | 28 + .../Command/Redis/CuckooFilter/CFCOUNT.php | 29 + .../src/Command/Redis/CuckooFilter/CFDEL.php | 30 + .../Command/Redis/CuckooFilter/CFEXISTS.php | 28 + .../src/Command/Redis/CuckooFilter/CFINFO.php | 45 + .../Command/Redis/CuckooFilter/CFINSERT.php | 52 + .../Command/Redis/CuckooFilter/CFINSERTNX.php | 27 + .../Redis/CuckooFilter/CFLOADCHUNK.php | 29 + .../Command/Redis/CuckooFilter/CFMEXISTS.php | 28 + .../Command/Redis/CuckooFilter/CFRESERVE.php | 52 + .../Command/Redis/CuckooFilter/CFSCANDUMP.php | 29 + .../predis/src/Command/Redis/FCALL_RO.php | 41 + .../predis/src/Command/Redis/FUNCTIONS.php | 2 +- .../predis/src/Command/Redis/HGETALL.php | 4 + .../predis/src/Command/Redis/HRANDFIELD.php | 19 + .../predis/predis/src/Command/Redis/INFO.php | 30 + .../src/Command/Redis/Json/JSONARRAPPEND.php | 28 + .../src/Command/Redis/Json/JSONARRINDEX.php | 28 + .../src/Command/Redis/Json/JSONARRINSERT.php | 28 + .../src/Command/Redis/Json/JSONARRLEN.php | 28 + .../src/Command/Redis/Json/JSONARRPOP.php | 28 + .../src/Command/Redis/Json/JSONARRTRIM.php | 28 + .../src/Command/Redis/Json/JSONCLEAR.php | 28 + .../src/Command/Redis/Json/JSONDEBUG.php | 28 + .../predis/src/Command/Redis/Json/JSONDEL.php | 28 + .../src/Command/Redis/Json/JSONFORGET.php | 28 + .../predis/src/Command/Redis/Json/JSONGET.php | 57 + .../src/Command/Redis/Json/JSONMERGE.php | 29 + .../src/Command/Redis/Json/JSONMGET.php | 36 + .../src/Command/Redis/Json/JSONMSET.php | 28 + .../src/Command/Redis/Json/JSONNUMINCRBY.php | 28 + .../src/Command/Redis/Json/JSONOBJKEYS.php | 28 + .../src/Command/Redis/Json/JSONOBJLEN.php | 28 + .../src/Command/Redis/Json/JSONRESP.php | 28 + .../predis/src/Command/Redis/Json/JSONSET.php | 41 + .../src/Command/Redis/Json/JSONSTRAPPEND.php | 28 + .../src/Command/Redis/Json/JSONSTRLEN.php | 28 + .../src/Command/Redis/Json/JSONTOGGLE.php | 28 + .../src/Command/Redis/Json/JSONTYPE.php | 28 + .../predis/predis/src/Command/Redis/LCS.php | 4 + .../predis/src/Command/Redis/SHUTDOWN.php | 32 + .../predis/predis/src/Command/Redis/SORT.php | 6 +- .../src/Command/Redis/Search/FTAGGREGATE.php | 40 + .../src/Command/Redis/Search/FTALIASADD.php | 28 + .../src/Command/Redis/Search/FTALIASDEL.php | 28 + .../Command/Redis/Search/FTALIASUPDATE.php | 29 + .../src/Command/Redis/Search/FTALTER.php | 42 + .../src/Command/Redis/Search/FTCONFIG.php | 30 + .../src/Command/Redis/Search/FTCREATE.php | 47 + .../src/Command/Redis/Search/FTCURSOR.php | 34 + .../src/Command/Redis/Search/FTDICTADD.php | 28 + .../src/Command/Redis/Search/FTDICTDEL.php | 28 + .../src/Command/Redis/Search/FTDICTDUMP.php | 28 + .../src/Command/Redis/Search/FTDROPINDEX.php | 38 + .../src/Command/Redis/Search/FTEXPLAIN.php | 43 + .../src/Command/Redis/Search/FTINFO.php | 28 + .../src/Command/Redis/Search/FTPROFILE.php | 38 + .../src/Command/Redis/Search/FTSEARCH.php | 39 + .../src/Command/Redis/Search/FTSPELLCHECK.php | 38 + .../src/Command/Redis/Search/FTSUGADD.php | 39 + .../src/Command/Redis/Search/FTSUGDEL.php | 28 + .../src/Command/Redis/Search/FTSUGGET.php | 39 + .../src/Command/Redis/Search/FTSUGLEN.php | 28 + .../src/Command/Redis/Search/FTSYNDUMP.php | 28 + .../src/Command/Redis/Search/FTSYNUPDATE.php | 46 + .../src/Command/Redis/Search/FTTAGVALS.php | 28 + .../src/Command/Redis/TDigest/TDIGESTADD.php | 28 + .../Command/Redis/TDigest/TDIGESTBYRANK.php | 55 + .../Redis/TDigest/TDIGESTBYREVRANK.php | 55 + .../src/Command/Redis/TDigest/TDIGESTCDF.php | 57 + .../Command/Redis/TDigest/TDIGESTCREATE.php | 40 + .../src/Command/Redis/TDigest/TDIGESTINFO.php | 41 + .../src/Command/Redis/TDigest/TDIGESTMAX.php | 49 + .../Command/Redis/TDigest/TDIGESTMERGE.php | 43 + .../src/Command/Redis/TDigest/TDIGESTMIN.php | 49 + .../Command/Redis/TDigest/TDIGESTQUANTILE.php | 55 + .../src/Command/Redis/TDigest/TDIGESTRANK.php | 30 + .../Command/Redis/TDigest/TDIGESTRESET.php | 28 + .../Command/Redis/TDigest/TDIGESTREVRANK.php | 30 + .../Redis/TDigest/TDIGESTTRIMMED_MEAN.php | 50 + .../predis/predis/src/Command/Redis/TYPE.php | 22 + .../src/Command/Redis/TimeSeries/TSADD.php | 39 + .../src/Command/Redis/TimeSeries/TSALTER.php | 39 + .../src/Command/Redis/TimeSeries/TSCREATE.php | 39 + .../Command/Redis/TimeSeries/TSCREATERULE.php | 40 + .../src/Command/Redis/TimeSeries/TSDECRBY.php | 41 + .../src/Command/Redis/TimeSeries/TSDEL.php | 28 + .../Command/Redis/TimeSeries/TSDELETERULE.php | 28 + .../src/Command/Redis/TimeSeries/TSGET.php | 39 + .../src/Command/Redis/TimeSeries/TSINCRBY.php | 41 + .../src/Command/Redis/TimeSeries/TSINFO.php | 39 + .../src/Command/Redis/TimeSeries/TSMADD.php | 28 + .../src/Command/Redis/TimeSeries/TSMGET.php | 37 + .../src/Command/Redis/TimeSeries/TSMRANGE.php | 39 + .../Command/Redis/TimeSeries/TSMREVRANGE.php | 26 + .../Command/Redis/TimeSeries/TSQUERYINDEX.php | 28 + .../src/Command/Redis/TimeSeries/TSRANGE.php | 39 + .../Command/Redis/TimeSeries/TSREVRANGE.php | 26 + .../predis/src/Command/Redis/TopK/TOPKADD.php | 31 + .../src/Command/Redis/TopK/TOPKINCRBY.php | 30 + .../src/Command/Redis/TopK/TOPKINFO.php | 41 + .../src/Command/Redis/TopK/TOPKLIST.php | 68 + .../src/Command/Redis/TopK/TOPKQUERY.php | 29 + .../src/Command/Redis/TopK/TOPKRESERVE.php | 47 + .../predis/src/Command/Redis/WAITAOF.php | 29 + .../predis/src/Command/Redis/ZPOPMAX.php | 6 +- .../predis/src/Command/Redis/ZPOPMIN.php | 6 +- .../predis/src/Command/Redis/ZRANGE.php | 6 +- .../predis/src/Command/RedisFactory.php | 51 +- .../Functions/DumpStrategy.php | 26 + .../Functions/FlushStrategy.php | 32 + .../Functions/KillStrategy.php | 26 + .../Functions/ListStrategy.php | 36 + .../Functions/RestoreStrategy.php | 32 + .../Functions/StatsStrategy.php | 26 + .../Strategy/SubcommandStrategyResolver.php | 19 +- .../predis/src/Command/Traits/BitByte.php | 6 + .../Traits/BloomFilters/BucketSize.php | 57 + .../Command/Traits/BloomFilters/Capacity.php | 57 + .../src/Command/Traits/BloomFilters/Error.php | 57 + .../Command/Traits/BloomFilters/Expansion.php | 53 + .../src/Command/Traits/BloomFilters/Items.php | 45 + .../Traits/BloomFilters/MaxIterations.php | 57 + .../Command/Traits/BloomFilters/NoCreate.php | 49 + .../Command/Traits/Expire/ExpireOptions.php | 6 + .../predis/src/Command/Traits/Json/Indent.php | 54 + .../src/Command/Traits/Json/Newline.php | 54 + .../src/Command/Traits/Json/NxXxArgument.php | 64 + .../predis/src/Command/Traits/Json/Space.php | 54 + .../predis/predis/src/Command/Traits/Keys.php | 4 +- .../src/Command/Traits/With/WithScores.php | 4 +- .../src/Configuration/Option/Connections.php | 10 +- .../predis/src/Configuration/Options.php | 8 +- .../src/Connection/AbstractConnection.php | 13 + .../src/Connection/Cluster/PredisCluster.php | 5 +- .../src/Connection/Cluster/RedisCluster.php | 5 +- .../predis/predis/src/Connection/Factory.php | 11 + .../src/Connection/ParametersInterface.php | 7 +- .../predis/src/Connection/RelayConnection.php | 337 + .../predis/src/Connection/RelayMethods.php | 136 + .../Replication/SentinelReplication.php | 1 + .../src/Connection/StreamConnection.php | 9 +- .../predis/predis/src/Monitor/Consumer.php | 6 +- .../predis/predis/src/Pipeline/Pipeline.php | 2 +- .../predis/src/Pipeline/RelayAtomic.php | 69 + .../predis/src/Pipeline/RelayPipeline.php | 75 + .../predis/src/PubSub/AbstractConsumer.php | 10 +- .../predis/predis/src/PubSub/Consumer.php | 10 +- .../predis/src/PubSub/RelayConsumer.php | 114 + .../Response/Iterator/MultiBulkIterator.php | 10 +- .../src/Response/Iterator/MultiBulkTuple.php | 2 +- .../predis/predis/src/Session/Handler.php | 19 +- .../predis/src/Transaction/MultiExec.php | 44 +- core/vendor/psr/clock/CHANGELOG.md | 11 + core/vendor/psr/clock/LICENSE | 19 + core/vendor/psr/clock/README.md | 61 + core/vendor/psr/clock/composer.json | 21 + core/vendor/psr/clock/src/ClockInterface.php | 13 + core/vendor/psr/container/.gitignore | 3 - core/vendor/psr/event-dispatcher/.gitignore | 2 - core/vendor/seld/phar-utils/.gitignore | 1 - core/vendor/seld/signal-handler/.gitignore | 5 - .../console/Formatter/OutputFormatter.php | 11 +- .../console/Output/ConsoleSectionOutput.php | 15 +- core/vendor/symfony/error-handler/Debug.php | 1 - .../RegisterListenersPass.php | 6 +- core/vendor/symfony/finder/Finder.php | 4 +- .../Iterator/RecursiveDirectoryIterator.php | 36 +- .../http-foundation/File/UploadedFile.php | 4 +- .../symfony/http-foundation/Request.php | 52 +- .../symfony/http-foundation/Response.php | 2 +- .../symfony/http-foundation/ServerBag.php | 2 +- .../Storage/Handler/PdoSessionHandler.php | 4 +- .../Storage/Handler/SessionHandlerFactory.php | 13 +- .../http-foundation/StreamedResponse.php | 5 + .../RequestPayloadValueResolver.php | 12 +- .../DataCollector/DumpDataCollector.php | 4 +- ...RegisterControllerArgumentLocatorsPass.php | 8 +- .../vendor/symfony/http-kernel/HttpKernel.php | 20 +- core/vendor/symfony/http-kernel/Kernel.php | 6 +- .../Profiler/FileProfilerStorage.php | 16 +- core/vendor/symfony/http-kernel/composer.json | 6 +- core/vendor/symfony/mime/composer.json | 5 +- core/vendor/symfony/polyfill-ctype/LICENSE | 2 +- .../symfony/polyfill-ctype/composer.json | 2 +- .../symfony/polyfill-intl-grapheme/LICENSE | 2 +- .../polyfill-intl-grapheme/composer.json | 2 +- core/vendor/symfony/polyfill-intl-idn/Idn.php | 28 +- core/vendor/symfony/polyfill-intl-idn/LICENSE | 2 +- .../Resources/unidata/DisallowedRanges.php | 9 + .../Resources/unidata/Regex.php | 9 + .../symfony/polyfill-intl-idn/composer.json | 2 +- .../symfony/polyfill-intl-normalizer/LICENSE | 2 +- .../polyfill-intl-normalizer/composer.json | 2 +- core/vendor/symfony/polyfill-mbstring/LICENSE | 2 +- .../symfony/polyfill-mbstring/Mbstring.php | 87 +- .../Resources/unidata/caseFolding.php | 119 + .../symfony/polyfill-mbstring/bootstrap.php | 4 + .../symfony/polyfill-mbstring/bootstrap80.php | 4 + .../symfony/polyfill-mbstring/composer.json | 2 +- core/vendor/symfony/polyfill-php72/LICENSE | 2 +- .../symfony/polyfill-php72/composer.json | 2 +- core/vendor/symfony/polyfill-php73/LICENSE | 2 +- .../symfony/polyfill-php73/composer.json | 2 +- core/vendor/symfony/polyfill-php80/LICENSE | 2 +- .../symfony/polyfill-php80/composer.json | 2 +- core/vendor/symfony/polyfill-php81/LICENSE | 2 +- core/vendor/symfony/polyfill-php81/README.md | 1 + .../Resources/stubs/CURLStringFile.php | 51 + .../symfony/polyfill-php81/composer.json | 2 +- core/vendor/symfony/polyfill-php83/LICENSE | 2 +- core/vendor/symfony/polyfill-php83/Php83.php | 46 +- core/vendor/symfony/polyfill-php83/README.md | 6 + .../Resources/stubs/DateError.php | 16 + .../Resources/stubs/DateException.php | 16 + .../stubs/DateInvalidOperationException.php | 16 + .../stubs/DateInvalidTimeZoneException.php | 16 + .../DateMalformedIntervalStringException.php | 16 + .../DateMalformedPeriodStringException.php | 16 + .../stubs/DateMalformedStringException.php | 16 + .../Resources/stubs/DateObjectError.php | 16 + .../Resources/stubs/DateRangeError.php | 16 + .../Resources/stubs/Override.php | 20 + .../symfony/polyfill-php83/bootstrap.php | 20 + .../symfony/polyfill-php83/bootstrap81.php | 22 + .../symfony/polyfill-php83/composer.json | 5 +- core/vendor/symfony/process/Process.php | 2 +- .../Dumper/CompiledUrlMatcherDumper.php | 4 +- core/vendor/symfony/routing/composer.json | 3 +- .../string/Inflector/EnglishInflector.php | 9 + core/vendor/symfony/translation/composer.json | 1 + .../symfony/var-dumper/Caster/DateCaster.php | 2 +- .../symfony/var-dumper/Caster/SplCaster.php | 4 + .../symfony/var-dumper/Dumper/CliDumper.php | 3 + .../ContextProvider/SourceContextProvider.php | 2 +- .../symfony/var-dumper/Dumper/HtmlDumper.php | 4 +- core/vendor/symfony/var-dumper/composer.json | 2 + core/vendor/tracy/tracy/composer.json | 3 +- core/vendor/tracy/tracy/readme.md | 259 +- .../tracy/src/Bridges/Nette/MailSender.php | 10 +- .../src/Bridges/Nette/TracyExtension.php | 8 +- .../Tracy/BlueScreen/assets/section-cli.phtml | 10 +- .../tracy/src/Tracy/Debugger/Debugger.php | 3 +- .../src/Tracy/Debugger/ProductionStrategy.php | 5 +- .../tracy/tracy/src/Tracy/Dumper/Exposer.php | 2 +- core/vendor/webmozart/assert/CHANGELOG.md | 207 + core/vendor/webmozart/assert/LICENSE | 20 + core/vendor/webmozart/assert/README.md | 287 + core/vendor/webmozart/assert/composer.json | 43 + core/vendor/webmozart/assert/src/Assert.php | 2080 ++ .../assert/src/InvalidArgumentException.php | 16 + core/vendor/webmozart/assert/src/Mixin.php | 5089 +++++ 888 files changed, 42044 insertions(+), 17124 deletions(-) create mode 100644 core/vendor/bin/carbon.bat create mode 100644 core/vendor/bin/composer.bat create mode 100644 core/vendor/bin/doctrine-dbal.bat create mode 100644 core/vendor/bin/patch-type-declarations.bat create mode 100644 core/vendor/bin/var-dump-server.bat delete mode 100644 core/vendor/dmitry-suffi/redis-session-handler/.gitignore create mode 100644 core/vendor/doctrine/deprecations/phpstan.neon create mode 100644 core/vendor/doctrine/deprecations/psalm.xml create mode 100644 core/vendor/dragonmantank/cron-expression/CHANGELOG.md create mode 100644 core/vendor/dragonmantank/cron-expression/LICENSE create mode 100644 core/vendor/dragonmantank/cron-expression/README.md create mode 100644 core/vendor/dragonmantank/cron-expression/composer.json create mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/AbstractField.php create mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/CronExpression.php create mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php create mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php create mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactory.php create mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactoryInterface.php create mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/FieldInterface.php create mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/HoursField.php create mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/MinutesField.php create mode 100644 core/vendor/dragonmantank/cron-expression/src/Cron/MonthField.php delete mode 100644 core/vendor/guzzlehttp/promises/vendor-bin/php-cs-fixer/composer.json delete mode 100644 core/vendor/guzzlehttp/promises/vendor-bin/phpstan/composer.json delete mode 100644 core/vendor/guzzlehttp/promises/vendor-bin/psalm/composer.json create mode 100644 core/vendor/illuminate/console/Concerns/ConfiguresPrompts.php create mode 100644 core/vendor/illuminate/console/Scheduling/ScheduleInterruptCommand.php create mode 100644 core/vendor/illuminate/console/View/Components/Secret.php create mode 100644 core/vendor/illuminate/contracts/Database/Query/ConditionExpression.php create mode 100644 core/vendor/illuminate/database/Events/ModelPruningFinished.php create mode 100644 core/vendor/illuminate/database/Events/ModelPruningStarting.php create mode 100644 core/vendor/illuminate/database/UniqueConstraintViolationException.php create mode 100644 core/vendor/illuminate/routing/Events/PreparingResponse.php create mode 100644 core/vendor/illuminate/routing/Events/ResponsePrepared.php create mode 100644 core/vendor/illuminate/translation/CreatesPotentiallyTranslatedStrings.php create mode 100644 core/vendor/illuminate/validation/Rules/Can.php create mode 100644 core/vendor/laravel/prompts/LICENSE.md create mode 100644 core/vendor/laravel/prompts/README.md create mode 100644 core/vendor/laravel/prompts/composer.json create mode 100644 core/vendor/laravel/prompts/phpunit.xml create mode 100644 core/vendor/laravel/prompts/src/Concerns/Colors.php create mode 100644 core/vendor/laravel/prompts/src/Concerns/Cursor.php create mode 100644 core/vendor/laravel/prompts/src/Concerns/Erase.php create mode 100644 core/vendor/laravel/prompts/src/Concerns/Events.php create mode 100644 core/vendor/laravel/prompts/src/Concerns/FakesInputOutput.php create mode 100644 core/vendor/laravel/prompts/src/Concerns/Fallback.php create mode 100644 core/vendor/laravel/prompts/src/Concerns/Termwind.php create mode 100644 core/vendor/laravel/prompts/src/Concerns/Themes.php create mode 100644 core/vendor/laravel/prompts/src/Concerns/Truncation.php create mode 100644 core/vendor/laravel/prompts/src/Concerns/TypedValue.php create mode 100644 core/vendor/laravel/prompts/src/ConfirmPrompt.php create mode 100644 core/vendor/laravel/prompts/src/Key.php create mode 100644 core/vendor/laravel/prompts/src/MultiSelectPrompt.php create mode 100644 core/vendor/laravel/prompts/src/Note.php create mode 100644 core/vendor/laravel/prompts/src/Output/BufferedConsoleOutput.php create mode 100644 core/vendor/laravel/prompts/src/Output/ConsoleOutput.php create mode 100644 core/vendor/laravel/prompts/src/PasswordPrompt.php create mode 100644 core/vendor/laravel/prompts/src/Prompt.php create mode 100644 core/vendor/laravel/prompts/src/SearchPrompt.php create mode 100644 core/vendor/laravel/prompts/src/SelectPrompt.php create mode 100644 core/vendor/laravel/prompts/src/Spinner.php create mode 100644 core/vendor/laravel/prompts/src/SuggestPrompt.php create mode 100644 core/vendor/laravel/prompts/src/Terminal.php create mode 100644 core/vendor/laravel/prompts/src/TextPrompt.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/Concerns/DrawsBoxes.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/Concerns/DrawsScrollbars.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/ConfirmPromptRenderer.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/MultiSelectPromptRenderer.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/NoteRenderer.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/PasswordPromptRenderer.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/Renderer.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/SearchPromptRenderer.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/SelectPromptRenderer.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/SpinnerRenderer.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/SuggestPromptRenderer.php create mode 100644 core/vendor/laravel/prompts/src/Themes/Default/TextPromptRenderer.php create mode 100644 core/vendor/laravel/prompts/src/helpers.php create mode 100644 core/vendor/league/flysystem-local/FallbackMimeTypeDetector.php create mode 100644 core/vendor/league/flysystem-local/LocalFilesystemAdapter.php create mode 100644 core/vendor/league/flysystem-local/composer.json create mode 100644 core/vendor/league/flysystem/.dockerignore delete mode 100644 core/vendor/league/flysystem/CODE_OF_CONDUCT.md create mode 100644 core/vendor/league/flysystem/INFO.md delete mode 100644 core/vendor/league/flysystem/SECURITY.md delete mode 100644 core/vendor/league/flysystem/deprecations.md create mode 100644 core/vendor/league/flysystem/docker-compose.yml create mode 100644 core/vendor/league/flysystem/readme.md delete mode 100644 core/vendor/league/flysystem/src/Adapter/AbstractAdapter.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/AbstractFtpAdapter.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/CanOverwriteFiles.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/Ftp.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/Ftpd.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/Local.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/NullAdapter.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/Polyfill/StreamedCopyTrait.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/Polyfill/StreamedWritingTrait.php delete mode 100644 core/vendor/league/flysystem/src/Adapter/SynologyFtp.php delete mode 100644 core/vendor/league/flysystem/src/AdapterInterface.php create mode 100644 core/vendor/league/flysystem/src/CalculateChecksumFromStream.php create mode 100644 core/vendor/league/flysystem/src/ChecksumAlgoIsNotSupported.php create mode 100644 core/vendor/league/flysystem/src/ChecksumProvider.php delete mode 100644 core/vendor/league/flysystem/src/ConfigAwareTrait.php delete mode 100644 core/vendor/league/flysystem/src/ConnectionErrorException.php delete mode 100644 core/vendor/league/flysystem/src/ConnectionRuntimeException.php delete mode 100644 core/vendor/league/flysystem/src/Directory.php create mode 100644 core/vendor/league/flysystem/src/DirectoryAttributes.php create mode 100644 core/vendor/league/flysystem/src/DirectoryListing.php delete mode 100644 core/vendor/league/flysystem/src/Exception.php delete mode 100644 core/vendor/league/flysystem/src/File.php create mode 100644 core/vendor/league/flysystem/src/FileAttributes.php delete mode 100644 core/vendor/league/flysystem/src/FileExistsException.php delete mode 100644 core/vendor/league/flysystem/src/FileNotFoundException.php create mode 100644 core/vendor/league/flysystem/src/FilesystemAdapter.php delete mode 100644 core/vendor/league/flysystem/src/FilesystemInterface.php delete mode 100644 core/vendor/league/flysystem/src/FilesystemNotFoundException.php create mode 100644 core/vendor/league/flysystem/src/FilesystemOperationFailed.php create mode 100644 core/vendor/league/flysystem/src/FilesystemOperator.php create mode 100644 core/vendor/league/flysystem/src/FilesystemReader.php create mode 100644 core/vendor/league/flysystem/src/FilesystemWriter.php delete mode 100644 core/vendor/league/flysystem/src/Handler.php delete mode 100644 core/vendor/league/flysystem/src/InvalidRootException.php create mode 100644 core/vendor/league/flysystem/src/InvalidStreamProvided.php create mode 100644 core/vendor/league/flysystem/src/InvalidVisibilityProvided.php delete mode 100644 core/vendor/league/flysystem/src/NotSupportedException.php create mode 100644 core/vendor/league/flysystem/src/PathNormalizer.php create mode 100644 core/vendor/league/flysystem/src/PathPrefixer.php create mode 100644 core/vendor/league/flysystem/src/PathTraversalDetected.php delete mode 100644 core/vendor/league/flysystem/src/Plugin/AbstractPlugin.php delete mode 100644 core/vendor/league/flysystem/src/Plugin/EmptyDir.php delete mode 100644 core/vendor/league/flysystem/src/Plugin/ForcedCopy.php delete mode 100644 core/vendor/league/flysystem/src/Plugin/ForcedRename.php delete mode 100644 core/vendor/league/flysystem/src/Plugin/GetWithMetadata.php delete mode 100644 core/vendor/league/flysystem/src/Plugin/ListFiles.php delete mode 100644 core/vendor/league/flysystem/src/Plugin/ListPaths.php delete mode 100644 core/vendor/league/flysystem/src/Plugin/ListWith.php delete mode 100644 core/vendor/league/flysystem/src/Plugin/PluggableTrait.php delete mode 100644 core/vendor/league/flysystem/src/Plugin/PluginNotFoundException.php delete mode 100644 core/vendor/league/flysystem/src/PluginInterface.php create mode 100644 core/vendor/league/flysystem/src/PortableVisibilityGuard.php create mode 100644 core/vendor/league/flysystem/src/ProxyArrayAccessToProperties.php delete mode 100644 core/vendor/league/flysystem/src/ReadInterface.php delete mode 100644 core/vendor/league/flysystem/src/RootViolationException.php delete mode 100644 core/vendor/league/flysystem/src/SafeStorage.php create mode 100644 core/vendor/league/flysystem/src/StorageAttributes.php create mode 100644 core/vendor/league/flysystem/src/SymbolicLinkEncountered.php create mode 100644 core/vendor/league/flysystem/src/UnableToCheckDirectoryExistence.php create mode 100644 core/vendor/league/flysystem/src/UnableToCheckExistence.php create mode 100644 core/vendor/league/flysystem/src/UnableToCheckFileExistence.php create mode 100644 core/vendor/league/flysystem/src/UnableToCopyFile.php create mode 100644 core/vendor/league/flysystem/src/UnableToCreateDirectory.php create mode 100644 core/vendor/league/flysystem/src/UnableToDeleteDirectory.php create mode 100644 core/vendor/league/flysystem/src/UnableToDeleteFile.php create mode 100644 core/vendor/league/flysystem/src/UnableToGeneratePublicUrl.php create mode 100644 core/vendor/league/flysystem/src/UnableToGenerateTemporaryUrl.php create mode 100644 core/vendor/league/flysystem/src/UnableToListContents.php create mode 100644 core/vendor/league/flysystem/src/UnableToMountFilesystem.php create mode 100644 core/vendor/league/flysystem/src/UnableToMoveFile.php create mode 100644 core/vendor/league/flysystem/src/UnableToProvideChecksum.php create mode 100644 core/vendor/league/flysystem/src/UnableToReadFile.php create mode 100644 core/vendor/league/flysystem/src/UnableToResolveFilesystemMount.php create mode 100644 core/vendor/league/flysystem/src/UnableToRetrieveMetadata.php create mode 100644 core/vendor/league/flysystem/src/UnableToSetVisibility.php create mode 100644 core/vendor/league/flysystem/src/UnableToWriteFile.php create mode 100644 core/vendor/league/flysystem/src/UnixVisibility/PortableVisibilityConverter.php create mode 100644 core/vendor/league/flysystem/src/UnixVisibility/VisibilityConverter.php create mode 100644 core/vendor/league/flysystem/src/UnreadableFileEncountered.php delete mode 100644 core/vendor/league/flysystem/src/UnreadableFileException.php create mode 100644 core/vendor/league/flysystem/src/UrlGeneration/ChainedPublicUrlGenerator.php create mode 100644 core/vendor/league/flysystem/src/UrlGeneration/PrefixPublicUrlGenerator.php create mode 100644 core/vendor/league/flysystem/src/UrlGeneration/PublicUrlGenerator.php create mode 100644 core/vendor/league/flysystem/src/UrlGeneration/ShardedPrefixPublicUrlGenerator.php create mode 100644 core/vendor/league/flysystem/src/UrlGeneration/TemporaryUrlGenerator.php delete mode 100644 core/vendor/league/flysystem/src/Util.php delete mode 100644 core/vendor/league/flysystem/src/Util/ContentListingFormatter.php delete mode 100644 core/vendor/league/flysystem/src/Util/MimeType.php delete mode 100644 core/vendor/league/flysystem/src/Util/StreamHasher.php create mode 100644 core/vendor/league/flysystem/src/Visibility.php create mode 100644 core/vendor/league/flysystem/src/WhitespacePathNormalizer.php create mode 100644 core/vendor/league/mime-type-detection/src/ExtensionLookup.php create mode 100644 core/vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php create mode 100644 core/vendor/phpmailer/phpmailer/language/phpmailer.lang-si.php delete mode 100644 core/vendor/predis/predis/bin/create-command-test create mode 100644 core/vendor/predis/predis/docker/unstable_cluster/Dockerfile create mode 100644 core/vendor/predis/predis/docker/unstable_cluster/create_cluster.sh create mode 100644 core/vendor/predis/predis/docker/unstable_cluster/docker-compose.yml create mode 100644 core/vendor/predis/predis/docker/unstable_cluster/redis.conf create mode 100644 core/vendor/predis/predis/src/ClientConfiguration.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/AggregateArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/AlterArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/CommonArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/CreateArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/CursorArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/DropArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/ExplainArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/ProfileArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/AbstractField.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/FieldInterface.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/GeoField.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/NumericField.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/TagField.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/TextField.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/VectorField.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SearchArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SpellcheckArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SugAddArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SugGetArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/Search/SynUpdateArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/AddArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/AlterArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/CommonArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/CreateArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/DecrByArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/GetArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/IncrByArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/InfoArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/MGetArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/MRangeArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Argument/TimeSeries/RangeArguments.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/ACL.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFEXISTS.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFINFO.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFINSERT.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFLOADCHUNK.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFMADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFMEXISTS.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFRESERVE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFSCANDUMP.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Container/ACL.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Container/Json/JSONDEBUG.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Container/Search/FTCONFIG.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Container/Search/FTCURSOR.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINCRBY.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINFO.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYDIM.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYPROB.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSMERGE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSQUERY.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFADDNX.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFCOUNT.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFDEL.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFEXISTS.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINFO.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINSERT.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINSERTNX.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFLOADCHUNK.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFMEXISTS.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFRESERVE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFSCANDUMP.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/FCALL_RO.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONARRAPPEND.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONARRINDEX.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONARRINSERT.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONARRLEN.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONARRPOP.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONARRTRIM.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONCLEAR.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONDEBUG.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONDEL.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONFORGET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONGET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONMERGE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONMGET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONMSET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONNUMINCRBY.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONOBJKEYS.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONOBJLEN.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONRESP.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONSET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONSTRAPPEND.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONSTRLEN.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONTOGGLE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Json/JSONTYPE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTAGGREGATE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTALIASADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTALIASDEL.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTALIASUPDATE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTALTER.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTCONFIG.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTCREATE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTCURSOR.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTDICTADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTDICTDEL.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTDICTDUMP.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTDROPINDEX.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTEXPLAIN.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTINFO.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTPROFILE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTSEARCH.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTSPELLCHECK.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTSUGADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTSUGDEL.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTSUGGET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTSUGLEN.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTSYNDUMP.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTSYNUPDATE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/Search/FTTAGVALS.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTBYRANK.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTBYREVRANK.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTCDF.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTCREATE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTINFO.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTMAX.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTMERGE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTMIN.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTQUANTILE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTRANK.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTRESET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTREVRANK.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TDigest/TDIGESTTRIMMED_MEAN.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSALTER.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSCREATE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSCREATERULE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSDECRBY.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSDEL.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSDELETERULE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSGET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSINCRBY.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSINFO.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMGET.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMRANGE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMREVRANGE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSQUERYINDEX.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSRANGE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSREVRANGE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TopK/TOPKADD.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TopK/TOPKINCRBY.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TopK/TOPKINFO.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TopK/TOPKLIST.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TopK/TOPKQUERY.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/TopK/TOPKRESERVE.php create mode 100644 core/vendor/predis/predis/src/Command/Redis/WAITAOF.php create mode 100644 core/vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DumpStrategy.php create mode 100644 core/vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/FlushStrategy.php create mode 100644 core/vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/KillStrategy.php create mode 100644 core/vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/ListStrategy.php create mode 100644 core/vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/RestoreStrategy.php create mode 100644 core/vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/StatsStrategy.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/BloomFilters/BucketSize.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/BloomFilters/Capacity.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/BloomFilters/Error.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/BloomFilters/Expansion.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/BloomFilters/Items.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/BloomFilters/MaxIterations.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/BloomFilters/NoCreate.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/Json/Indent.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/Json/Newline.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/Json/NxXxArgument.php create mode 100644 core/vendor/predis/predis/src/Command/Traits/Json/Space.php create mode 100644 core/vendor/predis/predis/src/Connection/RelayConnection.php create mode 100644 core/vendor/predis/predis/src/Connection/RelayMethods.php create mode 100644 core/vendor/predis/predis/src/Pipeline/RelayAtomic.php create mode 100644 core/vendor/predis/predis/src/Pipeline/RelayPipeline.php create mode 100644 core/vendor/predis/predis/src/PubSub/RelayConsumer.php create mode 100644 core/vendor/psr/clock/CHANGELOG.md create mode 100644 core/vendor/psr/clock/LICENSE create mode 100644 core/vendor/psr/clock/README.md create mode 100644 core/vendor/psr/clock/composer.json create mode 100644 core/vendor/psr/clock/src/ClockInterface.php delete mode 100644 core/vendor/psr/container/.gitignore delete mode 100644 core/vendor/psr/event-dispatcher/.gitignore delete mode 100644 core/vendor/seld/phar-utils/.gitignore delete mode 100644 core/vendor/seld/signal-handler/.gitignore create mode 100644 core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php create mode 100644 core/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php create mode 100644 core/vendor/symfony/polyfill-php83/Resources/stubs/DateError.php create mode 100644 core/vendor/symfony/polyfill-php83/Resources/stubs/DateException.php create mode 100644 core/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php create mode 100644 core/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php create mode 100644 core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php create mode 100644 core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php create mode 100644 core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php create mode 100644 core/vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php create mode 100644 core/vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php create mode 100644 core/vendor/symfony/polyfill-php83/Resources/stubs/Override.php create mode 100644 core/vendor/symfony/polyfill-php83/bootstrap81.php create mode 100644 core/vendor/webmozart/assert/CHANGELOG.md create mode 100644 core/vendor/webmozart/assert/LICENSE create mode 100644 core/vendor/webmozart/assert/README.md create mode 100644 core/vendor/webmozart/assert/composer.json create mode 100644 core/vendor/webmozart/assert/src/Assert.php create mode 100644 core/vendor/webmozart/assert/src/InvalidArgumentException.php create mode 100644 core/vendor/webmozart/assert/src/Mixin.php diff --git a/core/composer.json b/core/composer.json index 3699c3c762..b294dc7bd1 100644 --- a/core/composer.json +++ b/core/composer.json @@ -27,48 +27,49 @@ ], "require": { "php": ">=8.1", - "ext-SimpleXML": "*", + "composer/composer": "*", + "dmitry-suffi/redis-session-handler": "*", + "doctrine/dbal": "3.*", + "dragonmantank/cron-expression": "^3.3", + "evolutioncms-services/document-manager": "1.*", + "evolutioncms-services/user-manager": "1.*", + "evolutioncms/salo2": "*", "ext-dom": "*", "ext-iconv": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", - "lib-iconv": "*", - "lib-libxml": "*", - "doctrine/dbal": "3.*", - "phpoption/phpoption": "*", - "vlucas/phpdotenv": "^5.2", + "ext-SimpleXML": "*", "guzzlehttp/guzzle": "^7.0.1", - "composer/composer": "*", "illuminate/cache": "10.*", - "illuminate/redis": "10.*", "illuminate/config": "10.*", "illuminate/console": "10.*", "illuminate/container": "10.*", "illuminate/database": "10.*", "illuminate/events": "10.*", "illuminate/filesystem": "10.*", + "illuminate/http": "10.*", "illuminate/log": "10.*", "illuminate/pagination": "10.*", + "illuminate/redis": "10.*", "illuminate/routing": "10.*", "illuminate/support": "10.*", "illuminate/translation": "10.*", - "illuminate/view": "10.*", "illuminate/validation": "10.*", - "illuminate/http": "10.*", - "league/flysystem": "^1.0.8", + "illuminate/view": "10.*", + "james-heinrich/phpthumb": "1.*", + "league/flysystem": "^3", + "lib-iconv": "*", + "lib-libxml": "*", "phpmailer/phpmailer": "6.*", - "tracy/tracy": "2.10.*", - "wikimedia/composer-merge-plugin": "2.*", - "symfony/process": "^6.0", - "dmitry-suffi/redis-session-handler": "*", - "rosell-dk/webp-convert": "*", + "phpoption/phpoption": "*", "predis/predis": "*", - "james-heinrich/phpthumb": "1.*", - "evolutioncms-services/user-manager": "1.*", - "evolutioncms-services/document-manager": "1.*", - "evolutioncms/salo2": "*", - "simplepie/simplepie": "1.*" + "rosell-dk/webp-convert": "*", + "simplepie/simplepie": "1.*", + "symfony/process": "^6.0", + "tracy/tracy": "2.10.*", + "vlucas/phpdotenv": "^5.2", + "wikimedia/composer-merge-plugin": "2.*" }, "require-dev": { "roave/security-advisories": "dev-master" diff --git a/core/composer.lock b/core/composer.lock index 922b221a0b..5687cd3796 100644 --- a/core/composer.lock +++ b/core/composer.lock @@ -1,8357 +1,8697 @@ { - "_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 + "_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": "b2dd4bc0a9d428c1a7b24991e42c8bfe", + "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.6", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "90d087e988ff194065333d16bc5cf649872d9cdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/90d087e988ff194065333d16bc5cf649872d9cdb", + "reference": "90d087e988ff194065333d16bc5cf649872d9cdb", + "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.6" + }, + "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-06-06T12:02:59+00:00" + }, + { + "name": "composer/class-map-generator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/composer/class-map-generator.git", + "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/953cc4ea32e0c31f2185549c7d216d7921f03da9", + "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9", + "shasum": "" + }, + "require": { + "composer/pcre": "^2.1 || ^3.1", + "php": "^7.2 || ^8.0", + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" + }, + "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.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": "2023-06-30T13:58:57+00:00" + }, + { + "name": "composer/composer", + "version": "2.5.8", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "4c516146167d1392c8b9b269bb7c24115d262164" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/4c516146167d1392c8b9b269bb7c24115d262164", + "reference": "4c516146167d1392c8b9b269bb7c24115d262164", + "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.8" + }, + "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-06-09T15:13:21+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.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "63646ffd71d1676d2f747f871be31b7e921c7864" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/63646ffd71d1676d2f747f871be31b7e921c7864", + "reference": "63646ffd71d1676d2f747f871be31b7e921c7864", + "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": "12.0.0", + "fig/log-test": "^1", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.10.29", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "9.6.9", + "psalm/plugin-phpunit": "0.18.4", + "slevomat/coding-standard": "8.13.1", + "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.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%2Fdbal", + "type": "tidelift" + } + ], + "time": "2023-08-17T05:38:17+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.1.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "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.1" + }, + "time": "2023-06-03T09:27:29+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.8", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^11.0", + "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 || ^5.4" + }, + "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.8" + }, + "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": "2023-06-16T13:40:37+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": "dragonmantank/cron-expression", + "version": "v3.3.3", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2023-08-10T19:36:49+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.8.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", + "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.8.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-08-27T10:20:53+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", + "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.1" + }, + "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-08-03T15:11:55+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.6.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "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.6.1" + }, + "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-08-27T10:13:57+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/61bf437fc2197f587f6857d3ff903a24f1731b5d", + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "phpunit/phpunit": "^8.5.19 || ^9.5.8", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "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.2" + }, + "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": "2023-08-27T10:19:19+00:00" + }, + { + "name": "illuminate/bus", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/bus.git", + "reference": "aba48b9b7b9266a62b8e5ece47919533b3d49de7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/bus/zipball/aba48b9b7b9266a62b8e5ece47919533b3d49de7", + "reference": "aba48b9b7b9266a62b8e5ece47919533b3d49de7", + "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-08-27T20:33:50+00:00" + }, + { + "name": "illuminate/cache", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/cache.git", + "reference": "f86b529f8c0921d56adb42f37fb5e022110bba1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/cache/zipball/f86b529f8c0921d56adb42f37fb5e022110bba1e", + "reference": "f86b529f8c0921d56adb42f37fb5e022110bba1e", + "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-07-27T14:06:46+00:00" + }, + { + "name": "illuminate/collections", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/collections.git", + "reference": "f494398dbaaead9e5ff16a18002d11634e8358e6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/collections/zipball/f494398dbaaead9e5ff16a18002d11634e8358e6", + "reference": "f494398dbaaead9e5ff16a18002d11634e8358e6", + "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-08-11T14:48:51+00:00" + }, + { + "name": "illuminate/conditionable", + "version": "v10.21.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.21.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.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/console.git", + "reference": "08acf79af3f2f0ba1c61ac37360b24710d7c6b88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/console/zipball/08acf79af3f2f0ba1c61ac37360b24710d7c6b88", + "reference": "08acf79af3f2f0ba1c61ac37360b24710d7c6b88", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0", + "illuminate/contracts": "^10.0", + "illuminate/macroable": "^10.0", + "illuminate/support": "^10.0", + "illuminate/view": "^10.0", + "laravel/prompts": "^0.1", + "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-08-22T13:18:30+00:00" + }, + { + "name": "illuminate/container", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/container.git", + "reference": "ddc26273085fad3c471b2602ad820e0097ff7939" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/container/zipball/ddc26273085fad3c471b2602ad820e0097ff7939", + "reference": "ddc26273085fad3c471b2602ad820e0097ff7939", + "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-06-18T09:12:03+00:00" + }, + { + "name": "illuminate/contracts", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/contracts.git", + "reference": "eb1a7e72e159136a832f2c0467de5570bdc208ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/eb1a7e72e159136a832f2c0467de5570bdc208ae", + "reference": "eb1a7e72e159136a832f2c0467de5570bdc208ae", + "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-07-26T21:27:34+00:00" + }, + { + "name": "illuminate/database", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/database.git", + "reference": "d15f10d02bbfecf144366d63e3c13d804b64eae6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/database/zipball/d15f10d02bbfecf144366d63e3c13d804b64eae6", + "reference": "d15f10d02bbfecf144366d63e3c13d804b64eae6", + "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-08-29T13:06:25+00:00" + }, + { + "name": "illuminate/events", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/events.git", + "reference": "e8cbfa31e1ada8d178ffcd7a5e26e101ec280c59" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/events/zipball/e8cbfa31e1ada8d178ffcd7a5e26e101ec280c59", + "reference": "e8cbfa31e1ada8d178ffcd7a5e26e101ec280c59", + "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-08-11T15:02:04+00:00" + }, + { + "name": "illuminate/filesystem", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/filesystem.git", + "reference": "da2619dd556b61e4c76c062c8acff98bc5bac3e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/filesystem/zipball/da2619dd556b61e4c76c062c8acff98bc5bac3e8", + "reference": "da2619dd556b61e4c76c062c8acff98bc5bac3e8", + "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-08-25T18:39:53+00:00" + }, + { + "name": "illuminate/http", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/http.git", + "reference": "52cc8f45705109816f4f9b9b8db615c6a5a8400d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/http/zipball/52cc8f45705109816f4f9b9b8db615c6a5a8400d", + "reference": "52cc8f45705109816f4f9b9b8db615c6a5a8400d", + "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-08-23T18:59:47+00:00" + }, + { + "name": "illuminate/log", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/log.git", + "reference": "9cff51ef5d0014e4ffe986359add45342adbf0a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/log/zipball/9cff51ef5d0014e4ffe986359add45342adbf0a8", + "reference": "9cff51ef5d0014e4ffe986359add45342adbf0a8", + "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-07-08T20:34:59+00:00" + }, + { + "name": "illuminate/macroable", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/macroable.git", + "reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/macroable/zipball/dff667a46ac37b634dcf68909d9d41e94dc97c27", + "reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27", + "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-06-05T12:46:42+00:00" + }, + { + "name": "illuminate/pagination", + "version": "v10.21.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.21.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.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/redis.git", + "reference": "896a0f1940147417f8ce88cced703691bc5548b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/redis/zipball/896a0f1940147417f8ce88cced703691bc5548b0", + "reference": "896a0f1940147417f8ce88cced703691bc5548b0", + "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-08-02T14:11:43+00:00" + }, + { + "name": "illuminate/routing", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/routing.git", + "reference": "188288e6e4184f41aa496f5dcee6da2913bebe6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/routing/zipball/188288e6e4184f41aa496f5dcee6da2913bebe6d", + "reference": "188288e6e4184f41aa496f5dcee6da2913bebe6d", + "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-08-27T20:33:50+00:00" + }, + { + "name": "illuminate/session", + "version": "v10.21.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.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/support.git", + "reference": "73bf6767ecac70d02ab70e655fc7bfad3b812d69" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/support/zipball/73bf6767ecac70d02ab70e655fc7bfad3b812d69", + "reference": "73bf6767ecac70d02ab70e655fc7bfad3b812d69", + "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.67", + "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-08-25T14:28:45+00:00" + }, + { + "name": "illuminate/translation", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/translation.git", + "reference": "242fb14ad898cd51a50a33956c249fe43548930f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/translation/zipball/242fb14ad898cd51a50a33956c249fe43548930f", + "reference": "242fb14ad898cd51a50a33956c249fe43548930f", + "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-06-27T13:25:34+00:00" + }, + { + "name": "illuminate/validation", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/validation.git", + "reference": "2b61d283b463f69094874717526155bb2aef2642" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/validation/zipball/2b61d283b463f69094874717526155bb2aef2642", + "reference": "2b61d283b463f69094874717526155bb2aef2642", + "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-08-28T14:25:12+00:00" + }, + { + "name": "illuminate/view", + "version": "v10.21.0", + "source": { + "type": "git", + "url": "https://github.com/illuminate/view.git", + "reference": "953183a224c659240ff8956bae58df4b456462a3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/illuminate/view/zipball/953183a224c659240ff8956bae58df4b456462a3", + "reference": "953183a224c659240ff8956bae58df4b456462a3", + "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-08-28T13:34:15+00:00" + }, + { + "name": "james-heinrich/phpthumb", + "version": "v1.7.21", + "source": { + "type": "git", + "url": "https://github.com/JamesHeinrich/phpThumb.git", + "reference": "7ee966b38ddd7eb4d8091389aa514604710711c8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/JamesHeinrich/phpThumb/zipball/7ee966b38ddd7eb4d8091389aa514604710711c8", + "reference": "7ee966b38ddd7eb4d8091389aa514604710711c8", + "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.21" + }, + "time": "2023-07-14T21:25:25+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": "laravel/prompts", + "version": "v0.1.6", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "b514c5620e1b3b61221b0024dc88def26d9654f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/b514c5620e1b3b61221b0024dc88def26d9654f4", + "reference": "b514c5620e1b3b61221b0024dc88def26d9654f4", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.6" + }, + "time": "2023-08-18T13:32:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.15.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "a141d430414fcb8bf797a18716b09f759a385bed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a141d430414fcb8bf797a18716b09f759a385bed", + "reference": "a141d430414fcb8bf797a18716b09f759a385bed", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.220.0", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.15.1" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-05-04T09:04:26+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.15.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/543f64c397fefdf9cfeac443ffb6beff602796b3", + "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-local/issues", + "source": "https://github.com/thephpleague/flysystem-local/tree/3.15.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-05-02T20:02:14+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.13.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/a6dfb1194a2946fcdc1f38219445234f65b35c96", + "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" + }, + "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.13.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2023-08-05T12:09:49+00:00" + }, + { + "name": "monolog/monolog", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "e2392369686d420ca32df3803de28b5d6f76867d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d", + "reference": "e2392369686d420ca32df3803de28b5d6f76867d", + "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.0", + "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": "^10.1", + "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.4.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-06-21T08:46:11+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.69.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4308217830e4ca445583a37d1bf4aff4153fa81c", + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "provide": { + "psr/clock-implementation": "1.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-08-03T09:00:52+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.1", + "source": { + "type": "git", + "url": "https://github.com/PHPMailer/PHPMailer.git", + "reference": "e88da8d679acc3824ff231fdc553565b802ac016" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e88da8d679acc3824ff231fdc553565b802ac016", + "reference": "e88da8d679acc3824ff231fdc553565b802ac016", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", + "php": ">=5.5.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "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.2", + "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.1" + }, + "funding": [ + { + "url": "https://github.com/Synchro", + "type": "github" + } + ], + "time": "2023-08-29T08:26:30+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.2.1", + "source": { + "type": "git", + "url": "https://github.com/predis/predis.git", + "reference": "5f2b410a74afaff296a87a494e4c5488cf9fab57" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/predis/predis/zipball/5f2b410a74afaff296a87a494e4c5488cf9fab57", + "reference": "5f2b410a74afaff296a87a494e4c5488cf9fab57", + "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" + }, + "suggest": { + "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" + }, + "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.2.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/tillkruss", + "type": "github" + } + ], + "time": "2023-08-15T23:01:46+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/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+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.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "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.4" + }, + "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-08-16T10:10:12+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.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a", + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a", + "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.2" + }, + "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-07-16T17:05:46+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.3.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "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.2" + }, + "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-07-06T06:56:43+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.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "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.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-06-01T08:30:39+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "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.3" + }, + "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-07-31T08:31:44+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844", + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844", + "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.4" + }, + "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-08-22T08:20:46+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", + "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.3.4", + "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.4", + "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.4", + "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.4" + }, + "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-08-26T13:54:49+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/9a0cbd52baa5ba5a5b1f0cacc59466f194730f98", + "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "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.13|>=6.3,<6.3.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.13|^6.3.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.3" + }, + "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-07-31T07:08:24+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-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.28.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-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "875e90aeea2777b6f135677f618529449334a612" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-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.28.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-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "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.28-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.28.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-01-26T09:30:37+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-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.28.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-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "42292d99c55abe617799667f454222c54c60e229" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-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.28.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-07-28T09:04:16+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-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.28.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-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-php73", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-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.28.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-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-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.28.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-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-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.28.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-01-26T09:26:14+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.28.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.28-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "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.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.28.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-08-16T06:22:46+00:00" + }, + { + "name": "symfony/process", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "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.4" + }, + "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-08-07T10:39:22+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a", + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "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.3" + }, + "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-07-31T07:08:24+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.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "53d1a83225002635bca3482fcbf963001313fb68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", + "reference": "53d1a83225002635bca3482fcbf963001313fb68", + "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.2" + }, + "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-07-05T08:41:27+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.3.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "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.3" + }, + "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-07-31T07:08:24+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" }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { + { + "name": "symfony/var-dumper", + "version": "v6.3.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45", + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45", + "shasum": "" + }, + "require": { "php": ">=8.1", - "ext-simplexml": "*", - "ext-dom": "*", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/http-kernel": "^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.4" + }, + "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-08-24T14:51:05+00:00" + }, + { + "name": "tracy/tracy", + "version": "v2.10.3", + "source": { + "type": "git", + "url": "https://github.com/nette/tracy.git", + "reference": "ec6637866d6836ef6f8de2bab63ae7708b23bcd7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/tracy/zipball/ec6637866d6836ef6f8de2bab63ae7708b23bcd7", + "reference": "ec6637866d6836ef6f8de2bab63ae7708b23bcd7", + "shasum": "" + }, + "require": { "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "lib-iconv": "*", - "lib-libxml": "*" + "ext-session": "*", + "php": ">=8.0 <8.4" + }, + "conflict": { + "nette/di": "<3.0" + }, + "require-dev": { + "latte/latte": "^2.5", + "nette/di": "^3.0", + "nette/http": "^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.3" + }, + "time": "2023-07-30T13:56:20+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" }, - "platform-dev": [], - "plugin-api-version": "2.3.0" + { + "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": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, + { + "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": "c16c8b67835bc384c40b9f282b3a49a6f4cb5124" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/c16c8b67835bc384c40b9f282b3a49a6f4cb5124", + "reference": "c16c8b67835bc384c40b9f282b3a49a6f4cb5124", + "shasum": "" + }, + "conflict": { + "3f/pygmentize": "<1.2", + "admidio/admidio": "<4.2.11", + "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", + "aheinze/cockpit": "<2.2", + "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", + "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.2|>=2,<2.2.5", + "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", + "artesaos/seotools": "<0.17.2", + "asymmetricrypt/asymmetricrypt": "<9.9.99", + "athlon1600/php-proxy": "<=5.1", + "athlon1600/php-proxy-app": "<=3", + "austintoddj/canvas": "<=3.4.2", + "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", + "backpack/crud": "<3.4.9", + "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.1", + "billz/raspap-webgui": "<=2.9.2", + "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.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", + "cardgate/magento2": "<2.0.33", + "cardgate/woocommerce": "<=3.1.15", + "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.0.0-beta1", + "cesnet/simplesamlphp-module-proxystatistics": "<3.1", + "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "cockpit-hq/cockpit": "<=2.6.3", + "codeception/codeception": "<3.1.3|>=4,<4.1.22", + "codeigniter/framework": "<3.1.9", + "codeigniter4/framework": "<4.3.5", + "codeigniter4/shield": "<1.0.0.0-beta4", + "codiad/codiad": "<=2.8.4", + "composer/composer": "<1.10.26|>=2,<2.2.12|>=2.3,<2.3.5", + "concrete5/concrete5": "<9.2", + "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.42|>=4.10,<4.13.28|>=5,<5.1.10", + "contao/listing-bundle": ">=4,<4.4.8", + "contao/managed-edition": "<=1.5", + "cosenary/instagram": "<=2.3", + "craftcms/cms": "<=4.4.14", + "croogo/croogo": "<4", + "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", + "dcat/laravel-admin": "<=2.1.3.0-beta", + "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", + "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", + "desperado/xml-bundle": "<=0.1.7", + "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", + "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": ">=6,<6.38|>=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": "<2.0.7", + "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": "<2.2.3|==3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", + "ezsystems/ez-support-tools": ">=2.2,<2.2.3", + "ezsystems/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", + "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", + "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.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=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-dev", + "ezsystems/ezplatform-user": ">=1,<1.0.1", + "ezsystems/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.30", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.06,<=2019.03.5.1", + "ezsystems/platform-ui-assets-bundle": ">=4.2,<4.2.3", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=2.5,<2.5.15", + "ezyang/htmlpurifier": "<4.1.1", + "facade/ignition": "<1.16.15|>=2,<2.4.2|>=2.5,<2.5.2", + "facturascripts/facturascripts": "<=2022.08", + "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.8", + "flarum/framework": "<1.8", + "flarum/mentions": "<1.6.3", + "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", + "flarum/tags": "<=0.1.0.0-beta13", + "fluidtypo3/vhs": "<5.1.1", + "fof/byobu": ">=0.3.0.0-beta2,<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", + "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", + "froala/wysiwyg-editor": "<3.2.7", + "froxlor/froxlor": "<2.1", + "fuel/core": "<1.8.1", + "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", + "gaoming13/wechat-php-sdk": "<=1.10.2", + "genix/cms": "<=1.1.11", + "getgrav/grav": "<=1.7.42.1", + "getkirby/cms": "<3.5.8.3-dev|>=3.6,<3.6.6.3-dev|>=3.7,<3.7.5.2-dev|>=3.8,<3.8.4.1-dev|>=3.9,<3.9.6", + "getkirby/kirby": "<=2.5.12", + "getkirby/panel": "<2.5.14", + "getkirby/starterkit": "<=3.7.0.2", + "gilacms/gila": "<=1.11.4", + "gleez/cms": "<=1.2", + "globalpayments/php-sdk": "<2", + "gogentooss/samlbase": "<1.2.7", + "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", + "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", + "harvesthq/chosen": "<1.8.7", + "helloxz/imgurl": "<=2.31", + "hhxsv5/laravel-s": "<3.7.36", + "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.5", + "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.1", + "in2code/ipandlanguageredirect": "<5.1.2", + "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", + "jcbrand/converse.js": "<3.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/framework": ">=2.5.4,<=3.8.12", + "joomla/input": ">=2,<2.0.2", + "joomla/joomla-cms": "<3.9.12", + "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", + "khodakhah/nodcms": "<=3", + "kimai/kimai": "<1.1", + "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", + "klaviyo/magento2-extension": ">=1,<3", + "knplabs/knp-snappy": "<1.4.2", + "kohana/core": "<3.3.3", + "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.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", + "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.44|>=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", + "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", + "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", + "librenms/librenms": "<2017.08.18", + "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.4", + "magento/magento1ce": "<1.9.4.3-dev", + "magento/magento1ee": ">=1,<1.14.4.3-dev", + "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2.0-patch2", + "maikuolan/phpmussel": ">=1,<1.6", + "mantisbt/mantisbt": "<=2.25.5", + "marcwillmann/turn": "<0.3.3", + "matyhtf/framework": "<3.0.6", + "mautic/core": "<4.3", + "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", + "mediawiki/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.0-patch", + "mojo42/jirafeau": "<4.4", + "monolog/monolog": ">=1.8,<1.12", + "moodle/moodle": "<4.2.0.0-RC2-dev|==4.2", + "movim/moxl": ">=0.8,<=0.10", + "mpdf/mpdf": "<=7.1.7", + "mustache/mustache": ">=2,<2.14.1", + "namshi/jose": "<2.2", + "neoan3-apps/template": "<1.1.1", + "neorazorx/facturascripts": "<2022.04", + "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.10", + "notrinos/notrinos-erp": "<=0.7", + "noumo/easyii": "<=0.9", + "nukeviet/nukeviet": "<4.5.02", + "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.0.469|==1.0.469|==1.0.471|==1.1.1", + "october/october": "<=3.4.4", + "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", + "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", + "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", + "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", + "oxid-esales/oxideshop-ce": "<4.5", + "packbackbooks/lti-1-3-php-library": "<5", + "padraic/humbug_get_contents": "<1.1.2", + "pagarme/pagarme-php": "<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", + "pear/pear": "<=1.10.1", + "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.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.6", + "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", + "pi/pi": "<=2.5", + "pimcore/admin-ui-classic-bundle": "<1.0.3", + "pimcore/customer-management-framework-bundle": "<3.4.2", + "pimcore/data-hub": "<1.2.4", + "pimcore/perspective-editor": "<1.5.1", + "pimcore/pimcore": "<10.6.8", + "pixelfed/pixelfed": "<=0.11.4", + "pocketmine/bedrock-protocol": "<8.0.2", + "pocketmine/pocketmine-mp": "<4.22.3|>=5,<5.2.1", + "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.1", + "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.0.0.0-alpha1,<=2.0.0.0-alpha7", + "propel/propel1": ">=1,<=1.7.1", + "pterodactyl/panel": "<1.7", + "ptheofan/yii2-statemachine": ">=2", + "ptrofimov/beanstalk_console": "<1.7.14", + "pusher/pusher-php-server": "<2.2.1", + "pwweb/laravel-core": "<=0.3.6.0-beta", + "pyrocms/pyrocms": "<=3.9.1", + "rainlab/debugbar-plugin": "<3.1", + "rainlab/user-plugin": "<=1.4.5", + "rankmath/seo-by-rank-math": "<=1.0.95", + "rap2hpoutre/laravel-log-viewer": "<0.13", + "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.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": "<3.26|>=4,<4.11", + "sensiolabs/connect": "<4.2.3", + "serluck/phpwhois": "<=4.2.6", + "sfroemken/url_redirect": "<=1.2.1", + "sheng/yiicms": "<=1.2", + "shopware/core": "<=6.4.20", + "shopware/platform": "<=6.4.20", + "shopware/production": "<=6.3.5.2", + "shopware/shopware": "<=5.7.17", + "shopware/storefront": "<=6.4.8.1", + "shopxo/shopxo": "<2.2.6", + "showdoc/showdoc": "<2.10.4", + "silverstripe-australia/advancedreports": ">=1,<=2", + "silverstripe/admin": "<1.13.6", + "silverstripe/assets": ">=1,<1.11.1", + "silverstripe/cms": "<4.11.3", + "silverstripe/comments": ">=1.3,<1.9.99|>=2,<2.9.99|>=3,<3.1.1", + "silverstripe/forum": "<=0.6.1|>=0.7,<=0.7.3", + "silverstripe/framework": "<4.13.14|>=5,<5.0.13", + "silverstripe/graphql": "<3.5.2|>=4.0.0.0-alpha1,<4.0.0.0-alpha2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3", + "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", + "silverstripe/recipe-cms": ">=4.5,<4.5.3", + "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", + "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.15.4|>=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", + "sjbr/sr-freecap": "<=2.5.2", + "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", + "slim/slim": "<2.6", + "slub/slub-events": "<3.0.3", + "smarty/smarty": "<3.1.48|>=4,<4.3.1", + "snipe/snipe-it": "<=6.0.14", + "socalnick/scn-social-auth": "<1.15.2", + "socialiteproviders/steam": "<1.1", + "spatie/browsershot": "<3.57.4", + "spipu/html2pdf": "<5.2.4", + "spoon/library": "<1.4.1", + "spoonity/tcpdf": "<6.2.22", + "squizlabs/php_codesniffer": ">=1,<2.8.1|>=3,<3.0.1", + "ssddanbrown/bookstack": "<22.02.3", + "statamic/cms": "<4.10", + "stormpath/sdk": "<9.9.99", + "studio-42/elfinder": "<2.1.62", + "subhh/libconnect": "<7.0.8|>=8,<8.1", + "subrion/cms": "<=4.2.1", + "sukohi/surpass": "<1", + "sulu/sulu": "<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8|==2.4.0.0-RC1|>=2.5,<2.5.10", + "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", + "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": "<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": "<0.11.5|>=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,<2.1.3", + "theonedemon/phpwhois": "<=4.2.5", + "thinkcmf/thinkcmf": "<=5.1.7", + "thorsten/phpmyfaq": "<3.2.0.0-beta2", + "tikiwiki/tiki-manager": "<=17.1", + "tinymce/tinymce": "<5.10.7|>=6,<6.3.1", + "tinymighty/wiki-seo": "<1.2.2", + "titon/framework": "<9.9.99", + "tobiasbg/tablepress": "<=2.0.0.0-RC1", + "topthink/framework": "<6.0.14", + "topthink/think": "<=6.1.1", + "topthink/thinkphp": "<=3.2.3", + "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", + "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": "<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.42|>=10,<10.4.39|>=11,<11.5.30|>=12,<12.4.4", + "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", + "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", + "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.1|>=2,<2.1.2", + "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", + "waldhacker/hcaptcha": "<2.1.2", + "wallabag/tcpdf": "<6.2.22", + "wallabag/wallabag": "<=2.6.2", + "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", + "webklex/laravel-imap": "<5.3", + "webklex/php-imap": "<5.3", + "webpa/webpa": "<3.1.2", + "wikibase/wikibase": "<=1.39.3", + "wikimedia/parsoid": "<0.12.2", + "willdurand/js-translation-bundle": "<2.1.1", + "wintercms/winter": "<1.2.3", + "woocommerce/woocommerce": "<6.6", + "wp-cli/wp-cli": "<2.5", + "wp-graphql/wp-graphql": "<=1.14.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", + "zencart/zencart": "<=1.5.7.0-beta", + "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.0.1", + "zenstruck/collection": "<0.2.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-08-29T00:13:38+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": { + "roave/security-advisories": 20 + }, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.1", + "ext-dom": "*", + "ext-iconv": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "lib-iconv": "*", + "lib-libxml": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" } diff --git a/core/src/ManagerTheme.php b/core/src/ManagerTheme.php index bf6b7b3198..a1daa21c99 100644 --- a/core/src/ManagerTheme.php +++ b/core/src/ManagerTheme.php @@ -224,7 +224,6 @@ protected function loadLang($lang = 'english') include EVO_CORE_PATH . 'lang/' . $lang . '/global.php'; } - foreach ($_lang as $k => $v) { if (strpos($v, '[+') !== false) { $_lang[$k] = str_replace( @@ -275,9 +274,13 @@ public function setTextDir($textDir = 'rtl') $this->textDir = $textDir === 'rtl' ? 'rtl' : 'ltr'; } - public function getLexicon($key = null, $default = '') + public function setLexicon($key, $value = '') { + return $this->lexicon[$key] = $value; + } + public function getLexicon($key = null, $default = '') + { return $key === null ? $this->lexicon : get_by_key($this->lexicon, $key, $default); } @@ -477,7 +480,6 @@ public function getActionId() } return $action; - //return isset($_REQUEST['a']) ? (int)$_REQUEST['a'] : 1; } public function isAuthManager() @@ -485,15 +487,9 @@ public function isAuthManager() $out = null; if (isset($_SESSION['mgrValidated']) && $_SESSION['usertype'] !== 'manager') { - // if (isset($_COOKIE[session_name()])) { - // setcookie(session_name(), '', 0, MODX_BASE_URL); - // } @session_destroy(); - // start session - // startCMSSession(); } - // andrazk 20070416 - if installer is running, destroy active sessions if (is_file(MODX_BASE_PATH . 'assets/cache/installProc.inc.php')) { include_once(MODX_BASE_PATH . 'assets/cache/installProc.inc.php'); if (isset($installStartTime)) { @@ -506,14 +502,12 @@ public function isAuthManager() if (isset($_COOKIE[session_name()])) { session_unset(); @session_destroy(); - // setcookie(session_name(), '', 0, MODX_BASE_URL); } } } } } - // andrazk 20070416 - if session started before install and was not destroyed yet if (defined('EVO_INSTALL_TIME')) { if (isset($_SESSION['mgrValidated'])) { if (isset($_SESSION['modx.session.created.time'])) { @@ -522,7 +516,6 @@ public function isAuthManager() if (isset($_COOKIE[session_name()])) { session_unset(); @session_destroy(); - // setcookie(session_name(), '', 0, MODX_BASE_URL); } header('HTTP/1.0 307 Redirect'); header('Location: ' . MODX_MANAGER_URL . 'index.php?installGoingOn=2'); @@ -571,7 +564,6 @@ public function getTemplate($name, $config = null) $target = str_replace('[+base_path+]', MODX_BASE_PATH, $target); $target = $this->getCore()->mergeSettingsContent($target); - $content = $this->getCore()->getChunk($target); if (empty($content)) { if (is_file(MODX_BASE_PATH . $target)) { @@ -670,7 +662,6 @@ public function renderLoginPage() $html = is_array($evtOut) ? implode('', $evtOut) : ''; $plh['OnManagerLoginFormPrerender'] = $html; - // andrazk 20070416 - notify user of install/update if (isset($_GET['installGoingOn'])) { switch ((int)$_GET['installGoingOn']) { case 1: @@ -713,7 +704,6 @@ public function renderLoginPage() $plh['repair_password'] = $this->repairPassword($plh); - return $this->makeTemplate('login', 'manager_login_tpl', $plh, false); } @@ -885,10 +875,8 @@ public function repairPassword($plh) if ($output == '') $output .= $this->sendRepairMail($_GET['email'], $hash, 'hash'); } - } return $output . $this->makeTemplate('repair_button', 'manager_login_tpl', $plh, false); - } public function sendRepairMail($email, $hash, $mode) diff --git a/core/vendor/bin/carbon.bat b/core/vendor/bin/carbon.bat new file mode 100644 index 0000000000..806cf153b7 --- /dev/null +++ b/core/vendor/bin/carbon.bat @@ -0,0 +1,5 @@ +@ECHO OFF +setlocal DISABLEDELAYEDEXPANSION +SET BIN_TARGET=%~dp0/carbon +SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 +php "%BIN_TARGET%" %* diff --git a/core/vendor/bin/composer.bat b/core/vendor/bin/composer.bat new file mode 100644 index 0000000000..2189f32352 --- /dev/null +++ b/core/vendor/bin/composer.bat @@ -0,0 +1,5 @@ +@ECHO OFF +setlocal DISABLEDELAYEDEXPANSION +SET BIN_TARGET=%~dp0/composer +SET COMPOSER_RUNTIME_BIN_DIR=%~dp0 +php "%BIN_TARGET%" %* diff --git a/core/vendor/bin/doctrine-dbal.bat b/core/vendor/bin/doctrine-dbal.bat new file mode 100644 index 0000000000..56c0b3fef1 --- /dev/null +++ b/core/vendor/bin/doctrine-dbal.bat @@ -0,0 +1,5 @@ +@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/patch-type-declarations.bat b/core/vendor/bin/patch-type-declarations.bat new file mode 100644 index 0000000000..2b0707968a --- /dev/null +++ b/core/vendor/bin/patch-type-declarations.bat @@ -0,0 +1,5 @@ +@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/var-dump-server.bat b/core/vendor/bin/var-dump-server.bat new file mode 100644 index 0000000000..94333da54c --- /dev/null +++ b/core/vendor/bin/var-dump-server.bat @@ -0,0 +1,5 @@ +@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 ee983ebae3..b22d394241 100644 --- a/core/vendor/composer/autoload_classmap.php +++ b/core/vendor/composer/autoload_classmap.php @@ -22,6 +22,7 @@ 'Brick\\Math\\Internal\\Calculator\\GmpCalculator' => $vendorDir . '/brick/math/src/Internal/Calculator/GmpCalculator.php', 'Brick\\Math\\Internal\\Calculator\\NativeCalculator' => $vendorDir . '/brick/math/src/Internal/Calculator/NativeCalculator.php', 'Brick\\Math\\RoundingMode' => $vendorDir . '/brick/math/src/RoundingMode.php', + 'CURLStringFile' => $vendorDir . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php', 'Carbon\\AbstractTranslator' => $vendorDir . '/nesbot/carbon/src/Carbon/AbstractTranslator.php', 'Carbon\\Carbon' => $vendorDir . '/nesbot/carbon/src/Carbon/Carbon.php', 'Carbon\\CarbonConverterInterface' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonConverterInterface.php', @@ -417,6 +418,25 @@ 'Composer\\XdebugHandler\\Process' => $vendorDir . '/composer/xdebug-handler/src/Process.php', 'Composer\\XdebugHandler\\Status' => $vendorDir . '/composer/xdebug-handler/src/Status.php', 'Composer\\XdebugHandler\\XdebugHandler' => $vendorDir . '/composer/xdebug-handler/src/XdebugHandler.php', + 'Cron\\AbstractField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/AbstractField.php', + 'Cron\\CronExpression' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/CronExpression.php', + 'Cron\\DayOfMonthField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php', + 'Cron\\DayOfWeekField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php', + 'Cron\\FieldFactory' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/FieldFactory.php', + 'Cron\\FieldFactoryInterface' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/FieldFactoryInterface.php', + 'Cron\\FieldInterface' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/FieldInterface.php', + 'Cron\\HoursField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/HoursField.php', + 'Cron\\MinutesField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/MinutesField.php', + 'Cron\\MonthField' => $vendorDir . '/dragonmantank/cron-expression/src/Cron/MonthField.php', + 'DateError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateError.php', + 'DateException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateException.php', + 'DateInvalidOperationException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php', + 'DateInvalidTimeZoneException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php', + 'DateMalformedIntervalStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php', + 'DateMalformedPeriodStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php', + 'DateMalformedStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php', + 'DateObjectError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php', + 'DateRangeError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php', 'Doctrine\\Common\\Cache\\Cache' => $vendorDir . '/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php', 'Doctrine\\Common\\Cache\\CacheProvider' => $vendorDir . '/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php', 'Doctrine\\Common\\Cache\\ClearableCache' => $vendorDir . '/doctrine/cache/lib/Doctrine/Common/Cache/ClearableCache.php', @@ -1369,6 +1389,7 @@ 'Illuminate\\Console\\Command' => $vendorDir . '/illuminate/console/Command.php', 'Illuminate\\Console\\CommandMutex' => $vendorDir . '/illuminate/console/CommandMutex.php', 'Illuminate\\Console\\Concerns\\CallsCommands' => $vendorDir . '/illuminate/console/Concerns/CallsCommands.php', + 'Illuminate\\Console\\Concerns\\ConfiguresPrompts' => $vendorDir . '/illuminate/console/Concerns/ConfiguresPrompts.php', 'Illuminate\\Console\\Concerns\\CreatesMatchingTest' => $vendorDir . '/illuminate/console/Concerns/CreatesMatchingTest.php', 'Illuminate\\Console\\Concerns\\HasParameters' => $vendorDir . '/illuminate/console/Concerns/HasParameters.php', 'Illuminate\\Console\\Concerns\\InteractsWithIO' => $vendorDir . '/illuminate/console/Concerns/InteractsWithIO.php', @@ -1400,6 +1421,7 @@ 'Illuminate\\Console\\Scheduling\\Schedule' => $vendorDir . '/illuminate/console/Scheduling/Schedule.php', 'Illuminate\\Console\\Scheduling\\ScheduleClearCacheCommand' => $vendorDir . '/illuminate/console/Scheduling/ScheduleClearCacheCommand.php', 'Illuminate\\Console\\Scheduling\\ScheduleFinishCommand' => $vendorDir . '/illuminate/console/Scheduling/ScheduleFinishCommand.php', + 'Illuminate\\Console\\Scheduling\\ScheduleInterruptCommand' => $vendorDir . '/illuminate/console/Scheduling/ScheduleInterruptCommand.php', 'Illuminate\\Console\\Scheduling\\ScheduleListCommand' => $vendorDir . '/illuminate/console/Scheduling/ScheduleListCommand.php', 'Illuminate\\Console\\Scheduling\\ScheduleRunCommand' => $vendorDir . '/illuminate/console/Scheduling/ScheduleRunCommand.php', 'Illuminate\\Console\\Scheduling\\ScheduleTestCommand' => $vendorDir . '/illuminate/console/Scheduling/ScheduleTestCommand.php', @@ -1421,6 +1443,7 @@ 'Illuminate\\Console\\View\\Components\\Mutators\\EnsureNoPunctuation' => $vendorDir . '/illuminate/console/View/Components/Mutators/EnsureNoPunctuation.php', 'Illuminate\\Console\\View\\Components\\Mutators\\EnsurePunctuation' => $vendorDir . '/illuminate/console/View/Components/Mutators/EnsurePunctuation.php', 'Illuminate\\Console\\View\\Components\\Mutators\\EnsureRelativePaths' => $vendorDir . '/illuminate/console/View/Components/Mutators/EnsureRelativePaths.php', + 'Illuminate\\Console\\View\\Components\\Secret' => $vendorDir . '/illuminate/console/View/Components/Secret.php', 'Illuminate\\Console\\View\\Components\\Task' => $vendorDir . '/illuminate/console/View/Components/Task.php', 'Illuminate\\Console\\View\\Components\\TwoColumnDetail' => $vendorDir . '/illuminate/console/View/Components/TwoColumnDetail.php', 'Illuminate\\Console\\View\\Components\\Warn' => $vendorDir . '/illuminate/console/View/Components/Warn.php', @@ -1478,6 +1501,7 @@ 'Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => $vendorDir . '/illuminate/contracts/Database/Events/MigrationEvent.php', 'Illuminate\\Contracts\\Database\\ModelIdentifier' => $vendorDir . '/illuminate/contracts/Database/ModelIdentifier.php', 'Illuminate\\Contracts\\Database\\Query\\Builder' => $vendorDir . '/illuminate/contracts/Database/Query/Builder.php', + 'Illuminate\\Contracts\\Database\\Query\\ConditionExpression' => $vendorDir . '/illuminate/contracts/Database/Query/ConditionExpression.php', 'Illuminate\\Contracts\\Database\\Query\\Expression' => $vendorDir . '/illuminate/contracts/Database/Query/Expression.php', 'Illuminate\\Contracts\\Debug\\ExceptionHandler' => $vendorDir . '/illuminate/contracts/Debug/ExceptionHandler.php', 'Illuminate\\Contracts\\Encryption\\DecryptException' => $vendorDir . '/illuminate/contracts/Encryption/DecryptException.php', @@ -1691,6 +1715,8 @@ 'Illuminate\\Database\\Events\\MigrationsEnded' => $vendorDir . '/illuminate/database/Events/MigrationsEnded.php', 'Illuminate\\Database\\Events\\MigrationsEvent' => $vendorDir . '/illuminate/database/Events/MigrationsEvent.php', 'Illuminate\\Database\\Events\\MigrationsStarted' => $vendorDir . '/illuminate/database/Events/MigrationsStarted.php', + 'Illuminate\\Database\\Events\\ModelPruningFinished' => $vendorDir . '/illuminate/database/Events/ModelPruningFinished.php', + 'Illuminate\\Database\\Events\\ModelPruningStarting' => $vendorDir . '/illuminate/database/Events/ModelPruningStarting.php', 'Illuminate\\Database\\Events\\ModelsPruned' => $vendorDir . '/illuminate/database/Events/ModelsPruned.php', 'Illuminate\\Database\\Events\\NoPendingMigrations' => $vendorDir . '/illuminate/database/Events/NoPendingMigrations.php', 'Illuminate\\Database\\Events\\QueryExecuted' => $vendorDir . '/illuminate/database/Events/QueryExecuted.php', @@ -1762,6 +1788,7 @@ 'Illuminate\\Database\\Schema\\SqliteSchemaState' => $vendorDir . '/illuminate/database/Schema/SqliteSchemaState.php', 'Illuminate\\Database\\Seeder' => $vendorDir . '/illuminate/database/Seeder.php', 'Illuminate\\Database\\SqlServerConnection' => $vendorDir . '/illuminate/database/SqlServerConnection.php', + 'Illuminate\\Database\\UniqueConstraintViolationException' => $vendorDir . '/illuminate/database/UniqueConstraintViolationException.php', 'Illuminate\\Events\\CallQueuedListener' => $vendorDir . '/illuminate/events/CallQueuedListener.php', 'Illuminate\\Events\\Dispatcher' => $vendorDir . '/illuminate/events/Dispatcher.php', 'Illuminate\\Events\\EventServiceProvider' => $vendorDir . '/illuminate/events/EventServiceProvider.php', @@ -1868,6 +1895,8 @@ 'Illuminate\\Routing\\Controllers\\HasMiddleware' => $vendorDir . '/illuminate/routing/Controllers/HasMiddleware.php', 'Illuminate\\Routing\\Controllers\\Middleware' => $vendorDir . '/illuminate/routing/Controllers/Middleware.php', 'Illuminate\\Routing\\CreatesRegularExpressionRouteConstraints' => $vendorDir . '/illuminate/routing/CreatesRegularExpressionRouteConstraints.php', + 'Illuminate\\Routing\\Events\\PreparingResponse' => $vendorDir . '/illuminate/routing/Events/PreparingResponse.php', + 'Illuminate\\Routing\\Events\\ResponsePrepared' => $vendorDir . '/illuminate/routing/Events/ResponsePrepared.php', 'Illuminate\\Routing\\Events\\RouteMatched' => $vendorDir . '/illuminate/routing/Events/RouteMatched.php', 'Illuminate\\Routing\\Events\\Routing' => $vendorDir . '/illuminate/routing/Events/Routing.php', 'Illuminate\\Routing\\Exceptions\\BackedEnumCaseNotFoundException' => $vendorDir . '/illuminate/routing/Exceptions/BackedEnumCaseNotFoundException.php', @@ -2026,6 +2055,7 @@ 'Illuminate\\Support\\ValidatedInput' => $vendorDir . '/illuminate/support/ValidatedInput.php', 'Illuminate\\Support\\ViewErrorBag' => $vendorDir . '/illuminate/support/ViewErrorBag.php', 'Illuminate\\Translation\\ArrayLoader' => $vendorDir . '/illuminate/translation/ArrayLoader.php', + 'Illuminate\\Translation\\CreatesPotentiallyTranslatedStrings' => $vendorDir . '/illuminate/translation/CreatesPotentiallyTranslatedStrings.php', 'Illuminate\\Translation\\FileLoader' => $vendorDir . '/illuminate/translation/FileLoader.php', 'Illuminate\\Translation\\MessageSelector' => $vendorDir . '/illuminate/translation/MessageSelector.php', 'Illuminate\\Translation\\PotentiallyTranslatedString' => $vendorDir . '/illuminate/translation/PotentiallyTranslatedString.php', @@ -2045,6 +2075,7 @@ 'Illuminate\\Validation\\NotPwnedVerifier' => $vendorDir . '/illuminate/validation/NotPwnedVerifier.php', 'Illuminate\\Validation\\PresenceVerifierInterface' => $vendorDir . '/illuminate/validation/PresenceVerifierInterface.php', 'Illuminate\\Validation\\Rule' => $vendorDir . '/illuminate/validation/Rule.php', + 'Illuminate\\Validation\\Rules\\Can' => $vendorDir . '/illuminate/validation/Rules/Can.php', 'Illuminate\\Validation\\Rules\\DatabaseRule' => $vendorDir . '/illuminate/validation/Rules/DatabaseRule.php', 'Illuminate\\Validation\\Rules\\Dimensions' => $vendorDir . '/illuminate/validation/Rules/Dimensions.php', 'Illuminate\\Validation\\Rules\\Enum' => $vendorDir . '/illuminate/validation/Rules/Enum.php', @@ -2170,58 +2201,99 @@ 'JsonSchema\\Uri\\UriResolver' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php', 'JsonSchema\\Uri\\UriRetriever' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php', 'JsonSchema\\Validator' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Validator.php', - 'League\\Flysystem\\AdapterInterface' => $vendorDir . '/league/flysystem/src/AdapterInterface.php', - 'League\\Flysystem\\Adapter\\AbstractAdapter' => $vendorDir . '/league/flysystem/src/Adapter/AbstractAdapter.php', - 'League\\Flysystem\\Adapter\\AbstractFtpAdapter' => $vendorDir . '/league/flysystem/src/Adapter/AbstractFtpAdapter.php', - 'League\\Flysystem\\Adapter\\CanOverwriteFiles' => $vendorDir . '/league/flysystem/src/Adapter/CanOverwriteFiles.php', - 'League\\Flysystem\\Adapter\\Ftp' => $vendorDir . '/league/flysystem/src/Adapter/Ftp.php', - 'League\\Flysystem\\Adapter\\Ftpd' => $vendorDir . '/league/flysystem/src/Adapter/Ftpd.php', - 'League\\Flysystem\\Adapter\\Local' => $vendorDir . '/league/flysystem/src/Adapter/Local.php', - 'League\\Flysystem\\Adapter\\NullAdapter' => $vendorDir . '/league/flysystem/src/Adapter/NullAdapter.php', - 'League\\Flysystem\\Adapter\\Polyfill\\NotSupportingVisibilityTrait' => $vendorDir . '/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php', - 'League\\Flysystem\\Adapter\\Polyfill\\StreamedCopyTrait' => $vendorDir . '/league/flysystem/src/Adapter/Polyfill/StreamedCopyTrait.php', - 'League\\Flysystem\\Adapter\\Polyfill\\StreamedReadingTrait' => $vendorDir . '/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php', - 'League\\Flysystem\\Adapter\\Polyfill\\StreamedTrait' => $vendorDir . '/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php', - 'League\\Flysystem\\Adapter\\Polyfill\\StreamedWritingTrait' => $vendorDir . '/league/flysystem/src/Adapter/Polyfill/StreamedWritingTrait.php', - 'League\\Flysystem\\Adapter\\SynologyFtp' => $vendorDir . '/league/flysystem/src/Adapter/SynologyFtp.php', + 'Laravel\\Prompts\\Concerns\\Colors' => $vendorDir . '/laravel/prompts/src/Concerns/Colors.php', + 'Laravel\\Prompts\\Concerns\\Cursor' => $vendorDir . '/laravel/prompts/src/Concerns/Cursor.php', + 'Laravel\\Prompts\\Concerns\\Erase' => $vendorDir . '/laravel/prompts/src/Concerns/Erase.php', + 'Laravel\\Prompts\\Concerns\\Events' => $vendorDir . '/laravel/prompts/src/Concerns/Events.php', + 'Laravel\\Prompts\\Concerns\\FakesInputOutput' => $vendorDir . '/laravel/prompts/src/Concerns/FakesInputOutput.php', + 'Laravel\\Prompts\\Concerns\\Fallback' => $vendorDir . '/laravel/prompts/src/Concerns/Fallback.php', + 'Laravel\\Prompts\\Concerns\\Termwind' => $vendorDir . '/laravel/prompts/src/Concerns/Termwind.php', + 'Laravel\\Prompts\\Concerns\\Themes' => $vendorDir . '/laravel/prompts/src/Concerns/Themes.php', + 'Laravel\\Prompts\\Concerns\\Truncation' => $vendorDir . '/laravel/prompts/src/Concerns/Truncation.php', + 'Laravel\\Prompts\\Concerns\\TypedValue' => $vendorDir . '/laravel/prompts/src/Concerns/TypedValue.php', + 'Laravel\\Prompts\\ConfirmPrompt' => $vendorDir . '/laravel/prompts/src/ConfirmPrompt.php', + 'Laravel\\Prompts\\Key' => $vendorDir . '/laravel/prompts/src/Key.php', + 'Laravel\\Prompts\\MultiSelectPrompt' => $vendorDir . '/laravel/prompts/src/MultiSelectPrompt.php', + 'Laravel\\Prompts\\Note' => $vendorDir . '/laravel/prompts/src/Note.php', + 'Laravel\\Prompts\\Output\\BufferedConsoleOutput' => $vendorDir . '/laravel/prompts/src/Output/BufferedConsoleOutput.php', + 'Laravel\\Prompts\\Output\\ConsoleOutput' => $vendorDir . '/laravel/prompts/src/Output/ConsoleOutput.php', + 'Laravel\\Prompts\\PasswordPrompt' => $vendorDir . '/laravel/prompts/src/PasswordPrompt.php', + 'Laravel\\Prompts\\Prompt' => $vendorDir . '/laravel/prompts/src/Prompt.php', + 'Laravel\\Prompts\\SearchPrompt' => $vendorDir . '/laravel/prompts/src/SearchPrompt.php', + 'Laravel\\Prompts\\SelectPrompt' => $vendorDir . '/laravel/prompts/src/SelectPrompt.php', + 'Laravel\\Prompts\\Spinner' => $vendorDir . '/laravel/prompts/src/Spinner.php', + 'Laravel\\Prompts\\SuggestPrompt' => $vendorDir . '/laravel/prompts/src/SuggestPrompt.php', + 'Laravel\\Prompts\\Terminal' => $vendorDir . '/laravel/prompts/src/Terminal.php', + 'Laravel\\Prompts\\TextPrompt' => $vendorDir . '/laravel/prompts/src/TextPrompt.php', + 'Laravel\\Prompts\\Themes\\Default\\Concerns\\DrawsBoxes' => $vendorDir . '/laravel/prompts/src/Themes/Default/Concerns/DrawsBoxes.php', + 'Laravel\\Prompts\\Themes\\Default\\Concerns\\DrawsScrollbars' => $vendorDir . '/laravel/prompts/src/Themes/Default/Concerns/DrawsScrollbars.php', + 'Laravel\\Prompts\\Themes\\Default\\ConfirmPromptRenderer' => $vendorDir . '/laravel/prompts/src/Themes/Default/ConfirmPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\MultiSelectPromptRenderer' => $vendorDir . '/laravel/prompts/src/Themes/Default/MultiSelectPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\NoteRenderer' => $vendorDir . '/laravel/prompts/src/Themes/Default/NoteRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\PasswordPromptRenderer' => $vendorDir . '/laravel/prompts/src/Themes/Default/PasswordPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\Renderer' => $vendorDir . '/laravel/prompts/src/Themes/Default/Renderer.php', + 'Laravel\\Prompts\\Themes\\Default\\SearchPromptRenderer' => $vendorDir . '/laravel/prompts/src/Themes/Default/SearchPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\SelectPromptRenderer' => $vendorDir . '/laravel/prompts/src/Themes/Default/SelectPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\SpinnerRenderer' => $vendorDir . '/laravel/prompts/src/Themes/Default/SpinnerRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\SuggestPromptRenderer' => $vendorDir . '/laravel/prompts/src/Themes/Default/SuggestPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\TextPromptRenderer' => $vendorDir . '/laravel/prompts/src/Themes/Default/TextPromptRenderer.php', + 'League\\Flysystem\\CalculateChecksumFromStream' => $vendorDir . '/league/flysystem/src/CalculateChecksumFromStream.php', + 'League\\Flysystem\\ChecksumAlgoIsNotSupported' => $vendorDir . '/league/flysystem/src/ChecksumAlgoIsNotSupported.php', + 'League\\Flysystem\\ChecksumProvider' => $vendorDir . '/league/flysystem/src/ChecksumProvider.php', 'League\\Flysystem\\Config' => $vendorDir . '/league/flysystem/src/Config.php', - 'League\\Flysystem\\ConfigAwareTrait' => $vendorDir . '/league/flysystem/src/ConfigAwareTrait.php', - 'League\\Flysystem\\ConnectionErrorException' => $vendorDir . '/league/flysystem/src/ConnectionErrorException.php', - 'League\\Flysystem\\ConnectionRuntimeException' => $vendorDir . '/league/flysystem/src/ConnectionRuntimeException.php', 'League\\Flysystem\\CorruptedPathDetected' => $vendorDir . '/league/flysystem/src/CorruptedPathDetected.php', - 'League\\Flysystem\\Directory' => $vendorDir . '/league/flysystem/src/Directory.php', - 'League\\Flysystem\\Exception' => $vendorDir . '/league/flysystem/src/Exception.php', - 'League\\Flysystem\\File' => $vendorDir . '/league/flysystem/src/File.php', - 'League\\Flysystem\\FileExistsException' => $vendorDir . '/league/flysystem/src/FileExistsException.php', - 'League\\Flysystem\\FileNotFoundException' => $vendorDir . '/league/flysystem/src/FileNotFoundException.php', + 'League\\Flysystem\\DirectoryAttributes' => $vendorDir . '/league/flysystem/src/DirectoryAttributes.php', + 'League\\Flysystem\\DirectoryListing' => $vendorDir . '/league/flysystem/src/DirectoryListing.php', + 'League\\Flysystem\\FileAttributes' => $vendorDir . '/league/flysystem/src/FileAttributes.php', 'League\\Flysystem\\Filesystem' => $vendorDir . '/league/flysystem/src/Filesystem.php', + 'League\\Flysystem\\FilesystemAdapter' => $vendorDir . '/league/flysystem/src/FilesystemAdapter.php', 'League\\Flysystem\\FilesystemException' => $vendorDir . '/league/flysystem/src/FilesystemException.php', - 'League\\Flysystem\\FilesystemInterface' => $vendorDir . '/league/flysystem/src/FilesystemInterface.php', - 'League\\Flysystem\\FilesystemNotFoundException' => $vendorDir . '/league/flysystem/src/FilesystemNotFoundException.php', - 'League\\Flysystem\\Handler' => $vendorDir . '/league/flysystem/src/Handler.php', - 'League\\Flysystem\\InvalidRootException' => $vendorDir . '/league/flysystem/src/InvalidRootException.php', + 'League\\Flysystem\\FilesystemOperationFailed' => $vendorDir . '/league/flysystem/src/FilesystemOperationFailed.php', + 'League\\Flysystem\\FilesystemOperator' => $vendorDir . '/league/flysystem/src/FilesystemOperator.php', + 'League\\Flysystem\\FilesystemReader' => $vendorDir . '/league/flysystem/src/FilesystemReader.php', + 'League\\Flysystem\\FilesystemWriter' => $vendorDir . '/league/flysystem/src/FilesystemWriter.php', + 'League\\Flysystem\\InvalidStreamProvided' => $vendorDir . '/league/flysystem/src/InvalidStreamProvided.php', + 'League\\Flysystem\\InvalidVisibilityProvided' => $vendorDir . '/league/flysystem/src/InvalidVisibilityProvided.php', + 'League\\Flysystem\\Local\\FallbackMimeTypeDetector' => $vendorDir . '/league/flysystem-local/FallbackMimeTypeDetector.php', + 'League\\Flysystem\\Local\\LocalFilesystemAdapter' => $vendorDir . '/league/flysystem-local/LocalFilesystemAdapter.php', 'League\\Flysystem\\MountManager' => $vendorDir . '/league/flysystem/src/MountManager.php', - 'League\\Flysystem\\NotSupportedException' => $vendorDir . '/league/flysystem/src/NotSupportedException.php', - 'League\\Flysystem\\PluginInterface' => $vendorDir . '/league/flysystem/src/PluginInterface.php', - 'League\\Flysystem\\Plugin\\AbstractPlugin' => $vendorDir . '/league/flysystem/src/Plugin/AbstractPlugin.php', - 'League\\Flysystem\\Plugin\\EmptyDir' => $vendorDir . '/league/flysystem/src/Plugin/EmptyDir.php', - 'League\\Flysystem\\Plugin\\ForcedCopy' => $vendorDir . '/league/flysystem/src/Plugin/ForcedCopy.php', - 'League\\Flysystem\\Plugin\\ForcedRename' => $vendorDir . '/league/flysystem/src/Plugin/ForcedRename.php', - 'League\\Flysystem\\Plugin\\GetWithMetadata' => $vendorDir . '/league/flysystem/src/Plugin/GetWithMetadata.php', - 'League\\Flysystem\\Plugin\\ListFiles' => $vendorDir . '/league/flysystem/src/Plugin/ListFiles.php', - 'League\\Flysystem\\Plugin\\ListPaths' => $vendorDir . '/league/flysystem/src/Plugin/ListPaths.php', - 'League\\Flysystem\\Plugin\\ListWith' => $vendorDir . '/league/flysystem/src/Plugin/ListWith.php', - 'League\\Flysystem\\Plugin\\PluggableTrait' => $vendorDir . '/league/flysystem/src/Plugin/PluggableTrait.php', - 'League\\Flysystem\\Plugin\\PluginNotFoundException' => $vendorDir . '/league/flysystem/src/Plugin/PluginNotFoundException.php', - 'League\\Flysystem\\ReadInterface' => $vendorDir . '/league/flysystem/src/ReadInterface.php', - 'League\\Flysystem\\RootViolationException' => $vendorDir . '/league/flysystem/src/RootViolationException.php', - 'League\\Flysystem\\SafeStorage' => $vendorDir . '/league/flysystem/src/SafeStorage.php', - 'League\\Flysystem\\UnreadableFileException' => $vendorDir . '/league/flysystem/src/UnreadableFileException.php', - 'League\\Flysystem\\Util' => $vendorDir . '/league/flysystem/src/Util.php', - 'League\\Flysystem\\Util\\ContentListingFormatter' => $vendorDir . '/league/flysystem/src/Util/ContentListingFormatter.php', - 'League\\Flysystem\\Util\\MimeType' => $vendorDir . '/league/flysystem/src/Util/MimeType.php', - 'League\\Flysystem\\Util\\StreamHasher' => $vendorDir . '/league/flysystem/src/Util/StreamHasher.php', + 'League\\Flysystem\\PathNormalizer' => $vendorDir . '/league/flysystem/src/PathNormalizer.php', + 'League\\Flysystem\\PathPrefixer' => $vendorDir . '/league/flysystem/src/PathPrefixer.php', + 'League\\Flysystem\\PathTraversalDetected' => $vendorDir . '/league/flysystem/src/PathTraversalDetected.php', + 'League\\Flysystem\\PortableVisibilityGuard' => $vendorDir . '/league/flysystem/src/PortableVisibilityGuard.php', + 'League\\Flysystem\\ProxyArrayAccessToProperties' => $vendorDir . '/league/flysystem/src/ProxyArrayAccessToProperties.php', + 'League\\Flysystem\\StorageAttributes' => $vendorDir . '/league/flysystem/src/StorageAttributes.php', + 'League\\Flysystem\\SymbolicLinkEncountered' => $vendorDir . '/league/flysystem/src/SymbolicLinkEncountered.php', + 'League\\Flysystem\\UnableToCheckDirectoryExistence' => $vendorDir . '/league/flysystem/src/UnableToCheckDirectoryExistence.php', + 'League\\Flysystem\\UnableToCheckExistence' => $vendorDir . '/league/flysystem/src/UnableToCheckExistence.php', + 'League\\Flysystem\\UnableToCheckFileExistence' => $vendorDir . '/league/flysystem/src/UnableToCheckFileExistence.php', + 'League\\Flysystem\\UnableToCopyFile' => $vendorDir . '/league/flysystem/src/UnableToCopyFile.php', + 'League\\Flysystem\\UnableToCreateDirectory' => $vendorDir . '/league/flysystem/src/UnableToCreateDirectory.php', + 'League\\Flysystem\\UnableToDeleteDirectory' => $vendorDir . '/league/flysystem/src/UnableToDeleteDirectory.php', + 'League\\Flysystem\\UnableToDeleteFile' => $vendorDir . '/league/flysystem/src/UnableToDeleteFile.php', + 'League\\Flysystem\\UnableToGeneratePublicUrl' => $vendorDir . '/league/flysystem/src/UnableToGeneratePublicUrl.php', + 'League\\Flysystem\\UnableToGenerateTemporaryUrl' => $vendorDir . '/league/flysystem/src/UnableToGenerateTemporaryUrl.php', + 'League\\Flysystem\\UnableToListContents' => $vendorDir . '/league/flysystem/src/UnableToListContents.php', + 'League\\Flysystem\\UnableToMountFilesystem' => $vendorDir . '/league/flysystem/src/UnableToMountFilesystem.php', + 'League\\Flysystem\\UnableToMoveFile' => $vendorDir . '/league/flysystem/src/UnableToMoveFile.php', + 'League\\Flysystem\\UnableToProvideChecksum' => $vendorDir . '/league/flysystem/src/UnableToProvideChecksum.php', + 'League\\Flysystem\\UnableToReadFile' => $vendorDir . '/league/flysystem/src/UnableToReadFile.php', + 'League\\Flysystem\\UnableToResolveFilesystemMount' => $vendorDir . '/league/flysystem/src/UnableToResolveFilesystemMount.php', + 'League\\Flysystem\\UnableToRetrieveMetadata' => $vendorDir . '/league/flysystem/src/UnableToRetrieveMetadata.php', + 'League\\Flysystem\\UnableToSetVisibility' => $vendorDir . '/league/flysystem/src/UnableToSetVisibility.php', + 'League\\Flysystem\\UnableToWriteFile' => $vendorDir . '/league/flysystem/src/UnableToWriteFile.php', + 'League\\Flysystem\\UnixVisibility\\PortableVisibilityConverter' => $vendorDir . '/league/flysystem/src/UnixVisibility/PortableVisibilityConverter.php', + 'League\\Flysystem\\UnixVisibility\\VisibilityConverter' => $vendorDir . '/league/flysystem/src/UnixVisibility/VisibilityConverter.php', + 'League\\Flysystem\\UnreadableFileEncountered' => $vendorDir . '/league/flysystem/src/UnreadableFileEncountered.php', + 'League\\Flysystem\\UrlGeneration\\ChainedPublicUrlGenerator' => $vendorDir . '/league/flysystem/src/UrlGeneration/ChainedPublicUrlGenerator.php', + 'League\\Flysystem\\UrlGeneration\\PrefixPublicUrlGenerator' => $vendorDir . '/league/flysystem/src/UrlGeneration/PrefixPublicUrlGenerator.php', + 'League\\Flysystem\\UrlGeneration\\PublicUrlGenerator' => $vendorDir . '/league/flysystem/src/UrlGeneration/PublicUrlGenerator.php', + 'League\\Flysystem\\UrlGeneration\\ShardedPrefixPublicUrlGenerator' => $vendorDir . '/league/flysystem/src/UrlGeneration/ShardedPrefixPublicUrlGenerator.php', + 'League\\Flysystem\\UrlGeneration\\TemporaryUrlGenerator' => $vendorDir . '/league/flysystem/src/UrlGeneration/TemporaryUrlGenerator.php', + 'League\\Flysystem\\Visibility' => $vendorDir . '/league/flysystem/src/Visibility.php', + 'League\\Flysystem\\WhitespacePathNormalizer' => $vendorDir . '/league/flysystem/src/WhitespacePathNormalizer.php', 'League\\MimeTypeDetection\\EmptyExtensionToMimeTypeMap' => $vendorDir . '/league/mime-type-detection/src/EmptyExtensionToMimeTypeMap.php', + 'League\\MimeTypeDetection\\ExtensionLookup' => $vendorDir . '/league/mime-type-detection/src/ExtensionLookup.php', 'League\\MimeTypeDetection\\ExtensionMimeTypeDetector' => $vendorDir . '/league/mime-type-detection/src/ExtensionMimeTypeDetector.php', 'League\\MimeTypeDetection\\ExtensionToMimeTypeMap' => $vendorDir . '/league/mime-type-detection/src/ExtensionToMimeTypeMap.php', 'League\\MimeTypeDetection\\FinfoMimeTypeDetector' => $vendorDir . '/league/mime-type-detection/src/FinfoMimeTypeDetector.php', @@ -2331,6 +2403,7 @@ 'Monolog\\Processor\\GitProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php', 'Monolog\\Processor\\HostnameProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php', 'Monolog\\Processor\\IntrospectionProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php', + 'Monolog\\Processor\\LoadAverageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php', 'Monolog\\Processor\\MemoryPeakUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php', 'Monolog\\Processor\\MemoryProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', 'Monolog\\Processor\\MemoryUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php', @@ -2347,6 +2420,7 @@ 'Monolog\\Test\\TestCase' => $vendorDir . '/monolog/monolog/src/Monolog/Test/TestCase.php', 'Monolog\\Utils' => $vendorDir . '/monolog/monolog/src/Monolog/Utils.php', 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', + 'Override' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/Override.php', 'PHPMailer\\PHPMailer\\DSNConfigurator' => $vendorDir . '/phpmailer/phpmailer/src/DSNConfigurator.php', 'PHPMailer\\PHPMailer\\Exception' => $vendorDir . '/phpmailer/phpmailer/src/Exception.php', 'PHPMailer\\PHPMailer\\OAuth' => $vendorDir . '/phpmailer/phpmailer/src/OAuth.php', @@ -2361,6 +2435,7 @@ 'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Predis\\Autoloader' => $vendorDir . '/predis/predis/src/Autoloader.php', 'Predis\\Client' => $vendorDir . '/predis/predis/src/Client.php', + 'Predis\\ClientConfiguration' => $vendorDir . '/predis/predis/src/ClientConfiguration.php', 'Predis\\ClientContextInterface' => $vendorDir . '/predis/predis/src/ClientContextInterface.php', 'Predis\\ClientException' => $vendorDir . '/predis/predis/src/ClientException.php', 'Predis\\ClientInterface' => $vendorDir . '/predis/predis/src/ClientInterface.php', @@ -2390,9 +2465,40 @@ 'Predis\\Command\\Argument\\Geospatial\\FromInterface' => $vendorDir . '/predis/predis/src/Command/Argument/Geospatial/FromInterface.php', 'Predis\\Command\\Argument\\Geospatial\\FromLonLat' => $vendorDir . '/predis/predis/src/Command/Argument/Geospatial/FromLonLat.php', 'Predis\\Command\\Argument\\Geospatial\\FromMember' => $vendorDir . '/predis/predis/src/Command/Argument/Geospatial/FromMember.php', + 'Predis\\Command\\Argument\\Search\\AggregateArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/AggregateArguments.php', + 'Predis\\Command\\Argument\\Search\\AlterArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/AlterArguments.php', + 'Predis\\Command\\Argument\\Search\\CommonArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/CommonArguments.php', + 'Predis\\Command\\Argument\\Search\\CreateArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/CreateArguments.php', + 'Predis\\Command\\Argument\\Search\\CursorArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/CursorArguments.php', + 'Predis\\Command\\Argument\\Search\\DropArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/DropArguments.php', + 'Predis\\Command\\Argument\\Search\\ExplainArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/ExplainArguments.php', + 'Predis\\Command\\Argument\\Search\\ProfileArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/ProfileArguments.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\AbstractField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/AbstractField.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\FieldInterface' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/FieldInterface.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\GeoField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/GeoField.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\NumericField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/NumericField.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\TagField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/TagField.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\TextField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/TextField.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\VectorField' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SchemaFields/VectorField.php', + 'Predis\\Command\\Argument\\Search\\SearchArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SearchArguments.php', + 'Predis\\Command\\Argument\\Search\\SpellcheckArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SpellcheckArguments.php', + 'Predis\\Command\\Argument\\Search\\SugAddArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SugAddArguments.php', + 'Predis\\Command\\Argument\\Search\\SugGetArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SugGetArguments.php', + 'Predis\\Command\\Argument\\Search\\SynUpdateArguments' => $vendorDir . '/predis/predis/src/Command/Argument/Search/SynUpdateArguments.php', 'Predis\\Command\\Argument\\Server\\LimitInterface' => $vendorDir . '/predis/predis/src/Command/Argument/Server/LimitInterface.php', 'Predis\\Command\\Argument\\Server\\LimitOffsetCount' => $vendorDir . '/predis/predis/src/Command/Argument/Server/LimitOffsetCount.php', 'Predis\\Command\\Argument\\Server\\To' => $vendorDir . '/predis/predis/src/Command/Argument/Server/To.php', + 'Predis\\Command\\Argument\\TimeSeries\\AddArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/AddArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\AlterArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/AlterArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\CommonArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/CommonArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\CreateArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/CreateArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\DecrByArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/DecrByArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\GetArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/GetArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\IncrByArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/IncrByArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\InfoArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/InfoArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\MGetArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/MGetArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\MRangeArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/MRangeArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\RangeArguments' => $vendorDir . '/predis/predis/src/Command/Argument/TimeSeries/RangeArguments.php', 'Predis\\Command\\Command' => $vendorDir . '/predis/predis/src/Command/Command.php', 'Predis\\Command\\CommandInterface' => $vendorDir . '/predis/predis/src/Command/CommandInterface.php', 'Predis\\Command\\Factory' => $vendorDir . '/predis/predis/src/Command/Factory.php', @@ -2404,6 +2510,7 @@ 'Predis\\Command\\RawCommand' => $vendorDir . '/predis/predis/src/Command/RawCommand.php', 'Predis\\Command\\RawFactory' => $vendorDir . '/predis/predis/src/Command/RawFactory.php', 'Predis\\Command\\RedisFactory' => $vendorDir . '/predis/predis/src/Command/RedisFactory.php', + 'Predis\\Command\\Redis\\ACL' => $vendorDir . '/predis/predis/src/Command/Redis/ACL.php', 'Predis\\Command\\Redis\\APPEND' => $vendorDir . '/predis/predis/src/Command/Redis/APPEND.php', 'Predis\\Command\\Redis\\AUTH' => $vendorDir . '/predis/predis/src/Command/Redis/AUTH.php', 'Predis\\Command\\Redis\\AbstractCommand\\BZPOPBase' => $vendorDir . '/predis/predis/src/Command/Redis/AbstractCommand/BZPOPBase.php', @@ -2421,14 +2528,45 @@ 'Predis\\Command\\Redis\\BZMPOP' => $vendorDir . '/predis/predis/src/Command/Redis/BZMPOP.php', 'Predis\\Command\\Redis\\BZPOPMAX' => $vendorDir . '/predis/predis/src/Command/Redis/BZPOPMAX.php', 'Predis\\Command\\Redis\\BZPOPMIN' => $vendorDir . '/predis/predis/src/Command/Redis/BZPOPMIN.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFADD' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFADD.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFEXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFEXISTS.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFINFO' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFINFO.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFINSERT' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFINSERT.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFLOADCHUNK' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFLOADCHUNK.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFMADD' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFMADD.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFMEXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFMEXISTS.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFRESERVE' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFRESERVE.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFSCANDUMP' => $vendorDir . '/predis/predis/src/Command/Redis/BloomFilter/BFSCANDUMP.php', 'Predis\\Command\\Redis\\CLIENT' => $vendorDir . '/predis/predis/src/Command/Redis/CLIENT.php', 'Predis\\Command\\Redis\\COMMAND' => $vendorDir . '/predis/predis/src/Command/Redis/COMMAND.php', 'Predis\\Command\\Redis\\CONFIG' => $vendorDir . '/predis/predis/src/Command/Redis/CONFIG.php', 'Predis\\Command\\Redis\\COPY' => $vendorDir . '/predis/predis/src/Command/Redis/COPY.php', + 'Predis\\Command\\Redis\\Container\\ACL' => $vendorDir . '/predis/predis/src/Command/Redis/Container/ACL.php', 'Predis\\Command\\Redis\\Container\\AbstractContainer' => $vendorDir . '/predis/predis/src/Command/Redis/Container/AbstractContainer.php', 'Predis\\Command\\Redis\\Container\\ContainerFactory' => $vendorDir . '/predis/predis/src/Command/Redis/Container/ContainerFactory.php', 'Predis\\Command\\Redis\\Container\\ContainerInterface' => $vendorDir . '/predis/predis/src/Command/Redis/Container/ContainerInterface.php', 'Predis\\Command\\Redis\\Container\\FunctionContainer' => $vendorDir . '/predis/predis/src/Command/Redis/Container/FunctionContainer.php', + 'Predis\\Command\\Redis\\Container\\Json\\JSONDEBUG' => $vendorDir . '/predis/predis/src/Command/Redis/Container/Json/JSONDEBUG.php', + 'Predis\\Command\\Redis\\Container\\Search\\FTCONFIG' => $vendorDir . '/predis/predis/src/Command/Redis/Container/Search/FTCONFIG.php', + 'Predis\\Command\\Redis\\Container\\Search\\FTCURSOR' => $vendorDir . '/predis/predis/src/Command/Redis/Container/Search/FTCURSOR.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSINCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINCRBY.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSINFO' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINFO.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSINITBYDIM' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYDIM.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSINITBYPROB' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYPROB.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSMERGE' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSMERGE.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSQUERY' => $vendorDir . '/predis/predis/src/Command/Redis/CountMinSketch/CMSQUERY.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFADD' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFADD.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFADDNX' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFADDNX.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFCOUNT' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFCOUNT.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFDEL' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFDEL.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFEXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFEXISTS.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFINFO' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFINFO.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFINSERT' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFINSERT.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFINSERTNX' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFINSERTNX.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFLOADCHUNK' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFLOADCHUNK.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFMEXISTS' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFMEXISTS.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFRESERVE' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFRESERVE.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFSCANDUMP' => $vendorDir . '/predis/predis/src/Command/Redis/CuckooFilter/CFSCANDUMP.php', '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', @@ -2447,6 +2585,7 @@ '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', + 'Predis\\Command\\Redis\\FCALL_RO' => $vendorDir . '/predis/predis/src/Command/Redis/FCALL_RO.php', 'Predis\\Command\\Redis\\FLUSHALL' => $vendorDir . '/predis/predis/src/Command/Redis/FLUSHALL.php', 'Predis\\Command\\Redis\\FLUSHDB' => $vendorDir . '/predis/predis/src/Command/Redis/FLUSHDB.php', 'Predis\\Command\\Redis\\FUNCTIONS' => $vendorDir . '/predis/predis/src/Command/Redis/FUNCTIONS.php', @@ -2484,6 +2623,29 @@ '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\\Json\\JSONARRAPPEND' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRAPPEND.php', + 'Predis\\Command\\Redis\\Json\\JSONARRINDEX' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRINDEX.php', + 'Predis\\Command\\Redis\\Json\\JSONARRINSERT' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRINSERT.php', + 'Predis\\Command\\Redis\\Json\\JSONARRLEN' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRLEN.php', + 'Predis\\Command\\Redis\\Json\\JSONARRPOP' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRPOP.php', + 'Predis\\Command\\Redis\\Json\\JSONARRTRIM' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONARRTRIM.php', + 'Predis\\Command\\Redis\\Json\\JSONCLEAR' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONCLEAR.php', + 'Predis\\Command\\Redis\\Json\\JSONDEBUG' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONDEBUG.php', + 'Predis\\Command\\Redis\\Json\\JSONDEL' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONDEL.php', + 'Predis\\Command\\Redis\\Json\\JSONFORGET' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONFORGET.php', + 'Predis\\Command\\Redis\\Json\\JSONGET' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONGET.php', + 'Predis\\Command\\Redis\\Json\\JSONMERGE' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONMERGE.php', + 'Predis\\Command\\Redis\\Json\\JSONMGET' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONMGET.php', + 'Predis\\Command\\Redis\\Json\\JSONMSET' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONMSET.php', + 'Predis\\Command\\Redis\\Json\\JSONNUMINCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONNUMINCRBY.php', + 'Predis\\Command\\Redis\\Json\\JSONOBJKEYS' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONOBJKEYS.php', + 'Predis\\Command\\Redis\\Json\\JSONOBJLEN' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONOBJLEN.php', + 'Predis\\Command\\Redis\\Json\\JSONRESP' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONRESP.php', + 'Predis\\Command\\Redis\\Json\\JSONSET' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONSET.php', + 'Predis\\Command\\Redis\\Json\\JSONSTRAPPEND' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONSTRAPPEND.php', + 'Predis\\Command\\Redis\\Json\\JSONSTRLEN' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONSTRLEN.php', + 'Predis\\Command\\Redis\\Json\\JSONTOGGLE' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONTOGGLE.php', + 'Predis\\Command\\Redis\\Json\\JSONTYPE' => $vendorDir . '/predis/predis/src/Command/Redis/Json/JSONTYPE.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', @@ -2565,12 +2727,74 @@ '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\\Search\\FTAGGREGATE' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTAGGREGATE.php', + 'Predis\\Command\\Redis\\Search\\FTALIASADD' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTALIASADD.php', + 'Predis\\Command\\Redis\\Search\\FTALIASDEL' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTALIASDEL.php', + 'Predis\\Command\\Redis\\Search\\FTALIASUPDATE' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTALIASUPDATE.php', + 'Predis\\Command\\Redis\\Search\\FTALTER' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTALTER.php', + 'Predis\\Command\\Redis\\Search\\FTCONFIG' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTCONFIG.php', + 'Predis\\Command\\Redis\\Search\\FTCREATE' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTCREATE.php', + 'Predis\\Command\\Redis\\Search\\FTCURSOR' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTCURSOR.php', + 'Predis\\Command\\Redis\\Search\\FTDICTADD' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTDICTADD.php', + 'Predis\\Command\\Redis\\Search\\FTDICTDEL' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTDICTDEL.php', + 'Predis\\Command\\Redis\\Search\\FTDICTDUMP' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTDICTDUMP.php', + 'Predis\\Command\\Redis\\Search\\FTDROPINDEX' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTDROPINDEX.php', + 'Predis\\Command\\Redis\\Search\\FTEXPLAIN' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTEXPLAIN.php', + 'Predis\\Command\\Redis\\Search\\FTINFO' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTINFO.php', + 'Predis\\Command\\Redis\\Search\\FTPROFILE' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTPROFILE.php', + 'Predis\\Command\\Redis\\Search\\FTSEARCH' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSEARCH.php', + 'Predis\\Command\\Redis\\Search\\FTSPELLCHECK' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSPELLCHECK.php', + 'Predis\\Command\\Redis\\Search\\FTSUGADD' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSUGADD.php', + 'Predis\\Command\\Redis\\Search\\FTSUGDEL' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSUGDEL.php', + 'Predis\\Command\\Redis\\Search\\FTSUGGET' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSUGGET.php', + 'Predis\\Command\\Redis\\Search\\FTSUGLEN' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSUGLEN.php', + 'Predis\\Command\\Redis\\Search\\FTSYNDUMP' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSYNDUMP.php', + 'Predis\\Command\\Redis\\Search\\FTSYNUPDATE' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTSYNUPDATE.php', + 'Predis\\Command\\Redis\\Search\\FTTAGVALS' => $vendorDir . '/predis/predis/src/Command/Redis/Search/FTTAGVALS.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTADD' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTADD.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTBYRANK' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTBYRANK.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTBYREVRANK' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTBYREVRANK.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTCDF' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTCDF.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTCREATE' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTCREATE.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTINFO' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTINFO.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTMAX' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMAX.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTMERGE' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMERGE.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTMIN' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMIN.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTQUANTILE' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTQUANTILE.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTRANK' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTRANK.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTRESET' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTRESET.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTREVRANK' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTREVRANK.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTTRIMMED_MEAN' => $vendorDir . '/predis/predis/src/Command/Redis/TDigest/TDIGESTTRIMMED_MEAN.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\\TimeSeries\\TSADD' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSADD.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSALTER' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSALTER.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSCREATE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSCREATE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSCREATERULE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSCREATERULE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSDECRBY' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSDECRBY.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSDEL' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSDEL.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSDELETERULE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSDELETERULE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSGET' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSGET.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSINCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSINCRBY.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSINFO' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSINFO.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSMADD' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSMADD.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSMGET' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSMGET.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSMRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSMRANGE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSMREVRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSMREVRANGE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSQUERYINDEX' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSQUERYINDEX.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSRANGE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSREVRANGE' => $vendorDir . '/predis/predis/src/Command/Redis/TimeSeries/TSREVRANGE.php', + 'Predis\\Command\\Redis\\TopK\\TOPKADD' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKADD.php', + 'Predis\\Command\\Redis\\TopK\\TOPKINCRBY' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKINCRBY.php', + 'Predis\\Command\\Redis\\TopK\\TOPKINFO' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKINFO.php', + 'Predis\\Command\\Redis\\TopK\\TOPKLIST' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKLIST.php', + 'Predis\\Command\\Redis\\TopK\\TOPKQUERY' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKQUERY.php', + 'Predis\\Command\\Redis\\TopK\\TOPKRESERVE' => $vendorDir . '/predis/predis/src/Command/Redis/TopK/TOPKRESERVE.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\\WAITAOF' => $vendorDir . '/predis/predis/src/Command/Redis/WAITAOF.php', 'Predis\\Command\\Redis\\WATCH' => $vendorDir . '/predis/predis/src/Command/Redis/WATCH.php', 'Predis\\Command\\Redis\\XADD' => $vendorDir . '/predis/predis/src/Command/Redis/XADD.php', 'Predis\\Command\\Redis\\XDEL' => $vendorDir . '/predis/predis/src/Command/Redis/XDEL.php', @@ -2612,12 +2836,25 @@ '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\\DumpStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DumpStrategy.php', + 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\FlushStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/FlushStrategy.php', + 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\KillStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/KillStrategy.php', + 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\ListStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/ListStrategy.php', 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\LoadStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/LoadStrategy.php', + 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\RestoreStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/RestoreStrategy.php', + 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\StatsStrategy' => $vendorDir . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/StatsStrategy.php', 'Predis\\Command\\Strategy\\StrategyResolverInterface' => $vendorDir . '/predis/predis/src/Command/Strategy/StrategyResolverInterface.php', 'Predis\\Command\\Strategy\\SubcommandStrategyInterface' => $vendorDir . '/predis/predis/src/Command/Strategy/SubcommandStrategyInterface.php', 'Predis\\Command\\Strategy\\SubcommandStrategyResolver' => $vendorDir . '/predis/predis/src/Command/Strategy/SubcommandStrategyResolver.php', 'Predis\\Command\\Traits\\Aggregate' => $vendorDir . '/predis/predis/src/Command/Traits/Aggregate.php', 'Predis\\Command\\Traits\\BitByte' => $vendorDir . '/predis/predis/src/Command/Traits/BitByte.php', + 'Predis\\Command\\Traits\\BloomFilters\\BucketSize' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/BucketSize.php', + 'Predis\\Command\\Traits\\BloomFilters\\Capacity' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/Capacity.php', + 'Predis\\Command\\Traits\\BloomFilters\\Error' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/Error.php', + 'Predis\\Command\\Traits\\BloomFilters\\Expansion' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/Expansion.php', + 'Predis\\Command\\Traits\\BloomFilters\\Items' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/Items.php', + 'Predis\\Command\\Traits\\BloomFilters\\MaxIterations' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/MaxIterations.php', + 'Predis\\Command\\Traits\\BloomFilters\\NoCreate' => $vendorDir . '/predis/predis/src/Command/Traits/BloomFilters/NoCreate.php', 'Predis\\Command\\Traits\\By\\ByArgument' => $vendorDir . '/predis/predis/src/Command/Traits/By/ByArgument.php', 'Predis\\Command\\Traits\\By\\ByLexByScore' => $vendorDir . '/predis/predis/src/Command/Traits/By/ByLexByScore.php', 'Predis\\Command\\Traits\\By\\GeoBy' => $vendorDir . '/predis/predis/src/Command/Traits/By/GeoBy.php', @@ -2626,6 +2863,10 @@ 'Predis\\Command\\Traits\\Expire\\ExpireOptions' => $vendorDir . '/predis/predis/src/Command/Traits/Expire/ExpireOptions.php', 'Predis\\Command\\Traits\\From\\GeoFrom' => $vendorDir . '/predis/predis/src/Command/Traits/From/GeoFrom.php', 'Predis\\Command\\Traits\\Get\\Get' => $vendorDir . '/predis/predis/src/Command/Traits/Get/Get.php', + 'Predis\\Command\\Traits\\Json\\Indent' => $vendorDir . '/predis/predis/src/Command/Traits/Json/Indent.php', + 'Predis\\Command\\Traits\\Json\\Newline' => $vendorDir . '/predis/predis/src/Command/Traits/Json/Newline.php', + 'Predis\\Command\\Traits\\Json\\NxXxArgument' => $vendorDir . '/predis/predis/src/Command/Traits/Json/NxXxArgument.php', + 'Predis\\Command\\Traits\\Json\\Space' => $vendorDir . '/predis/predis/src/Command/Traits/Json/Space.php', 'Predis\\Command\\Traits\\Keys' => $vendorDir . '/predis/predis/src/Command/Traits/Keys.php', 'Predis\\Command\\Traits\\LeftRight' => $vendorDir . '/predis/predis/src/Command/Traits/LeftRight.php', 'Predis\\Command\\Traits\\Limit\\Limit' => $vendorDir . '/predis/predis/src/Command/Traits/Limit/Limit.php', @@ -2671,6 +2912,8 @@ 'Predis\\Connection\\ParametersInterface' => $vendorDir . '/predis/predis/src/Connection/ParametersInterface.php', 'Predis\\Connection\\PhpiredisSocketConnection' => $vendorDir . '/predis/predis/src/Connection/PhpiredisSocketConnection.php', 'Predis\\Connection\\PhpiredisStreamConnection' => $vendorDir . '/predis/predis/src/Connection/PhpiredisStreamConnection.php', + 'Predis\\Connection\\RelayConnection' => $vendorDir . '/predis/predis/src/Connection/RelayConnection.php', + 'Predis\\Connection\\RelayMethods' => $vendorDir . '/predis/predis/src/Connection/RelayMethods.php', 'Predis\\Connection\\Replication\\MasterSlaveReplication' => $vendorDir . '/predis/predis/src/Connection/Replication/MasterSlaveReplication.php', 'Predis\\Connection\\Replication\\ReplicationInterface' => $vendorDir . '/predis/predis/src/Connection/Replication/ReplicationInterface.php', 'Predis\\Connection\\Replication\\SentinelReplication' => $vendorDir . '/predis/predis/src/Connection/Replication/SentinelReplication.php', @@ -2682,6 +2925,8 @@ 'Predis\\Pipeline\\ConnectionErrorProof' => $vendorDir . '/predis/predis/src/Pipeline/ConnectionErrorProof.php', 'Predis\\Pipeline\\FireAndForget' => $vendorDir . '/predis/predis/src/Pipeline/FireAndForget.php', 'Predis\\Pipeline\\Pipeline' => $vendorDir . '/predis/predis/src/Pipeline/Pipeline.php', + 'Predis\\Pipeline\\RelayAtomic' => $vendorDir . '/predis/predis/src/Pipeline/RelayAtomic.php', + 'Predis\\Pipeline\\RelayPipeline' => $vendorDir . '/predis/predis/src/Pipeline/RelayPipeline.php', 'Predis\\PredisException' => $vendorDir . '/predis/predis/src/PredisException.php', 'Predis\\Protocol\\ProtocolException' => $vendorDir . '/predis/predis/src/Protocol/ProtocolException.php', 'Predis\\Protocol\\ProtocolProcessorInterface' => $vendorDir . '/predis/predis/src/Protocol/ProtocolProcessorInterface.php', @@ -2701,6 +2946,7 @@ 'Predis\\PubSub\\AbstractConsumer' => $vendorDir . '/predis/predis/src/PubSub/AbstractConsumer.php', 'Predis\\PubSub\\Consumer' => $vendorDir . '/predis/predis/src/PubSub/Consumer.php', 'Predis\\PubSub\\DispatcherLoop' => $vendorDir . '/predis/predis/src/PubSub/DispatcherLoop.php', + 'Predis\\PubSub\\RelayConsumer' => $vendorDir . '/predis/predis/src/PubSub/RelayConsumer.php', 'Predis\\Replication\\MissingMasterException' => $vendorDir . '/predis/predis/src/Replication/MissingMasterException.php', 'Predis\\Replication\\ReplicationStrategy' => $vendorDir . '/predis/predis/src/Replication/ReplicationStrategy.php', 'Predis\\Replication\\RoleException' => $vendorDir . '/predis/predis/src/Replication/RoleException.php', @@ -2720,6 +2966,7 @@ 'Psr\\Cache\\CacheItemInterface' => $vendorDir . '/psr/cache/src/CacheItemInterface.php', 'Psr\\Cache\\CacheItemPoolInterface' => $vendorDir . '/psr/cache/src/CacheItemPoolInterface.php', 'Psr\\Cache\\InvalidArgumentException' => $vendorDir . '/psr/cache/src/InvalidArgumentException.php', + 'Psr\\Clock\\ClockInterface' => $vendorDir . '/psr/clock/src/ClockInterface.php', 'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php', 'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php', 'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php', @@ -3774,6 +4021,9 @@ 'WebPConvert\\Serve\\ServeConvertedWebPWithErrorHandling' => $vendorDir . '/rosell-dk/webp-convert/src/Serve/ServeConvertedWebPWithErrorHandling.php', 'WebPConvert\\Serve\\ServeFile' => $vendorDir . '/rosell-dk/webp-convert/src/Serve/ServeFile.php', 'WebPConvert\\WebPConvert' => $vendorDir . '/rosell-dk/webp-convert/src/WebPConvert.php', + 'Webmozart\\Assert\\Assert' => $vendorDir . '/webmozart/assert/src/Assert.php', + 'Webmozart\\Assert\\InvalidArgumentException' => $vendorDir . '/webmozart/assert/src/InvalidArgumentException.php', + 'Webmozart\\Assert\\Mixin' => $vendorDir . '/webmozart/assert/src/Mixin.php', 'Wikimedia\\Composer\\Merge\\V2\\ExtraPackage' => $vendorDir . '/wikimedia/composer-merge-plugin/src/ExtraPackage.php', 'Wikimedia\\Composer\\Merge\\V2\\Logger' => $vendorDir . '/wikimedia/composer-merge-plugin/src/Logger.php', 'Wikimedia\\Composer\\Merge\\V2\\MergePlugin' => $vendorDir . '/wikimedia/composer-merge-plugin/src/MergePlugin.php', diff --git a/core/vendor/composer/autoload_files.php b/core/vendor/composer/autoload_files.php index 2bfc6893d1..ab7e4788e6 100644 --- a/core/vendor/composer/autoload_files.php +++ b/core/vendor/composer/autoload_files.php @@ -7,20 +7,21 @@ return array( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php', '60799491728b879e74601d83e38b2cad' => $vendorDir . '/illuminate/collections/helpers.php', 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php', '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', + '662a729f963d39afe703c9d9b7ab4a8c' => $vendorDir . '/symfony/polyfill-php83/bootstrap.php', '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php', - '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', + '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', 'ef65a1626449d89d0811cf9befce46f0' => $vendorDir . '/illuminate/events/functions.php', + '47e1160838b5e5a10346ac4084b58c23' => $vendorDir . '/laravel/prompts/src/helpers.php', '35a6ad97d21e794e7e22a17d806652e4' => $vendorDir . '/nunomaduro/termwind/src/Functions.php', '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', 'ad155f8f1cf0d418fe49e248db8c661b' => $vendorDir . '/react/promise/src/functions_include.php', diff --git a/core/vendor/composer/autoload_psr4.php b/core/vendor/composer/autoload_psr4.php index f92b172a31..df77398b68 100644 --- a/core/vendor/composer/autoload_psr4.php +++ b/core/vendor/composer/autoload_psr4.php @@ -9,6 +9,7 @@ 'voku\\' => array($vendorDir . '/voku/portable-ascii/src/voku'), 'suffi\\RedisSessionHandler\\' => array($vendorDir . '/dmitry-suffi/redis-session-handler/src'), 'Wikimedia\\Composer\\Merge\\V2\\' => array($vendorDir . '/wikimedia/composer-merge-plugin/src'), + 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), 'WebPConvert\\' => array($vendorDir . '/rosell-dk/webp-convert/src'), 'Termwind\\' => array($vendorDir . '/nunomaduro/termwind/src'), 'Symfony\\Polyfill\\Php83\\' => array($vendorDir . '/symfony/polyfill-php83'), @@ -44,10 +45,11 @@ '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-message/src', $vendorDir . '/psr/http-factory/src'), + 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/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'), + 'Psr\\Clock\\' => array($vendorDir . '/psr/clock/src'), 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), 'Predis\\' => array($vendorDir . '/predis/predis/src'), 'PhpOption\\' => array($vendorDir . '/phpoption/phpoption/src/PhpOption'), @@ -55,7 +57,9 @@ 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), 'LocateBinaries\\' => array($vendorDir . '/rosell-dk/locate-binaries/src'), 'League\\MimeTypeDetection\\' => array($vendorDir . '/league/mime-type-detection/src'), + 'League\\Flysystem\\Local\\' => array($vendorDir . '/league/flysystem-local'), 'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'), + 'Laravel\\Prompts\\' => array($vendorDir . '/laravel/prompts/src'), 'JsonSchema\\' => array($vendorDir . '/justinrainbow/json-schema/src/JsonSchema'), 'ImageMimeTypeSniffer\\' => array($vendorDir . '/rosell-dk/image-mime-type-sniffer/src'), 'ImageMimeTypeGuesser\\' => array($vendorDir . '/rosell-dk/image-mime-type-guesser/src'), @@ -100,6 +104,7 @@ 'Doctrine\\Common\\Cache\\' => array($vendorDir . '/doctrine/cache/lib/Doctrine/Common/Cache'), 'Doctrine\\Common\\' => array($vendorDir . '/doctrine/event-manager/src'), 'Database\\Seeders\\' => array($baseDir . '/database/seeders'), + 'Cron\\' => array($vendorDir . '/dragonmantank/cron-expression/src/Cron'), 'Composer\\XdebugHandler\\' => array($vendorDir . '/composer/xdebug-handler/src'), 'Composer\\Spdx\\' => array($vendorDir . '/composer/spdx-licenses/src'), 'Composer\\Semver\\' => array($vendorDir . '/composer/semver/src'), diff --git a/core/vendor/composer/autoload_static.php b/core/vendor/composer/autoload_static.php index 30fffafab2..95a3f82987 100644 --- a/core/vendor/composer/autoload_static.php +++ b/core/vendor/composer/autoload_static.php @@ -8,20 +8,21 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 { public static $files = array ( '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + '6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', '60799491728b879e74601d83e38b2cad' => __DIR__ . '/..' . '/illuminate/collections/helpers.php', 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php', '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', + '662a729f963d39afe703c9d9b7ab4a8c' => __DIR__ . '/..' . '/symfony/polyfill-php83/bootstrap.php', '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', - '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', + '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', 'ef65a1626449d89d0811cf9befce46f0' => __DIR__ . '/..' . '/illuminate/events/functions.php', + '47e1160838b5e5a10346ac4084b58c23' => __DIR__ . '/..' . '/laravel/prompts/src/helpers.php', '35a6ad97d21e794e7e22a17d806652e4' => __DIR__ . '/..' . '/nunomaduro/termwind/src/Functions.php', '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', 'ad155f8f1cf0d418fe49e248db8c661b' => __DIR__ . '/..' . '/react/promise/src/functions_include.php', @@ -57,6 +58,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'W' => array ( 'Wikimedia\\Composer\\Merge\\V2\\' => 28, + 'Webmozart\\Assert\\' => 17, 'WebPConvert\\' => 12, ), 'T' => @@ -108,6 +110,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Psr\\Http\\Client\\' => 16, 'Psr\\EventDispatcher\\' => 20, 'Psr\\Container\\' => 14, + 'Psr\\Clock\\' => 10, 'Psr\\Cache\\' => 10, 'Predis\\' => 7, 'PhpOption\\' => 10, @@ -121,7 +124,9 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 array ( 'LocateBinaries\\' => 15, 'League\\MimeTypeDetection\\' => 25, + 'League\\Flysystem\\Local\\' => 23, 'League\\Flysystem\\' => 17, + 'Laravel\\Prompts\\' => 16, ), 'J' => array ( @@ -187,6 +192,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 ), 'C' => array ( + 'Cron\\' => 5, 'Composer\\XdebugHandler\\' => 23, 'Composer\\Spdx\\' => 14, 'Composer\\Semver\\' => 16, @@ -216,6 +222,10 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 array ( 0 => __DIR__ . '/..' . '/wikimedia/composer-merge-plugin/src', ), + 'Webmozart\\Assert\\' => + array ( + 0 => __DIR__ . '/..' . '/webmozart/assert/src', + ), 'WebPConvert\\' => array ( 0 => __DIR__ . '/..' . '/rosell-dk/webp-convert/src', @@ -358,8 +368,8 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 ), 'Psr\\Http\\Message\\' => array ( - 0 => __DIR__ . '/..' . '/psr/http-message/src', - 1 => __DIR__ . '/..' . '/psr/http-factory/src', + 0 => __DIR__ . '/..' . '/psr/http-factory/src', + 1 => __DIR__ . '/..' . '/psr/http-message/src', ), 'Psr\\Http\\Client\\' => array ( @@ -373,6 +383,10 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 array ( 0 => __DIR__ . '/..' . '/psr/container/src', ), + 'Psr\\Clock\\' => + array ( + 0 => __DIR__ . '/..' . '/psr/clock/src', + ), 'Psr\\Cache\\' => array ( 0 => __DIR__ . '/..' . '/psr/cache/src', @@ -401,10 +415,18 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 array ( 0 => __DIR__ . '/..' . '/league/mime-type-detection/src', ), + 'League\\Flysystem\\Local\\' => + array ( + 0 => __DIR__ . '/..' . '/league/flysystem-local', + ), 'League\\Flysystem\\' => array ( 0 => __DIR__ . '/..' . '/league/flysystem/src', ), + 'Laravel\\Prompts\\' => + array ( + 0 => __DIR__ . '/..' . '/laravel/prompts/src', + ), 'JsonSchema\\' => array ( 0 => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema', @@ -584,6 +606,10 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 array ( 0 => __DIR__ . '/../..' . '/database/seeders', ), + 'Cron\\' => + array ( + 0 => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron', + ), 'Composer\\XdebugHandler\\' => array ( 0 => __DIR__ . '/..' . '/composer/xdebug-handler/src', @@ -653,6 +679,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Brick\\Math\\Internal\\Calculator\\GmpCalculator' => __DIR__ . '/..' . '/brick/math/src/Internal/Calculator/GmpCalculator.php', 'Brick\\Math\\Internal\\Calculator\\NativeCalculator' => __DIR__ . '/..' . '/brick/math/src/Internal/Calculator/NativeCalculator.php', 'Brick\\Math\\RoundingMode' => __DIR__ . '/..' . '/brick/math/src/RoundingMode.php', + 'CURLStringFile' => __DIR__ . '/..' . '/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php', 'Carbon\\AbstractTranslator' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/AbstractTranslator.php', 'Carbon\\Carbon' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/Carbon.php', 'Carbon\\CarbonConverterInterface' => __DIR__ . '/..' . '/nesbot/carbon/src/Carbon/CarbonConverterInterface.php', @@ -1048,6 +1075,25 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Composer\\XdebugHandler\\Process' => __DIR__ . '/..' . '/composer/xdebug-handler/src/Process.php', 'Composer\\XdebugHandler\\Status' => __DIR__ . '/..' . '/composer/xdebug-handler/src/Status.php', 'Composer\\XdebugHandler\\XdebugHandler' => __DIR__ . '/..' . '/composer/xdebug-handler/src/XdebugHandler.php', + 'Cron\\AbstractField' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/AbstractField.php', + 'Cron\\CronExpression' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/CronExpression.php', + 'Cron\\DayOfMonthField' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php', + 'Cron\\DayOfWeekField' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php', + 'Cron\\FieldFactory' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/FieldFactory.php', + 'Cron\\FieldFactoryInterface' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/FieldFactoryInterface.php', + 'Cron\\FieldInterface' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/FieldInterface.php', + 'Cron\\HoursField' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/HoursField.php', + 'Cron\\MinutesField' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/MinutesField.php', + 'Cron\\MonthField' => __DIR__ . '/..' . '/dragonmantank/cron-expression/src/Cron/MonthField.php', + 'DateError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateError.php', + 'DateException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateException.php', + 'DateInvalidOperationException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php', + 'DateInvalidTimeZoneException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php', + 'DateMalformedIntervalStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php', + 'DateMalformedPeriodStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php', + 'DateMalformedStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php', + 'DateObjectError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php', + 'DateRangeError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php', 'Doctrine\\Common\\Cache\\Cache' => __DIR__ . '/..' . '/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php', 'Doctrine\\Common\\Cache\\CacheProvider' => __DIR__ . '/..' . '/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php', 'Doctrine\\Common\\Cache\\ClearableCache' => __DIR__ . '/..' . '/doctrine/cache/lib/Doctrine/Common/Cache/ClearableCache.php', @@ -2000,6 +2046,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Illuminate\\Console\\Command' => __DIR__ . '/..' . '/illuminate/console/Command.php', 'Illuminate\\Console\\CommandMutex' => __DIR__ . '/..' . '/illuminate/console/CommandMutex.php', 'Illuminate\\Console\\Concerns\\CallsCommands' => __DIR__ . '/..' . '/illuminate/console/Concerns/CallsCommands.php', + 'Illuminate\\Console\\Concerns\\ConfiguresPrompts' => __DIR__ . '/..' . '/illuminate/console/Concerns/ConfiguresPrompts.php', 'Illuminate\\Console\\Concerns\\CreatesMatchingTest' => __DIR__ . '/..' . '/illuminate/console/Concerns/CreatesMatchingTest.php', 'Illuminate\\Console\\Concerns\\HasParameters' => __DIR__ . '/..' . '/illuminate/console/Concerns/HasParameters.php', 'Illuminate\\Console\\Concerns\\InteractsWithIO' => __DIR__ . '/..' . '/illuminate/console/Concerns/InteractsWithIO.php', @@ -2031,6 +2078,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Illuminate\\Console\\Scheduling\\Schedule' => __DIR__ . '/..' . '/illuminate/console/Scheduling/Schedule.php', 'Illuminate\\Console\\Scheduling\\ScheduleClearCacheCommand' => __DIR__ . '/..' . '/illuminate/console/Scheduling/ScheduleClearCacheCommand.php', 'Illuminate\\Console\\Scheduling\\ScheduleFinishCommand' => __DIR__ . '/..' . '/illuminate/console/Scheduling/ScheduleFinishCommand.php', + 'Illuminate\\Console\\Scheduling\\ScheduleInterruptCommand' => __DIR__ . '/..' . '/illuminate/console/Scheduling/ScheduleInterruptCommand.php', 'Illuminate\\Console\\Scheduling\\ScheduleListCommand' => __DIR__ . '/..' . '/illuminate/console/Scheduling/ScheduleListCommand.php', 'Illuminate\\Console\\Scheduling\\ScheduleRunCommand' => __DIR__ . '/..' . '/illuminate/console/Scheduling/ScheduleRunCommand.php', 'Illuminate\\Console\\Scheduling\\ScheduleTestCommand' => __DIR__ . '/..' . '/illuminate/console/Scheduling/ScheduleTestCommand.php', @@ -2052,6 +2100,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Illuminate\\Console\\View\\Components\\Mutators\\EnsureNoPunctuation' => __DIR__ . '/..' . '/illuminate/console/View/Components/Mutators/EnsureNoPunctuation.php', 'Illuminate\\Console\\View\\Components\\Mutators\\EnsurePunctuation' => __DIR__ . '/..' . '/illuminate/console/View/Components/Mutators/EnsurePunctuation.php', 'Illuminate\\Console\\View\\Components\\Mutators\\EnsureRelativePaths' => __DIR__ . '/..' . '/illuminate/console/View/Components/Mutators/EnsureRelativePaths.php', + 'Illuminate\\Console\\View\\Components\\Secret' => __DIR__ . '/..' . '/illuminate/console/View/Components/Secret.php', 'Illuminate\\Console\\View\\Components\\Task' => __DIR__ . '/..' . '/illuminate/console/View/Components/Task.php', 'Illuminate\\Console\\View\\Components\\TwoColumnDetail' => __DIR__ . '/..' . '/illuminate/console/View/Components/TwoColumnDetail.php', 'Illuminate\\Console\\View\\Components\\Warn' => __DIR__ . '/..' . '/illuminate/console/View/Components/Warn.php', @@ -2109,6 +2158,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => __DIR__ . '/..' . '/illuminate/contracts/Database/Events/MigrationEvent.php', 'Illuminate\\Contracts\\Database\\ModelIdentifier' => __DIR__ . '/..' . '/illuminate/contracts/Database/ModelIdentifier.php', 'Illuminate\\Contracts\\Database\\Query\\Builder' => __DIR__ . '/..' . '/illuminate/contracts/Database/Query/Builder.php', + 'Illuminate\\Contracts\\Database\\Query\\ConditionExpression' => __DIR__ . '/..' . '/illuminate/contracts/Database/Query/ConditionExpression.php', 'Illuminate\\Contracts\\Database\\Query\\Expression' => __DIR__ . '/..' . '/illuminate/contracts/Database/Query/Expression.php', 'Illuminate\\Contracts\\Debug\\ExceptionHandler' => __DIR__ . '/..' . '/illuminate/contracts/Debug/ExceptionHandler.php', 'Illuminate\\Contracts\\Encryption\\DecryptException' => __DIR__ . '/..' . '/illuminate/contracts/Encryption/DecryptException.php', @@ -2322,6 +2372,8 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Illuminate\\Database\\Events\\MigrationsEnded' => __DIR__ . '/..' . '/illuminate/database/Events/MigrationsEnded.php', 'Illuminate\\Database\\Events\\MigrationsEvent' => __DIR__ . '/..' . '/illuminate/database/Events/MigrationsEvent.php', 'Illuminate\\Database\\Events\\MigrationsStarted' => __DIR__ . '/..' . '/illuminate/database/Events/MigrationsStarted.php', + 'Illuminate\\Database\\Events\\ModelPruningFinished' => __DIR__ . '/..' . '/illuminate/database/Events/ModelPruningFinished.php', + 'Illuminate\\Database\\Events\\ModelPruningStarting' => __DIR__ . '/..' . '/illuminate/database/Events/ModelPruningStarting.php', 'Illuminate\\Database\\Events\\ModelsPruned' => __DIR__ . '/..' . '/illuminate/database/Events/ModelsPruned.php', 'Illuminate\\Database\\Events\\NoPendingMigrations' => __DIR__ . '/..' . '/illuminate/database/Events/NoPendingMigrations.php', 'Illuminate\\Database\\Events\\QueryExecuted' => __DIR__ . '/..' . '/illuminate/database/Events/QueryExecuted.php', @@ -2393,6 +2445,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Illuminate\\Database\\Schema\\SqliteSchemaState' => __DIR__ . '/..' . '/illuminate/database/Schema/SqliteSchemaState.php', 'Illuminate\\Database\\Seeder' => __DIR__ . '/..' . '/illuminate/database/Seeder.php', 'Illuminate\\Database\\SqlServerConnection' => __DIR__ . '/..' . '/illuminate/database/SqlServerConnection.php', + 'Illuminate\\Database\\UniqueConstraintViolationException' => __DIR__ . '/..' . '/illuminate/database/UniqueConstraintViolationException.php', 'Illuminate\\Events\\CallQueuedListener' => __DIR__ . '/..' . '/illuminate/events/CallQueuedListener.php', 'Illuminate\\Events\\Dispatcher' => __DIR__ . '/..' . '/illuminate/events/Dispatcher.php', 'Illuminate\\Events\\EventServiceProvider' => __DIR__ . '/..' . '/illuminate/events/EventServiceProvider.php', @@ -2499,6 +2552,8 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Illuminate\\Routing\\Controllers\\HasMiddleware' => __DIR__ . '/..' . '/illuminate/routing/Controllers/HasMiddleware.php', 'Illuminate\\Routing\\Controllers\\Middleware' => __DIR__ . '/..' . '/illuminate/routing/Controllers/Middleware.php', 'Illuminate\\Routing\\CreatesRegularExpressionRouteConstraints' => __DIR__ . '/..' . '/illuminate/routing/CreatesRegularExpressionRouteConstraints.php', + 'Illuminate\\Routing\\Events\\PreparingResponse' => __DIR__ . '/..' . '/illuminate/routing/Events/PreparingResponse.php', + 'Illuminate\\Routing\\Events\\ResponsePrepared' => __DIR__ . '/..' . '/illuminate/routing/Events/ResponsePrepared.php', 'Illuminate\\Routing\\Events\\RouteMatched' => __DIR__ . '/..' . '/illuminate/routing/Events/RouteMatched.php', 'Illuminate\\Routing\\Events\\Routing' => __DIR__ . '/..' . '/illuminate/routing/Events/Routing.php', 'Illuminate\\Routing\\Exceptions\\BackedEnumCaseNotFoundException' => __DIR__ . '/..' . '/illuminate/routing/Exceptions/BackedEnumCaseNotFoundException.php', @@ -2657,6 +2712,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Illuminate\\Support\\ValidatedInput' => __DIR__ . '/..' . '/illuminate/support/ValidatedInput.php', 'Illuminate\\Support\\ViewErrorBag' => __DIR__ . '/..' . '/illuminate/support/ViewErrorBag.php', 'Illuminate\\Translation\\ArrayLoader' => __DIR__ . '/..' . '/illuminate/translation/ArrayLoader.php', + 'Illuminate\\Translation\\CreatesPotentiallyTranslatedStrings' => __DIR__ . '/..' . '/illuminate/translation/CreatesPotentiallyTranslatedStrings.php', 'Illuminate\\Translation\\FileLoader' => __DIR__ . '/..' . '/illuminate/translation/FileLoader.php', 'Illuminate\\Translation\\MessageSelector' => __DIR__ . '/..' . '/illuminate/translation/MessageSelector.php', 'Illuminate\\Translation\\PotentiallyTranslatedString' => __DIR__ . '/..' . '/illuminate/translation/PotentiallyTranslatedString.php', @@ -2676,6 +2732,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Illuminate\\Validation\\NotPwnedVerifier' => __DIR__ . '/..' . '/illuminate/validation/NotPwnedVerifier.php', 'Illuminate\\Validation\\PresenceVerifierInterface' => __DIR__ . '/..' . '/illuminate/validation/PresenceVerifierInterface.php', 'Illuminate\\Validation\\Rule' => __DIR__ . '/..' . '/illuminate/validation/Rule.php', + 'Illuminate\\Validation\\Rules\\Can' => __DIR__ . '/..' . '/illuminate/validation/Rules/Can.php', 'Illuminate\\Validation\\Rules\\DatabaseRule' => __DIR__ . '/..' . '/illuminate/validation/Rules/DatabaseRule.php', 'Illuminate\\Validation\\Rules\\Dimensions' => __DIR__ . '/..' . '/illuminate/validation/Rules/Dimensions.php', 'Illuminate\\Validation\\Rules\\Enum' => __DIR__ . '/..' . '/illuminate/validation/Rules/Enum.php', @@ -2801,58 +2858,99 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'JsonSchema\\Uri\\UriResolver' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php', 'JsonSchema\\Uri\\UriRetriever' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php', 'JsonSchema\\Validator' => __DIR__ . '/..' . '/justinrainbow/json-schema/src/JsonSchema/Validator.php', - 'League\\Flysystem\\AdapterInterface' => __DIR__ . '/..' . '/league/flysystem/src/AdapterInterface.php', - 'League\\Flysystem\\Adapter\\AbstractAdapter' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/AbstractAdapter.php', - 'League\\Flysystem\\Adapter\\AbstractFtpAdapter' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/AbstractFtpAdapter.php', - 'League\\Flysystem\\Adapter\\CanOverwriteFiles' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/CanOverwriteFiles.php', - 'League\\Flysystem\\Adapter\\Ftp' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/Ftp.php', - 'League\\Flysystem\\Adapter\\Ftpd' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/Ftpd.php', - 'League\\Flysystem\\Adapter\\Local' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/Local.php', - 'League\\Flysystem\\Adapter\\NullAdapter' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/NullAdapter.php', - 'League\\Flysystem\\Adapter\\Polyfill\\NotSupportingVisibilityTrait' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php', - 'League\\Flysystem\\Adapter\\Polyfill\\StreamedCopyTrait' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/Polyfill/StreamedCopyTrait.php', - 'League\\Flysystem\\Adapter\\Polyfill\\StreamedReadingTrait' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php', - 'League\\Flysystem\\Adapter\\Polyfill\\StreamedTrait' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php', - 'League\\Flysystem\\Adapter\\Polyfill\\StreamedWritingTrait' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/Polyfill/StreamedWritingTrait.php', - 'League\\Flysystem\\Adapter\\SynologyFtp' => __DIR__ . '/..' . '/league/flysystem/src/Adapter/SynologyFtp.php', + 'Laravel\\Prompts\\Concerns\\Colors' => __DIR__ . '/..' . '/laravel/prompts/src/Concerns/Colors.php', + 'Laravel\\Prompts\\Concerns\\Cursor' => __DIR__ . '/..' . '/laravel/prompts/src/Concerns/Cursor.php', + 'Laravel\\Prompts\\Concerns\\Erase' => __DIR__ . '/..' . '/laravel/prompts/src/Concerns/Erase.php', + 'Laravel\\Prompts\\Concerns\\Events' => __DIR__ . '/..' . '/laravel/prompts/src/Concerns/Events.php', + 'Laravel\\Prompts\\Concerns\\FakesInputOutput' => __DIR__ . '/..' . '/laravel/prompts/src/Concerns/FakesInputOutput.php', + 'Laravel\\Prompts\\Concerns\\Fallback' => __DIR__ . '/..' . '/laravel/prompts/src/Concerns/Fallback.php', + 'Laravel\\Prompts\\Concerns\\Termwind' => __DIR__ . '/..' . '/laravel/prompts/src/Concerns/Termwind.php', + 'Laravel\\Prompts\\Concerns\\Themes' => __DIR__ . '/..' . '/laravel/prompts/src/Concerns/Themes.php', + 'Laravel\\Prompts\\Concerns\\Truncation' => __DIR__ . '/..' . '/laravel/prompts/src/Concerns/Truncation.php', + 'Laravel\\Prompts\\Concerns\\TypedValue' => __DIR__ . '/..' . '/laravel/prompts/src/Concerns/TypedValue.php', + 'Laravel\\Prompts\\ConfirmPrompt' => __DIR__ . '/..' . '/laravel/prompts/src/ConfirmPrompt.php', + 'Laravel\\Prompts\\Key' => __DIR__ . '/..' . '/laravel/prompts/src/Key.php', + 'Laravel\\Prompts\\MultiSelectPrompt' => __DIR__ . '/..' . '/laravel/prompts/src/MultiSelectPrompt.php', + 'Laravel\\Prompts\\Note' => __DIR__ . '/..' . '/laravel/prompts/src/Note.php', + 'Laravel\\Prompts\\Output\\BufferedConsoleOutput' => __DIR__ . '/..' . '/laravel/prompts/src/Output/BufferedConsoleOutput.php', + 'Laravel\\Prompts\\Output\\ConsoleOutput' => __DIR__ . '/..' . '/laravel/prompts/src/Output/ConsoleOutput.php', + 'Laravel\\Prompts\\PasswordPrompt' => __DIR__ . '/..' . '/laravel/prompts/src/PasswordPrompt.php', + 'Laravel\\Prompts\\Prompt' => __DIR__ . '/..' . '/laravel/prompts/src/Prompt.php', + 'Laravel\\Prompts\\SearchPrompt' => __DIR__ . '/..' . '/laravel/prompts/src/SearchPrompt.php', + 'Laravel\\Prompts\\SelectPrompt' => __DIR__ . '/..' . '/laravel/prompts/src/SelectPrompt.php', + 'Laravel\\Prompts\\Spinner' => __DIR__ . '/..' . '/laravel/prompts/src/Spinner.php', + 'Laravel\\Prompts\\SuggestPrompt' => __DIR__ . '/..' . '/laravel/prompts/src/SuggestPrompt.php', + 'Laravel\\Prompts\\Terminal' => __DIR__ . '/..' . '/laravel/prompts/src/Terminal.php', + 'Laravel\\Prompts\\TextPrompt' => __DIR__ . '/..' . '/laravel/prompts/src/TextPrompt.php', + 'Laravel\\Prompts\\Themes\\Default\\Concerns\\DrawsBoxes' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/Concerns/DrawsBoxes.php', + 'Laravel\\Prompts\\Themes\\Default\\Concerns\\DrawsScrollbars' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/Concerns/DrawsScrollbars.php', + 'Laravel\\Prompts\\Themes\\Default\\ConfirmPromptRenderer' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/ConfirmPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\MultiSelectPromptRenderer' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/MultiSelectPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\NoteRenderer' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/NoteRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\PasswordPromptRenderer' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/PasswordPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\Renderer' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/Renderer.php', + 'Laravel\\Prompts\\Themes\\Default\\SearchPromptRenderer' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/SearchPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\SelectPromptRenderer' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/SelectPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\SpinnerRenderer' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/SpinnerRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\SuggestPromptRenderer' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/SuggestPromptRenderer.php', + 'Laravel\\Prompts\\Themes\\Default\\TextPromptRenderer' => __DIR__ . '/..' . '/laravel/prompts/src/Themes/Default/TextPromptRenderer.php', + 'League\\Flysystem\\CalculateChecksumFromStream' => __DIR__ . '/..' . '/league/flysystem/src/CalculateChecksumFromStream.php', + 'League\\Flysystem\\ChecksumAlgoIsNotSupported' => __DIR__ . '/..' . '/league/flysystem/src/ChecksumAlgoIsNotSupported.php', + 'League\\Flysystem\\ChecksumProvider' => __DIR__ . '/..' . '/league/flysystem/src/ChecksumProvider.php', 'League\\Flysystem\\Config' => __DIR__ . '/..' . '/league/flysystem/src/Config.php', - 'League\\Flysystem\\ConfigAwareTrait' => __DIR__ . '/..' . '/league/flysystem/src/ConfigAwareTrait.php', - 'League\\Flysystem\\ConnectionErrorException' => __DIR__ . '/..' . '/league/flysystem/src/ConnectionErrorException.php', - 'League\\Flysystem\\ConnectionRuntimeException' => __DIR__ . '/..' . '/league/flysystem/src/ConnectionRuntimeException.php', 'League\\Flysystem\\CorruptedPathDetected' => __DIR__ . '/..' . '/league/flysystem/src/CorruptedPathDetected.php', - 'League\\Flysystem\\Directory' => __DIR__ . '/..' . '/league/flysystem/src/Directory.php', - 'League\\Flysystem\\Exception' => __DIR__ . '/..' . '/league/flysystem/src/Exception.php', - 'League\\Flysystem\\File' => __DIR__ . '/..' . '/league/flysystem/src/File.php', - 'League\\Flysystem\\FileExistsException' => __DIR__ . '/..' . '/league/flysystem/src/FileExistsException.php', - 'League\\Flysystem\\FileNotFoundException' => __DIR__ . '/..' . '/league/flysystem/src/FileNotFoundException.php', + 'League\\Flysystem\\DirectoryAttributes' => __DIR__ . '/..' . '/league/flysystem/src/DirectoryAttributes.php', + 'League\\Flysystem\\DirectoryListing' => __DIR__ . '/..' . '/league/flysystem/src/DirectoryListing.php', + 'League\\Flysystem\\FileAttributes' => __DIR__ . '/..' . '/league/flysystem/src/FileAttributes.php', 'League\\Flysystem\\Filesystem' => __DIR__ . '/..' . '/league/flysystem/src/Filesystem.php', + 'League\\Flysystem\\FilesystemAdapter' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemAdapter.php', 'League\\Flysystem\\FilesystemException' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemException.php', - 'League\\Flysystem\\FilesystemInterface' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemInterface.php', - 'League\\Flysystem\\FilesystemNotFoundException' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemNotFoundException.php', - 'League\\Flysystem\\Handler' => __DIR__ . '/..' . '/league/flysystem/src/Handler.php', - 'League\\Flysystem\\InvalidRootException' => __DIR__ . '/..' . '/league/flysystem/src/InvalidRootException.php', + 'League\\Flysystem\\FilesystemOperationFailed' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemOperationFailed.php', + 'League\\Flysystem\\FilesystemOperator' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemOperator.php', + 'League\\Flysystem\\FilesystemReader' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemReader.php', + 'League\\Flysystem\\FilesystemWriter' => __DIR__ . '/..' . '/league/flysystem/src/FilesystemWriter.php', + 'League\\Flysystem\\InvalidStreamProvided' => __DIR__ . '/..' . '/league/flysystem/src/InvalidStreamProvided.php', + 'League\\Flysystem\\InvalidVisibilityProvided' => __DIR__ . '/..' . '/league/flysystem/src/InvalidVisibilityProvided.php', + 'League\\Flysystem\\Local\\FallbackMimeTypeDetector' => __DIR__ . '/..' . '/league/flysystem-local/FallbackMimeTypeDetector.php', + 'League\\Flysystem\\Local\\LocalFilesystemAdapter' => __DIR__ . '/..' . '/league/flysystem-local/LocalFilesystemAdapter.php', 'League\\Flysystem\\MountManager' => __DIR__ . '/..' . '/league/flysystem/src/MountManager.php', - 'League\\Flysystem\\NotSupportedException' => __DIR__ . '/..' . '/league/flysystem/src/NotSupportedException.php', - 'League\\Flysystem\\PluginInterface' => __DIR__ . '/..' . '/league/flysystem/src/PluginInterface.php', - 'League\\Flysystem\\Plugin\\AbstractPlugin' => __DIR__ . '/..' . '/league/flysystem/src/Plugin/AbstractPlugin.php', - 'League\\Flysystem\\Plugin\\EmptyDir' => __DIR__ . '/..' . '/league/flysystem/src/Plugin/EmptyDir.php', - 'League\\Flysystem\\Plugin\\ForcedCopy' => __DIR__ . '/..' . '/league/flysystem/src/Plugin/ForcedCopy.php', - 'League\\Flysystem\\Plugin\\ForcedRename' => __DIR__ . '/..' . '/league/flysystem/src/Plugin/ForcedRename.php', - 'League\\Flysystem\\Plugin\\GetWithMetadata' => __DIR__ . '/..' . '/league/flysystem/src/Plugin/GetWithMetadata.php', - 'League\\Flysystem\\Plugin\\ListFiles' => __DIR__ . '/..' . '/league/flysystem/src/Plugin/ListFiles.php', - 'League\\Flysystem\\Plugin\\ListPaths' => __DIR__ . '/..' . '/league/flysystem/src/Plugin/ListPaths.php', - 'League\\Flysystem\\Plugin\\ListWith' => __DIR__ . '/..' . '/league/flysystem/src/Plugin/ListWith.php', - 'League\\Flysystem\\Plugin\\PluggableTrait' => __DIR__ . '/..' . '/league/flysystem/src/Plugin/PluggableTrait.php', - 'League\\Flysystem\\Plugin\\PluginNotFoundException' => __DIR__ . '/..' . '/league/flysystem/src/Plugin/PluginNotFoundException.php', - 'League\\Flysystem\\ReadInterface' => __DIR__ . '/..' . '/league/flysystem/src/ReadInterface.php', - 'League\\Flysystem\\RootViolationException' => __DIR__ . '/..' . '/league/flysystem/src/RootViolationException.php', - 'League\\Flysystem\\SafeStorage' => __DIR__ . '/..' . '/league/flysystem/src/SafeStorage.php', - 'League\\Flysystem\\UnreadableFileException' => __DIR__ . '/..' . '/league/flysystem/src/UnreadableFileException.php', - 'League\\Flysystem\\Util' => __DIR__ . '/..' . '/league/flysystem/src/Util.php', - 'League\\Flysystem\\Util\\ContentListingFormatter' => __DIR__ . '/..' . '/league/flysystem/src/Util/ContentListingFormatter.php', - 'League\\Flysystem\\Util\\MimeType' => __DIR__ . '/..' . '/league/flysystem/src/Util/MimeType.php', - 'League\\Flysystem\\Util\\StreamHasher' => __DIR__ . '/..' . '/league/flysystem/src/Util/StreamHasher.php', + 'League\\Flysystem\\PathNormalizer' => __DIR__ . '/..' . '/league/flysystem/src/PathNormalizer.php', + 'League\\Flysystem\\PathPrefixer' => __DIR__ . '/..' . '/league/flysystem/src/PathPrefixer.php', + 'League\\Flysystem\\PathTraversalDetected' => __DIR__ . '/..' . '/league/flysystem/src/PathTraversalDetected.php', + 'League\\Flysystem\\PortableVisibilityGuard' => __DIR__ . '/..' . '/league/flysystem/src/PortableVisibilityGuard.php', + 'League\\Flysystem\\ProxyArrayAccessToProperties' => __DIR__ . '/..' . '/league/flysystem/src/ProxyArrayAccessToProperties.php', + 'League\\Flysystem\\StorageAttributes' => __DIR__ . '/..' . '/league/flysystem/src/StorageAttributes.php', + 'League\\Flysystem\\SymbolicLinkEncountered' => __DIR__ . '/..' . '/league/flysystem/src/SymbolicLinkEncountered.php', + 'League\\Flysystem\\UnableToCheckDirectoryExistence' => __DIR__ . '/..' . '/league/flysystem/src/UnableToCheckDirectoryExistence.php', + 'League\\Flysystem\\UnableToCheckExistence' => __DIR__ . '/..' . '/league/flysystem/src/UnableToCheckExistence.php', + 'League\\Flysystem\\UnableToCheckFileExistence' => __DIR__ . '/..' . '/league/flysystem/src/UnableToCheckFileExistence.php', + 'League\\Flysystem\\UnableToCopyFile' => __DIR__ . '/..' . '/league/flysystem/src/UnableToCopyFile.php', + 'League\\Flysystem\\UnableToCreateDirectory' => __DIR__ . '/..' . '/league/flysystem/src/UnableToCreateDirectory.php', + 'League\\Flysystem\\UnableToDeleteDirectory' => __DIR__ . '/..' . '/league/flysystem/src/UnableToDeleteDirectory.php', + 'League\\Flysystem\\UnableToDeleteFile' => __DIR__ . '/..' . '/league/flysystem/src/UnableToDeleteFile.php', + 'League\\Flysystem\\UnableToGeneratePublicUrl' => __DIR__ . '/..' . '/league/flysystem/src/UnableToGeneratePublicUrl.php', + 'League\\Flysystem\\UnableToGenerateTemporaryUrl' => __DIR__ . '/..' . '/league/flysystem/src/UnableToGenerateTemporaryUrl.php', + 'League\\Flysystem\\UnableToListContents' => __DIR__ . '/..' . '/league/flysystem/src/UnableToListContents.php', + 'League\\Flysystem\\UnableToMountFilesystem' => __DIR__ . '/..' . '/league/flysystem/src/UnableToMountFilesystem.php', + 'League\\Flysystem\\UnableToMoveFile' => __DIR__ . '/..' . '/league/flysystem/src/UnableToMoveFile.php', + 'League\\Flysystem\\UnableToProvideChecksum' => __DIR__ . '/..' . '/league/flysystem/src/UnableToProvideChecksum.php', + 'League\\Flysystem\\UnableToReadFile' => __DIR__ . '/..' . '/league/flysystem/src/UnableToReadFile.php', + 'League\\Flysystem\\UnableToResolveFilesystemMount' => __DIR__ . '/..' . '/league/flysystem/src/UnableToResolveFilesystemMount.php', + 'League\\Flysystem\\UnableToRetrieveMetadata' => __DIR__ . '/..' . '/league/flysystem/src/UnableToRetrieveMetadata.php', + 'League\\Flysystem\\UnableToSetVisibility' => __DIR__ . '/..' . '/league/flysystem/src/UnableToSetVisibility.php', + 'League\\Flysystem\\UnableToWriteFile' => __DIR__ . '/..' . '/league/flysystem/src/UnableToWriteFile.php', + 'League\\Flysystem\\UnixVisibility\\PortableVisibilityConverter' => __DIR__ . '/..' . '/league/flysystem/src/UnixVisibility/PortableVisibilityConverter.php', + 'League\\Flysystem\\UnixVisibility\\VisibilityConverter' => __DIR__ . '/..' . '/league/flysystem/src/UnixVisibility/VisibilityConverter.php', + 'League\\Flysystem\\UnreadableFileEncountered' => __DIR__ . '/..' . '/league/flysystem/src/UnreadableFileEncountered.php', + 'League\\Flysystem\\UrlGeneration\\ChainedPublicUrlGenerator' => __DIR__ . '/..' . '/league/flysystem/src/UrlGeneration/ChainedPublicUrlGenerator.php', + 'League\\Flysystem\\UrlGeneration\\PrefixPublicUrlGenerator' => __DIR__ . '/..' . '/league/flysystem/src/UrlGeneration/PrefixPublicUrlGenerator.php', + 'League\\Flysystem\\UrlGeneration\\PublicUrlGenerator' => __DIR__ . '/..' . '/league/flysystem/src/UrlGeneration/PublicUrlGenerator.php', + 'League\\Flysystem\\UrlGeneration\\ShardedPrefixPublicUrlGenerator' => __DIR__ . '/..' . '/league/flysystem/src/UrlGeneration/ShardedPrefixPublicUrlGenerator.php', + 'League\\Flysystem\\UrlGeneration\\TemporaryUrlGenerator' => __DIR__ . '/..' . '/league/flysystem/src/UrlGeneration/TemporaryUrlGenerator.php', + 'League\\Flysystem\\Visibility' => __DIR__ . '/..' . '/league/flysystem/src/Visibility.php', + 'League\\Flysystem\\WhitespacePathNormalizer' => __DIR__ . '/..' . '/league/flysystem/src/WhitespacePathNormalizer.php', 'League\\MimeTypeDetection\\EmptyExtensionToMimeTypeMap' => __DIR__ . '/..' . '/league/mime-type-detection/src/EmptyExtensionToMimeTypeMap.php', + 'League\\MimeTypeDetection\\ExtensionLookup' => __DIR__ . '/..' . '/league/mime-type-detection/src/ExtensionLookup.php', 'League\\MimeTypeDetection\\ExtensionMimeTypeDetector' => __DIR__ . '/..' . '/league/mime-type-detection/src/ExtensionMimeTypeDetector.php', 'League\\MimeTypeDetection\\ExtensionToMimeTypeMap' => __DIR__ . '/..' . '/league/mime-type-detection/src/ExtensionToMimeTypeMap.php', 'League\\MimeTypeDetection\\FinfoMimeTypeDetector' => __DIR__ . '/..' . '/league/mime-type-detection/src/FinfoMimeTypeDetector.php', @@ -2962,6 +3060,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Monolog\\Processor\\GitProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php', 'Monolog\\Processor\\HostnameProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php', 'Monolog\\Processor\\IntrospectionProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php', + 'Monolog\\Processor\\LoadAverageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php', 'Monolog\\Processor\\MemoryPeakUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php', 'Monolog\\Processor\\MemoryProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', 'Monolog\\Processor\\MemoryUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php', @@ -2978,6 +3077,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Monolog\\Test\\TestCase' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Test/TestCase.php', 'Monolog\\Utils' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Utils.php', 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', + 'Override' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/Override.php', 'PHPMailer\\PHPMailer\\DSNConfigurator' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/DSNConfigurator.php', 'PHPMailer\\PHPMailer\\Exception' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/Exception.php', 'PHPMailer\\PHPMailer\\OAuth' => __DIR__ . '/..' . '/phpmailer/phpmailer/src/OAuth.php', @@ -2992,6 +3092,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php', 'Predis\\Autoloader' => __DIR__ . '/..' . '/predis/predis/src/Autoloader.php', 'Predis\\Client' => __DIR__ . '/..' . '/predis/predis/src/Client.php', + 'Predis\\ClientConfiguration' => __DIR__ . '/..' . '/predis/predis/src/ClientConfiguration.php', 'Predis\\ClientContextInterface' => __DIR__ . '/..' . '/predis/predis/src/ClientContextInterface.php', 'Predis\\ClientException' => __DIR__ . '/..' . '/predis/predis/src/ClientException.php', 'Predis\\ClientInterface' => __DIR__ . '/..' . '/predis/predis/src/ClientInterface.php', @@ -3021,9 +3122,40 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Predis\\Command\\Argument\\Geospatial\\FromInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Geospatial/FromInterface.php', 'Predis\\Command\\Argument\\Geospatial\\FromLonLat' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Geospatial/FromLonLat.php', 'Predis\\Command\\Argument\\Geospatial\\FromMember' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Geospatial/FromMember.php', + 'Predis\\Command\\Argument\\Search\\AggregateArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/AggregateArguments.php', + 'Predis\\Command\\Argument\\Search\\AlterArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/AlterArguments.php', + 'Predis\\Command\\Argument\\Search\\CommonArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/CommonArguments.php', + 'Predis\\Command\\Argument\\Search\\CreateArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/CreateArguments.php', + 'Predis\\Command\\Argument\\Search\\CursorArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/CursorArguments.php', + 'Predis\\Command\\Argument\\Search\\DropArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/DropArguments.php', + 'Predis\\Command\\Argument\\Search\\ExplainArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/ExplainArguments.php', + 'Predis\\Command\\Argument\\Search\\ProfileArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/ProfileArguments.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\AbstractField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/AbstractField.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\FieldInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/FieldInterface.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\GeoField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/GeoField.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\NumericField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/NumericField.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\TagField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/TagField.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\TextField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/TextField.php', + 'Predis\\Command\\Argument\\Search\\SchemaFields\\VectorField' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SchemaFields/VectorField.php', + 'Predis\\Command\\Argument\\Search\\SearchArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SearchArguments.php', + 'Predis\\Command\\Argument\\Search\\SpellcheckArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SpellcheckArguments.php', + 'Predis\\Command\\Argument\\Search\\SugAddArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SugAddArguments.php', + 'Predis\\Command\\Argument\\Search\\SugGetArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SugGetArguments.php', + 'Predis\\Command\\Argument\\Search\\SynUpdateArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Search/SynUpdateArguments.php', 'Predis\\Command\\Argument\\Server\\LimitInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Server/LimitInterface.php', 'Predis\\Command\\Argument\\Server\\LimitOffsetCount' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Server/LimitOffsetCount.php', 'Predis\\Command\\Argument\\Server\\To' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/Server/To.php', + 'Predis\\Command\\Argument\\TimeSeries\\AddArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/AddArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\AlterArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/AlterArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\CommonArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/CommonArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\CreateArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/CreateArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\DecrByArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/DecrByArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\GetArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/GetArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\IncrByArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/IncrByArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\InfoArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/InfoArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\MGetArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/MGetArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\MRangeArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/MRangeArguments.php', + 'Predis\\Command\\Argument\\TimeSeries\\RangeArguments' => __DIR__ . '/..' . '/predis/predis/src/Command/Argument/TimeSeries/RangeArguments.php', 'Predis\\Command\\Command' => __DIR__ . '/..' . '/predis/predis/src/Command/Command.php', 'Predis\\Command\\CommandInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/CommandInterface.php', 'Predis\\Command\\Factory' => __DIR__ . '/..' . '/predis/predis/src/Command/Factory.php', @@ -3035,6 +3167,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Predis\\Command\\RawCommand' => __DIR__ . '/..' . '/predis/predis/src/Command/RawCommand.php', 'Predis\\Command\\RawFactory' => __DIR__ . '/..' . '/predis/predis/src/Command/RawFactory.php', 'Predis\\Command\\RedisFactory' => __DIR__ . '/..' . '/predis/predis/src/Command/RedisFactory.php', + 'Predis\\Command\\Redis\\ACL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/ACL.php', 'Predis\\Command\\Redis\\APPEND' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/APPEND.php', 'Predis\\Command\\Redis\\AUTH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/AUTH.php', 'Predis\\Command\\Redis\\AbstractCommand\\BZPOPBase' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/AbstractCommand/BZPOPBase.php', @@ -3052,14 +3185,45 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Predis\\Command\\Redis\\BZMPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BZMPOP.php', 'Predis\\Command\\Redis\\BZPOPMAX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BZPOPMAX.php', 'Predis\\Command\\Redis\\BZPOPMIN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BZPOPMIN.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFADD.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFEXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFEXISTS.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFINFO.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFINSERT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFINSERT.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFLOADCHUNK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFLOADCHUNK.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFMADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFMADD.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFMEXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFMEXISTS.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFRESERVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFRESERVE.php', + 'Predis\\Command\\Redis\\BloomFilter\\BFSCANDUMP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/BloomFilter/BFSCANDUMP.php', 'Predis\\Command\\Redis\\CLIENT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CLIENT.php', 'Predis\\Command\\Redis\\COMMAND' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/COMMAND.php', 'Predis\\Command\\Redis\\CONFIG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CONFIG.php', 'Predis\\Command\\Redis\\COPY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/COPY.php', + 'Predis\\Command\\Redis\\Container\\ACL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/ACL.php', 'Predis\\Command\\Redis\\Container\\AbstractContainer' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/AbstractContainer.php', 'Predis\\Command\\Redis\\Container\\ContainerFactory' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/ContainerFactory.php', 'Predis\\Command\\Redis\\Container\\ContainerInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/ContainerInterface.php', 'Predis\\Command\\Redis\\Container\\FunctionContainer' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/FunctionContainer.php', + 'Predis\\Command\\Redis\\Container\\Json\\JSONDEBUG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/Json/JSONDEBUG.php', + 'Predis\\Command\\Redis\\Container\\Search\\FTCONFIG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/Search/FTCONFIG.php', + 'Predis\\Command\\Redis\\Container\\Search\\FTCURSOR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Container/Search/FTCURSOR.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSINCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINCRBY.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINFO.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSINITBYDIM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYDIM.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSINITBYPROB' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYPROB.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSMERGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSMERGE.php', + 'Predis\\Command\\Redis\\CountMinSketch\\CMSQUERY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CountMinSketch/CMSQUERY.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFADD.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFADDNX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFADDNX.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFCOUNT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFCOUNT.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFDEL.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFEXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFEXISTS.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFINFO.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFINSERT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFINSERT.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFINSERTNX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFINSERTNX.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFLOADCHUNK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFLOADCHUNK.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFMEXISTS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFMEXISTS.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFRESERVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFRESERVE.php', + 'Predis\\Command\\Redis\\CuckooFilter\\CFSCANDUMP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/CuckooFilter/CFSCANDUMP.php', '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', @@ -3078,6 +3242,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 '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', + 'Predis\\Command\\Redis\\FCALL_RO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FCALL_RO.php', 'Predis\\Command\\Redis\\FLUSHALL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FLUSHALL.php', 'Predis\\Command\\Redis\\FLUSHDB' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FLUSHDB.php', 'Predis\\Command\\Redis\\FUNCTIONS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/FUNCTIONS.php', @@ -3115,6 +3280,29 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 '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\\Json\\JSONARRAPPEND' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRAPPEND.php', + 'Predis\\Command\\Redis\\Json\\JSONARRINDEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRINDEX.php', + 'Predis\\Command\\Redis\\Json\\JSONARRINSERT' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRINSERT.php', + 'Predis\\Command\\Redis\\Json\\JSONARRLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRLEN.php', + 'Predis\\Command\\Redis\\Json\\JSONARRPOP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRPOP.php', + 'Predis\\Command\\Redis\\Json\\JSONARRTRIM' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONARRTRIM.php', + 'Predis\\Command\\Redis\\Json\\JSONCLEAR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONCLEAR.php', + 'Predis\\Command\\Redis\\Json\\JSONDEBUG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONDEBUG.php', + 'Predis\\Command\\Redis\\Json\\JSONDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONDEL.php', + 'Predis\\Command\\Redis\\Json\\JSONFORGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONFORGET.php', + 'Predis\\Command\\Redis\\Json\\JSONGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONGET.php', + 'Predis\\Command\\Redis\\Json\\JSONMERGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONMERGE.php', + 'Predis\\Command\\Redis\\Json\\JSONMGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONMGET.php', + 'Predis\\Command\\Redis\\Json\\JSONMSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONMSET.php', + 'Predis\\Command\\Redis\\Json\\JSONNUMINCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONNUMINCRBY.php', + 'Predis\\Command\\Redis\\Json\\JSONOBJKEYS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONOBJKEYS.php', + 'Predis\\Command\\Redis\\Json\\JSONOBJLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONOBJLEN.php', + 'Predis\\Command\\Redis\\Json\\JSONRESP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONRESP.php', + 'Predis\\Command\\Redis\\Json\\JSONSET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONSET.php', + 'Predis\\Command\\Redis\\Json\\JSONSTRAPPEND' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONSTRAPPEND.php', + 'Predis\\Command\\Redis\\Json\\JSONSTRLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONSTRLEN.php', + 'Predis\\Command\\Redis\\Json\\JSONTOGGLE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONTOGGLE.php', + 'Predis\\Command\\Redis\\Json\\JSONTYPE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Json/JSONTYPE.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', @@ -3196,12 +3384,74 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 '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\\Search\\FTAGGREGATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTAGGREGATE.php', + 'Predis\\Command\\Redis\\Search\\FTALIASADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTALIASADD.php', + 'Predis\\Command\\Redis\\Search\\FTALIASDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTALIASDEL.php', + 'Predis\\Command\\Redis\\Search\\FTALIASUPDATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTALIASUPDATE.php', + 'Predis\\Command\\Redis\\Search\\FTALTER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTALTER.php', + 'Predis\\Command\\Redis\\Search\\FTCONFIG' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTCONFIG.php', + 'Predis\\Command\\Redis\\Search\\FTCREATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTCREATE.php', + 'Predis\\Command\\Redis\\Search\\FTCURSOR' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTCURSOR.php', + 'Predis\\Command\\Redis\\Search\\FTDICTADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTDICTADD.php', + 'Predis\\Command\\Redis\\Search\\FTDICTDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTDICTDEL.php', + 'Predis\\Command\\Redis\\Search\\FTDICTDUMP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTDICTDUMP.php', + 'Predis\\Command\\Redis\\Search\\FTDROPINDEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTDROPINDEX.php', + 'Predis\\Command\\Redis\\Search\\FTEXPLAIN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTEXPLAIN.php', + 'Predis\\Command\\Redis\\Search\\FTINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTINFO.php', + 'Predis\\Command\\Redis\\Search\\FTPROFILE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTPROFILE.php', + 'Predis\\Command\\Redis\\Search\\FTSEARCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSEARCH.php', + 'Predis\\Command\\Redis\\Search\\FTSPELLCHECK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSPELLCHECK.php', + 'Predis\\Command\\Redis\\Search\\FTSUGADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSUGADD.php', + 'Predis\\Command\\Redis\\Search\\FTSUGDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSUGDEL.php', + 'Predis\\Command\\Redis\\Search\\FTSUGGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSUGGET.php', + 'Predis\\Command\\Redis\\Search\\FTSUGLEN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSUGLEN.php', + 'Predis\\Command\\Redis\\Search\\FTSYNDUMP' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSYNDUMP.php', + 'Predis\\Command\\Redis\\Search\\FTSYNUPDATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTSYNUPDATE.php', + 'Predis\\Command\\Redis\\Search\\FTTAGVALS' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/Search/FTTAGVALS.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTADD.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTBYRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTBYRANK.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTBYREVRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTBYREVRANK.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTCDF' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTCDF.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTCREATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTCREATE.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTINFO.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTMAX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMAX.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTMERGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMERGE.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTMIN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTMIN.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTQUANTILE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTQUANTILE.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTRANK.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTRESET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTRESET.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTREVRANK' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTREVRANK.php', + 'Predis\\Command\\Redis\\TDigest\\TDIGESTTRIMMED_MEAN' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TDigest/TDIGESTTRIMMED_MEAN.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\\TimeSeries\\TSADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSADD.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSALTER' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSALTER.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSCREATE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSCREATE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSCREATERULE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSCREATERULE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSDECRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSDECRBY.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSDEL.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSDELETERULE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSDELETERULE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSGET.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSINCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSINCRBY.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSINFO.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSMADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSMADD.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSMGET' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSMGET.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSMRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSMRANGE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSMREVRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSMREVRANGE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSQUERYINDEX' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSQUERYINDEX.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSRANGE.php', + 'Predis\\Command\\Redis\\TimeSeries\\TSREVRANGE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TimeSeries/TSREVRANGE.php', + 'Predis\\Command\\Redis\\TopK\\TOPKADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKADD.php', + 'Predis\\Command\\Redis\\TopK\\TOPKINCRBY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKINCRBY.php', + 'Predis\\Command\\Redis\\TopK\\TOPKINFO' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKINFO.php', + 'Predis\\Command\\Redis\\TopK\\TOPKLIST' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKLIST.php', + 'Predis\\Command\\Redis\\TopK\\TOPKQUERY' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKQUERY.php', + 'Predis\\Command\\Redis\\TopK\\TOPKRESERVE' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/TopK/TOPKRESERVE.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\\WAITAOF' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/WAITAOF.php', 'Predis\\Command\\Redis\\WATCH' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/WATCH.php', 'Predis\\Command\\Redis\\XADD' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XADD.php', 'Predis\\Command\\Redis\\XDEL' => __DIR__ . '/..' . '/predis/predis/src/Command/Redis/XDEL.php', @@ -3243,12 +3493,25 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 '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\\DumpStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DumpStrategy.php', + 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\FlushStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/FlushStrategy.php', + 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\KillStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/KillStrategy.php', + 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\ListStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/ListStrategy.php', 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\LoadStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/LoadStrategy.php', + 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\RestoreStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/RestoreStrategy.php', + 'Predis\\Command\\Strategy\\ContainerCommands\\Functions\\StatsStrategy' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/ContainerCommands/Functions/StatsStrategy.php', 'Predis\\Command\\Strategy\\StrategyResolverInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/StrategyResolverInterface.php', 'Predis\\Command\\Strategy\\SubcommandStrategyInterface' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/SubcommandStrategyInterface.php', 'Predis\\Command\\Strategy\\SubcommandStrategyResolver' => __DIR__ . '/..' . '/predis/predis/src/Command/Strategy/SubcommandStrategyResolver.php', 'Predis\\Command\\Traits\\Aggregate' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Aggregate.php', 'Predis\\Command\\Traits\\BitByte' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BitByte.php', + 'Predis\\Command\\Traits\\BloomFilters\\BucketSize' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/BucketSize.php', + 'Predis\\Command\\Traits\\BloomFilters\\Capacity' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/Capacity.php', + 'Predis\\Command\\Traits\\BloomFilters\\Error' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/Error.php', + 'Predis\\Command\\Traits\\BloomFilters\\Expansion' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/Expansion.php', + 'Predis\\Command\\Traits\\BloomFilters\\Items' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/Items.php', + 'Predis\\Command\\Traits\\BloomFilters\\MaxIterations' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/MaxIterations.php', + 'Predis\\Command\\Traits\\BloomFilters\\NoCreate' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/BloomFilters/NoCreate.php', 'Predis\\Command\\Traits\\By\\ByArgument' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/By/ByArgument.php', 'Predis\\Command\\Traits\\By\\ByLexByScore' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/By/ByLexByScore.php', 'Predis\\Command\\Traits\\By\\GeoBy' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/By/GeoBy.php', @@ -3257,6 +3520,10 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Predis\\Command\\Traits\\Expire\\ExpireOptions' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Expire/ExpireOptions.php', 'Predis\\Command\\Traits\\From\\GeoFrom' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/From/GeoFrom.php', 'Predis\\Command\\Traits\\Get\\Get' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Get/Get.php', + 'Predis\\Command\\Traits\\Json\\Indent' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Json/Indent.php', + 'Predis\\Command\\Traits\\Json\\Newline' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Json/Newline.php', + 'Predis\\Command\\Traits\\Json\\NxXxArgument' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Json/NxXxArgument.php', + 'Predis\\Command\\Traits\\Json\\Space' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Json/Space.php', 'Predis\\Command\\Traits\\Keys' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Keys.php', 'Predis\\Command\\Traits\\LeftRight' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/LeftRight.php', 'Predis\\Command\\Traits\\Limit\\Limit' => __DIR__ . '/..' . '/predis/predis/src/Command/Traits/Limit/Limit.php', @@ -3302,6 +3569,8 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Predis\\Connection\\ParametersInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/ParametersInterface.php', 'Predis\\Connection\\PhpiredisSocketConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/PhpiredisSocketConnection.php', 'Predis\\Connection\\PhpiredisStreamConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/PhpiredisStreamConnection.php', + 'Predis\\Connection\\RelayConnection' => __DIR__ . '/..' . '/predis/predis/src/Connection/RelayConnection.php', + 'Predis\\Connection\\RelayMethods' => __DIR__ . '/..' . '/predis/predis/src/Connection/RelayMethods.php', 'Predis\\Connection\\Replication\\MasterSlaveReplication' => __DIR__ . '/..' . '/predis/predis/src/Connection/Replication/MasterSlaveReplication.php', 'Predis\\Connection\\Replication\\ReplicationInterface' => __DIR__ . '/..' . '/predis/predis/src/Connection/Replication/ReplicationInterface.php', 'Predis\\Connection\\Replication\\SentinelReplication' => __DIR__ . '/..' . '/predis/predis/src/Connection/Replication/SentinelReplication.php', @@ -3313,6 +3582,8 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Predis\\Pipeline\\ConnectionErrorProof' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/ConnectionErrorProof.php', 'Predis\\Pipeline\\FireAndForget' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/FireAndForget.php', 'Predis\\Pipeline\\Pipeline' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/Pipeline.php', + 'Predis\\Pipeline\\RelayAtomic' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/RelayAtomic.php', + 'Predis\\Pipeline\\RelayPipeline' => __DIR__ . '/..' . '/predis/predis/src/Pipeline/RelayPipeline.php', 'Predis\\PredisException' => __DIR__ . '/..' . '/predis/predis/src/PredisException.php', 'Predis\\Protocol\\ProtocolException' => __DIR__ . '/..' . '/predis/predis/src/Protocol/ProtocolException.php', 'Predis\\Protocol\\ProtocolProcessorInterface' => __DIR__ . '/..' . '/predis/predis/src/Protocol/ProtocolProcessorInterface.php', @@ -3332,6 +3603,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Predis\\PubSub\\AbstractConsumer' => __DIR__ . '/..' . '/predis/predis/src/PubSub/AbstractConsumer.php', 'Predis\\PubSub\\Consumer' => __DIR__ . '/..' . '/predis/predis/src/PubSub/Consumer.php', 'Predis\\PubSub\\DispatcherLoop' => __DIR__ . '/..' . '/predis/predis/src/PubSub/DispatcherLoop.php', + 'Predis\\PubSub\\RelayConsumer' => __DIR__ . '/..' . '/predis/predis/src/PubSub/RelayConsumer.php', 'Predis\\Replication\\MissingMasterException' => __DIR__ . '/..' . '/predis/predis/src/Replication/MissingMasterException.php', 'Predis\\Replication\\ReplicationStrategy' => __DIR__ . '/..' . '/predis/predis/src/Replication/ReplicationStrategy.php', 'Predis\\Replication\\RoleException' => __DIR__ . '/..' . '/predis/predis/src/Replication/RoleException.php', @@ -3351,6 +3623,7 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'Psr\\Cache\\CacheItemInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemInterface.php', 'Psr\\Cache\\CacheItemPoolInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemPoolInterface.php', 'Psr\\Cache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/cache/src/InvalidArgumentException.php', + 'Psr\\Clock\\ClockInterface' => __DIR__ . '/..' . '/psr/clock/src/ClockInterface.php', 'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php', 'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php', 'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php', @@ -4405,6 +4678,9 @@ class ComposerStaticInitfacb702495127c53b6aa7bcb6294d866 'WebPConvert\\Serve\\ServeConvertedWebPWithErrorHandling' => __DIR__ . '/..' . '/rosell-dk/webp-convert/src/Serve/ServeConvertedWebPWithErrorHandling.php', 'WebPConvert\\Serve\\ServeFile' => __DIR__ . '/..' . '/rosell-dk/webp-convert/src/Serve/ServeFile.php', 'WebPConvert\\WebPConvert' => __DIR__ . '/..' . '/rosell-dk/webp-convert/src/WebPConvert.php', + 'Webmozart\\Assert\\Assert' => __DIR__ . '/..' . '/webmozart/assert/src/Assert.php', + 'Webmozart\\Assert\\InvalidArgumentException' => __DIR__ . '/..' . '/webmozart/assert/src/InvalidArgumentException.php', + 'Webmozart\\Assert\\Mixin' => __DIR__ . '/..' . '/webmozart/assert/src/Mixin.php', 'Wikimedia\\Composer\\Merge\\V2\\ExtraPackage' => __DIR__ . '/..' . '/wikimedia/composer-merge-plugin/src/ExtraPackage.php', 'Wikimedia\\Composer\\Merge\\V2\\Logger' => __DIR__ . '/..' . '/wikimedia/composer-merge-plugin/src/Logger.php', 'Wikimedia\\Composer\\Merge\\V2\\MergePlugin' => __DIR__ . '/..' . '/wikimedia/composer-merge-plugin/src/MergePlugin.php', diff --git a/core/vendor/composer/ca-bundle/res/cacert.pem b/core/vendor/composer/ca-bundle/res/cacert.pem index 2ae7b6cb21..6b93dc34f8 100644 --- a/core/vendor/composer/ca-bundle/res/cacert.pem +++ b/core/vendor/composer/ca-bundle/res/cacert.pem @@ -1,7 +1,7 @@ ## ## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Tue Jan 10 04:12:06 2023 GMT +## Certificate data from Mozilla as of: Tue May 30 03:12:04 2023 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates @@ -14,7 +14,7 @@ ## Just configure this file as the SSLCACertificateFile. ## ## Conversion done with mk-ca-bundle.pl version 1.29. -## SHA256: 90c470e705b4b5f36f09684dc50e2b79c8b86989a848b62cd1a7bd6460ee65f6 +## SHA256: c47475103fb05bb562bbadff0d1e72346b03236154e1448a6ca191b740f83507 ## @@ -603,26 +603,6 @@ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= -----END CERTIFICATE----- -Hongkong Post Root CA 1 -======================= ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT -DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx -NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n -IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 -ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr -auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh -qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY -V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV -HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i -h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio -l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei -IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps -T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT -c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== ------END CERTIFICATE----- - SecureSign RootCA11 =================== -----BEGIN CERTIFICATE----- @@ -1261,40 +1241,6 @@ Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= -----END CERTIFICATE----- -E-Tugra Certification Authority -=============================== ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w -DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls -ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw -NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx -QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl -cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD -DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd -hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K -CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g -ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ -BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 -E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz -rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq -jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 -dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG -MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK -kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO -XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 -VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo -a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc -dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV -KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT -Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 -8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G -C7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - T-TeleSec GlobalRoot Class 2 ============================ -----BEGIN CERTIFICATE----- @@ -3370,3 +3316,48 @@ BggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3L snNdo4gIxwwCMQDAqy0Obe0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70e N9k= -----END CERTIFICATE----- + +BJCA Global Root CA1 +==================== +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBUMQswCQYDVQQG +EwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJVFkxHTAbBgNVBAMMFEJK +Q0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAzMTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkG +A1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQD +DBRCSkNBIEdsb2JhbCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFm +CL3ZxRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZspDyRhyS +sTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O558dnJCNPYwpj9mZ9S1Wn +P3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgRat7GGPZHOiJBhyL8xIkoVNiMpTAK+BcW +yqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRj +eulumijWML3mG90Vr4TqnMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNn +MoH1V6XKV0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/pj+b +OT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZOz2nxbkRs1CTqjSSh +GL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXnjSXWgXSHRtQpdaJCbPdzied9v3pK +H9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMB +AAGjQjBAMB0GA1UdDgQWBBTF7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 +YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3KliawLwQ8hOnThJ +dMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u+2D2/VnGKhs/I0qUJDAnyIm8 +60Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuh +TaRjAv04l5U/BXCga99igUOLtFkNSoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW +4AB+dAb/OMRyHdOoP2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmp +GQrI+pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRzznfSxqxx +4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9eVzYH6Eze9mCUAyTF6ps +3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4S +SPfSKcOYKMryMguTjClPPGAyzQWWYezyr/6zcCwupvI= +-----END CERTIFICATE----- + +BJCA Global Root CA2 +==================== +-----BEGIN CERTIFICATE----- +MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQswCQYDVQQGEwJD +TjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJVFkxHTAbBgNVBAMMFEJKQ0Eg +R2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgyMVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UE +BhMCQ04xJjAkBgNVBAoMHUJFSUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRC +SkNBIEdsb2JhbCBSb290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jl +SR9BIgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK++kpRuDCK +/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJKsVF/BvDRgh9Obl+rg/xI +1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8 +W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8g +UXOQwKhbYdDFUDn9hf7B43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== +-----END CERTIFICATE----- diff --git a/core/vendor/composer/class-map-generator/README.md b/core/vendor/composer/class-map-generator/README.md index 3205ae9897..4b5d6a26dc 100644 --- a/core/vendor/composer/class-map-generator/README.md +++ b/core/vendor/composer/class-map-generator/README.md @@ -29,7 +29,7 @@ If all you want is to scan a directory and extract a classmap with all classes/interfaces/traits/enums mapped to their paths, you can simply use: -``` +```php use Composer\ClassMapGenerator\ClassMapGenerator; $map = ClassMapGenerator::createMap('path/to/scan'); @@ -41,7 +41,7 @@ foreach ($map as $symbol => $path) { For more advanced usage, you can instantiate a generator object and call scanPaths one or more time then call getClassMap to get a ClassMap object containing the resulting map + eventual warnings. -``` +```php use Composer\ClassMapGenerator\ClassMapGenerator; $generator = new ClassMapGenerator; diff --git a/core/vendor/composer/class-map-generator/composer.json b/core/vendor/composer/class-map-generator/composer.json index 140b483c8b..59aa759e7c 100644 --- a/core/vendor/composer/class-map-generator/composer.json +++ b/core/vendor/composer/class-map-generator/composer.json @@ -15,8 +15,8 @@ ], "require": { "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6", - "composer/pcre": "^2 || ^3" + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7", + "composer/pcre": "^2.1 || ^3.1" }, "require-dev": { "symfony/phpunit-bridge": "^5", diff --git a/core/vendor/composer/class-map-generator/src/ClassMapGenerator.php b/core/vendor/composer/class-map-generator/src/ClassMapGenerator.php index f347960bf9..fd905c3cab 100644 --- a/core/vendor/composer/class-map-generator/src/ClassMapGenerator.php +++ b/core/vendor/composer/class-map-generator/src/ClassMapGenerator.php @@ -174,7 +174,7 @@ public function scanPaths($path, string $excluded = null, string $autoloadType = } $classes = PhpFileParser::findClasses($filePath); - if ('classmap' !== $autoloadType && isset($namespace, $basePath)) { + if ('classmap' !== $autoloadType && isset($namespace)) { $classes = $this->filterByNamespace($classes, $filePath, $namespace, $autoloadType, $basePath); // if no valid class was found in the file then we do not mark it as scanned as it might still be matched by another rule later @@ -291,7 +291,7 @@ private static function normalizePath(string $path) } // extract a prefix being a protocol://, protocol:, protocol://drive: or simply drive: - if (Preg::isMatch('{^( [0-9a-z]{2,}+: (?: // (?: [a-z]: )? )? | [a-z]: )}ix', $path, $match)) { + if (Preg::isMatchStrictGroups('{^( [0-9a-z]{2,}+: (?: // (?: [a-z]: )? )? | [a-z]: )}ix', $path, $match)) { $prefix = $match[1]; $path = substr($path, \strlen($prefix)); } @@ -313,7 +313,7 @@ private static function normalizePath(string $path) } // ensure c: is normalized to C: - $prefix = Preg::replaceCallback('{(^|://)[a-z]:$}i', function (array $m) { return strtoupper($m[0]); }, $prefix); + $prefix = Preg::replaceCallback('{(?:^|://)[a-z]:$}i', function (array $m) { return strtoupper((string) $m[0]); }, $prefix); return $prefix.$absolute.implode('/', $parts); } diff --git a/core/vendor/composer/class-map-generator/src/PhpFileParser.php b/core/vendor/composer/class-map-generator/src/PhpFileParser.php index fa9b4e3437..b678aeee09 100644 --- a/core/vendor/composer/class-map-generator/src/PhpFileParser.php +++ b/core/vendor/composer/class-map-generator/src/PhpFileParser.php @@ -52,8 +52,8 @@ public static function findClasses(string $path): array } // return early if there is no chance of matching anything in this file - Preg::matchAll('{\b(?:class|interface|trait'.$extraTypes.')\s}i', $contents, $matches); - if (!$matches) { + Preg::matchAllStrictGroups('{\b(?:class|interface|trait'.$extraTypes.')\s}i', $contents, $matches); + if (0 === \count($matches)) { return array(); } @@ -76,6 +76,7 @@ public static function findClasses(string $path): array $namespace = str_replace(array(' ', "\t", "\r", "\n"), '', (string) $matches['nsname'][$i]) . '\\'; } else { $name = $matches['name'][$i]; + assert(is_string($name)); // skip anon classes extending/implementing if ($name === 'extends' || $name === 'implements') { continue; @@ -83,7 +84,7 @@ public static function findClasses(string $path): array if ($name[0] === ':') { // This is an XHP class, https://github.com/facebook/xhp $name = 'xhp'.substr(str_replace(array('-', ':'), array('_', '__'), $name), 1); - } elseif (strtolower($matches['type'][$i]) === 'enum') { + } elseif (strtolower((string) $matches['type'][$i]) === 'enum') { // something like: // enum Foo: int { HERP = '123'; } // The regex above captures the colon, which isn't part of diff --git a/core/vendor/composer/composer/CHANGELOG.md b/core/vendor/composer/composer/CHANGELOG.md index 2a96e5d37d..79ac978a6a 100644 --- a/core/vendor/composer/composer/CHANGELOG.md +++ b/core/vendor/composer/composer/CHANGELOG.md @@ -1,3 +1,10 @@ +### [2.5.8] 2023-06-09 + + * Fixed regression in edge cases where root package gets added to a repository already during the install process (#11495) + * Fixed EventDispatcher on windows picking bat files when using "@php binary" (#11490) + * Fixed ICU CDLR version parsing failing the whole process when ICU cannot initialize the resource bundle (#11492) + * Fixed type declarations on ClassLoader (#11500) + ### [2.5.7] 2023-05-24 * Fixed regression preventing autoloading the dependencies of metapackages when running --no-dev (#11481) @@ -1724,6 +1731,7 @@ * Initial release +[2.5.8]: https://github.com/composer/composer/compare/2.5.7...2.5.8 [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 diff --git a/core/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php b/core/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php index a72151c77c..7824d8f7ea 100644 --- a/core/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php +++ b/core/vendor/composer/composer/src/Composer/Autoload/ClassLoader.php @@ -45,35 +45,34 @@ class ClassLoader /** @var \Closure(string):void */ private static $includeFile; - /** @var ?string */ + /** @var string|null */ private $vendorDir; // PSR-4 /** - * @var array[] - * @psalm-var array> + * @var array> */ private $prefixLengthsPsr4 = array(); /** - * @var array[] - * @psalm-var array> + * @var array> */ private $prefixDirsPsr4 = array(); /** - * @var array[] - * @psalm-var array + * @var list */ private $fallbackDirsPsr4 = array(); // PSR-0 /** - * @var array[] - * @psalm-var array> + * List of PSR-0 prefixes + * + * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) + * + * @var array>> */ private $prefixesPsr0 = array(); /** - * @var array[] - * @psalm-var array + * @var list */ private $fallbackDirsPsr0 = array(); @@ -81,8 +80,7 @@ class ClassLoader private $useIncludePath = false; /** - * @var string[] - * @psalm-var array + * @var array */ private $classMap = array(); @@ -90,21 +88,20 @@ class ClassLoader private $classMapAuthoritative = false; /** - * @var bool[] - * @psalm-var array + * @var array */ private $missingClasses = array(); - /** @var ?string */ + /** @var string|null */ private $apcuPrefix; /** - * @var self[] + * @var array */ private static $registeredLoaders = array(); /** - * @param ?string $vendorDir + * @param string|null $vendorDir */ public function __construct($vendorDir = null) { @@ -113,7 +110,7 @@ public function __construct($vendorDir = null) } /** - * @return string[] + * @return array> */ public function getPrefixes() { @@ -125,8 +122,7 @@ public function getPrefixes() } /** - * @return array[] - * @psalm-return array> + * @return array> */ public function getPrefixesPsr4() { @@ -134,8 +130,7 @@ public function getPrefixesPsr4() } /** - * @return array[] - * @psalm-return array + * @return list */ public function getFallbackDirs() { @@ -143,8 +138,7 @@ public function getFallbackDirs() } /** - * @return array[] - * @psalm-return array + * @return list */ public function getFallbackDirsPsr4() { @@ -152,8 +146,7 @@ public function getFallbackDirsPsr4() } /** - * @return string[] Array of classname => path - * @psalm-return array + * @return array Array of classname => path */ public function getClassMap() { @@ -161,8 +154,7 @@ public function getClassMap() } /** - * @param string[] $classMap Class to filename map - * @psalm-param array $classMap + * @param array $classMap Class to filename map * * @return void */ @@ -179,24 +171,25 @@ public function addClassMap(array $classMap) * Registers a set of PSR-0 directories for a given prefix, either * appending or prepending to the ones previously set for this prefix. * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories * * @return void */ public function add($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { if ($prepend) { $this->fallbackDirsPsr0 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr0 ); } else { $this->fallbackDirsPsr0 = array_merge( $this->fallbackDirsPsr0, - (array) $paths + $paths ); } @@ -205,19 +198,19 @@ public function add($prefix, $paths, $prepend = false) $first = $prefix[0]; if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; + $this->prefixesPsr0[$first][$prefix] = $paths; return; } if ($prepend) { $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixesPsr0[$first][$prefix] ); } else { $this->prefixesPsr0[$first][$prefix] = array_merge( $this->prefixesPsr0[$first][$prefix], - (array) $paths + $paths ); } } @@ -226,9 +219,9 @@ public function add($prefix, $paths, $prepend = false) * Registers a set of PSR-4 directories for a given namespace, either * appending or prepending to the ones previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories * * @throws \InvalidArgumentException * @@ -236,17 +229,18 @@ public function add($prefix, $paths, $prepend = false) */ public function addPsr4($prefix, $paths, $prepend = false) { + $paths = (array) $paths; if (!$prefix) { // Register directories for the root namespace. if ($prepend) { $this->fallbackDirsPsr4 = array_merge( - (array) $paths, + $paths, $this->fallbackDirsPsr4 ); } else { $this->fallbackDirsPsr4 = array_merge( $this->fallbackDirsPsr4, - (array) $paths + $paths ); } } elseif (!isset($this->prefixDirsPsr4[$prefix])) { @@ -256,18 +250,18 @@ public function addPsr4($prefix, $paths, $prepend = false) throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); } $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; + $this->prefixDirsPsr4[$prefix] = $paths; } elseif ($prepend) { // Prepend directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, + $paths, $this->prefixDirsPsr4[$prefix] ); } else { // Append directories for an already registered namespace. $this->prefixDirsPsr4[$prefix] = array_merge( $this->prefixDirsPsr4[$prefix], - (array) $paths + $paths ); } } @@ -276,8 +270,8 @@ public function addPsr4($prefix, $paths, $prepend = false) * Registers a set of PSR-0 directories for a given prefix, * replacing any others previously set for this prefix. * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 base directories + * @param string $prefix The prefix + * @param list|string $paths The PSR-0 base directories * * @return void */ @@ -294,8 +288,8 @@ public function set($prefix, $paths) * Registers a set of PSR-4 directories for a given namespace, * replacing any others previously set for this namespace. * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param list|string $paths The PSR-4 base directories * * @throws \InvalidArgumentException * @@ -481,9 +475,9 @@ public function findFile($class) } /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. + * Returns the currently registered loaders keyed by their corresponding vendor directories. * - * @return self[] + * @return array */ public static function getRegisteredLoaders() { diff --git a/core/vendor/composer/composer/src/Composer/Composer.php b/core/vendor/composer/composer/src/Composer/Composer.php index 0f69d35e16..a6901dcedf 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.7'; + public const VERSION = '2.5.8'; public const BRANCH_ALIAS_VERSION = ''; - public const RELEASE_DATE = '2023-05-24 15:00:39'; + public const RELEASE_DATE = '2023-06-09 17:13:21'; public const SOURCE_VERSION = ''; /** diff --git a/core/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php b/core/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php index 95ca80d207..b564cf367a 100644 --- a/core/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php +++ b/core/vendor/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php @@ -351,6 +351,14 @@ protected function doDispatch(Event $event) if ($matched && !file_exists($match[0])) { $finder = new ExecutableFinder; if ($pathToExec = $finder->find($match[0])) { + if (Platform::isWindows()) { + $execWithoutExt = Preg::replace('{\.(exe|bat|cmd|com)$}i', '', $pathToExec); + // prefer non-extension file if it exists when executing with PHP + if (file_exists($execWithoutExt)) { + $pathToExec = $execWithoutExt; + } + unset($execWithoutExt); + } $pathAndArgs = $pathToExec . substr($pathAndArgs, strlen($match[0])); } } diff --git a/core/vendor/composer/composer/src/Composer/Package/Locker.php b/core/vendor/composer/composer/src/Composer/Package/Locker.php index e03b6bd6ae..f832e797cf 100644 --- a/core/vendor/composer/composer/src/Composer/Package/Locker.php +++ b/core/vendor/composer/composer/src/Composer/Package/Locker.php @@ -515,7 +515,7 @@ 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); + $rootRepo = new RootPackageRepository(clone $package); foreach ($sets as $set) { $installedRepo = new InstalledRepository([$set['repo'], $rootRepo]); diff --git a/core/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php b/core/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php index 116f2b2dc6..2b98cae94d 100644 --- a/core/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php +++ b/core/vendor/composer/composer/src/Composer/Repository/PlatformRepository.php @@ -333,8 +333,10 @@ protected function initialize(): void // Add a separate version for the CLDR library version if ($this->runtime->hasClass('ResourceBundle')) { - $cldrVersion = $this->runtime->invoke(['ResourceBundle', 'create'], ['root', 'ICUDATA', false])->get('Version'); - $this->addLibrary('icu-cldr', $cldrVersion, 'ICU CLDR project version'); + $resourceBundle = $this->runtime->invoke(['ResourceBundle', 'create'], ['root', 'ICUDATA', false]); + if ($resourceBundle !== null) { + $this->addLibrary('icu-cldr', $resourceBundle->get('Version'), 'ICU CLDR project version'); + } } if ($this->runtime->hasClass('IntlChar')) { diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json index 93c1f1edf8..71851e84dd 100644 --- a/core/vendor/composer/installed.json +++ b/core/vendor/composer/installed.json @@ -60,17 +60,17 @@ }, { "name": "composer/ca-bundle", - "version": "1.3.5", - "version_normalized": "1.3.5.0", + "version": "1.3.6", + "version_normalized": "1.3.6.0", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd" + "reference": "90d087e988ff194065333d16bc5cf649872d9cdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/74780ccf8c19d6acb8d65c5f39cd72110e132bbd", - "reference": "74780ccf8c19d6acb8d65c5f39cd72110e132bbd", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/90d087e988ff194065333d16bc5cf649872d9cdb", + "reference": "90d087e988ff194065333d16bc5cf649872d9cdb", "shasum": "" }, "require": { @@ -84,7 +84,7 @@ "symfony/phpunit-bridge": "^4.2 || ^5", "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, - "time": "2023-01-11T08:27:00+00:00", + "time": "2023-06-06T12:02:59+00:00", "type": "library", "extra": { "branch-alias": { @@ -119,7 +119,7 @@ "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" + "source": "https://github.com/composer/ca-bundle/tree/1.3.6" }, "funding": [ { @@ -139,23 +139,23 @@ }, { "name": "composer/class-map-generator", - "version": "1.0.0", - "version_normalized": "1.0.0.0", + "version": "1.1.0", + "version_normalized": "1.1.0.0", "source": { "type": "git", "url": "https://github.com/composer/class-map-generator.git", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" + "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", + "url": "https://api.github.com/repos/composer/class-map-generator/zipball/953cc4ea32e0c31f2185549c7d216d7921f03da9", + "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9", "shasum": "" }, "require": { - "composer/pcre": "^2 || ^3", + "composer/pcre": "^2.1 || ^3.1", "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6" + "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" }, "require-dev": { "phpstan/phpstan": "^1.6", @@ -165,7 +165,7 @@ "symfony/filesystem": "^5.4 || ^6", "symfony/phpunit-bridge": "^5" }, - "time": "2022-06-19T11:31:27+00:00", + "time": "2023-06-30T13:58:57+00:00", "type": "library", "extra": { "branch-alias": { @@ -195,7 +195,7 @@ ], "support": { "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.0.0" + "source": "https://github.com/composer/class-map-generator/tree/1.1.0" }, "funding": [ { @@ -215,17 +215,17 @@ }, { "name": "composer/composer", - "version": "2.5.7", - "version_normalized": "2.5.7.0", + "version": "2.5.8", + "version_normalized": "2.5.8.0", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "d477018d3f2ebd76dede3d3988a0b1a7add4d81e" + "reference": "4c516146167d1392c8b9b269bb7c24115d262164" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/d477018d3f2ebd76dede3d3988a0b1a7add4d81e", - "reference": "d477018d3f2ebd76dede3d3988a0b1a7add4d81e", + "url": "https://api.github.com/repos/composer/composer/zipball/4c516146167d1392c8b9b269bb7c24115d262164", + "reference": "4c516146167d1392c8b9b269bb7c24115d262164", "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-05-24T13:00:40+00:00", + "time": "2023-06-09T15:13:21+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.7" + "source": "https://github.com/composer/composer/tree/2.5.8" }, "funding": [ { @@ -848,17 +848,17 @@ }, { "name": "doctrine/dbal", - "version": "3.6.2", - "version_normalized": "3.6.2.0", + "version": "3.6.6", + "version_normalized": "3.6.6.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c" + "reference": "63646ffd71d1676d2f747f871be31b7e921c7864" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/b4bd1cfbd2b916951696d82e57d054394d84864c", - "reference": "b4bd1cfbd2b916951696d82e57d054394d84864c", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/63646ffd71d1676d2f747f871be31b7e921c7864", + "reference": "63646ffd71d1676d2f747f871be31b7e921c7864", "shasum": "" }, "require": { @@ -871,13 +871,14 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "11.1.0", + "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2022.3", - "phpstan/phpstan": "1.10.9", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.10.29", "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.6", + "phpunit/phpunit": "9.6.9", "psalm/plugin-phpunit": "0.18.4", + "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^5.4|^6.0", "symfony/console": "^4.4|^5.4|^6.0", @@ -886,7 +887,7 @@ "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "time": "2023-04-14T07:25:38+00:00", + "time": "2023-08-17T05:38:17+00:00", "bin": [ "bin/doctrine-dbal" ], @@ -943,7 +944,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.6.2" + "source": "https://github.com/doctrine/dbal/tree/3.6.6" }, "funding": [ { @@ -963,31 +964,35 @@ }, { "name": "doctrine/deprecations", - "version": "v1.1.0", - "version_normalized": "1.1.0.0", + "version": "v1.1.1", + "version_normalized": "1.1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "8cffffb2218e01f3b370bf763e00e81697725259" + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/8cffffb2218e01f3b370bf763e00e81697725259", - "reference": "8cffffb2218e01f3b370bf763e00e81697725259", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", "shasum": "" }, "require": { - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, - "time": "2023-05-29T18:55:17+00:00", + "time": "2023-06-03T09:27:29+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1003,7 +1008,7 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.1.0" + "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" }, "install-path": "../doctrine/deprecations" }, @@ -1103,31 +1108,31 @@ }, { "name": "doctrine/inflector", - "version": "2.0.6", - "version_normalized": "2.0.6.0", + "version": "2.0.8", + "version_normalized": "2.0.8.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^11.0", "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" + "vimeo/psalm": "^4.25 || ^5.4" }, - "time": "2022-10-20T09:10:12+00:00", + "time": "2023-06-16T13:40:37+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -1177,7 +1182,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.6" + "source": "https://github.com/doctrine/inflector/tree/2.0.8" }, "funding": [ { @@ -1275,6 +1280,70 @@ ], "install-path": "../doctrine/lexer" }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.3", + "version_normalized": "3.3.3.0", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "time": "2023-08-10T19:36:49+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "install-path": "../dragonmantank/cron-expression" + }, { "name": "egulias/email-validator", "version": "4.0.1", @@ -1621,23 +1690,23 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.7.0", - "version_normalized": "7.7.0.0", + "version": "7.8.0", + "version_normalized": "7.8.0.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1658,7 +1727,7 @@ "ext-intl": "Required for Internationalized Domain Name (IDN) support", "psr/log": "Required for using the Log middleware" }, - "time": "2023-05-21T14:04:53+00:00", + "time": "2023-08-27T10:20:53+00:00", "type": "library", "extra": { "bamarni-bin": { @@ -1730,7 +1799,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.7.0" + "source": "https://github.com/guzzle/guzzle/tree/7.8.0" }, "funding": [ { @@ -1750,17 +1819,17 @@ }, { "name": "guzzlehttp/promises", - "version": "2.0.0", - "version_normalized": "2.0.0.0", + "version": "2.0.1", + "version_normalized": "2.0.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6" + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6", - "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6", + "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", + "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", "shasum": "" }, "require": { @@ -1770,7 +1839,7 @@ "bamarni/composer-bin-plugin": "^1.8.1", "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, - "time": "2023-05-21T13:50:22+00:00", + "time": "2023-08-03T15:11:55+00:00", "type": "library", "extra": { "bamarni-bin": { @@ -1816,7 +1885,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.0" + "source": "https://github.com/guzzle/promises/tree/2.0.1" }, "funding": [ { @@ -1836,17 +1905,17 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.5.0", - "version_normalized": "2.5.0.0", + "version": "2.6.1", + "version_normalized": "2.6.1.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6" + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", "shasum": "" }, "require": { @@ -1867,7 +1936,7 @@ "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, - "time": "2023-04-17T16:11:26+00:00", + "time": "2023-08-27T10:13:57+00:00", "type": "library", "extra": { "bamarni-bin": { @@ -1935,7 +2004,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.5.0" + "source": "https://github.com/guzzle/psr7/tree/2.6.1" }, "funding": [ { @@ -1955,17 +2024,17 @@ }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.1", - "version_normalized": "1.0.1.0", + "version": "v1.0.2", + "version_normalized": "1.0.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2" + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/b945d74a55a25a949158444f09ec0d3c120d69e2", - "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/61bf437fc2197f587f6857d3ff903a24f1731b5d", + "reference": "61bf437fc2197f587f6857d3ff903a24f1731b5d", "shasum": "" }, "require": { @@ -1973,16 +2042,12 @@ "symfony/polyfill-php80": "^1.17" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", "phpunit/phpunit": "^8.5.19 || ^9.5.8", "uri-template/tests": "1.0.0" }, - "time": "2021-10-07T12:57:01+00:00", + "time": "2023-08-27T10:19:19+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "installation-source": "dist", "autoload": { "psr-4": { @@ -2022,7 +2087,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.1" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.2" }, "funding": [ { @@ -2042,17 +2107,17 @@ }, { "name": "illuminate/bus", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/bus.git", - "reference": "ec2250684df1ff5cddc4ae639ec913996a4bd0be" + "reference": "aba48b9b7b9266a62b8e5ece47919533b3d49de7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/bus/zipball/ec2250684df1ff5cddc4ae639ec913996a4bd0be", - "reference": "ec2250684df1ff5cddc4ae639ec913996a4bd0be", + "url": "https://api.github.com/repos/illuminate/bus/zipball/aba48b9b7b9266a62b8e5ece47919533b3d49de7", + "reference": "aba48b9b7b9266a62b8e5ece47919533b3d49de7", "shasum": "" }, "require": { @@ -2065,7 +2130,7 @@ "suggest": { "illuminate/queue": "Required to use closures when chaining jobs (^7.0)." }, - "time": "2023-05-22T13:32:28+00:00", + "time": "2023-08-27T20:33:50+00:00", "type": "library", "extra": { "branch-alias": { @@ -2098,17 +2163,17 @@ }, { "name": "illuminate/cache", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/cache.git", - "reference": "8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72" + "reference": "f86b529f8c0921d56adb42f37fb5e022110bba1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/cache/zipball/8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72", - "reference": "8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72", + "url": "https://api.github.com/repos/illuminate/cache/zipball/f86b529f8c0921d56adb42f37fb5e022110bba1e", + "reference": "f86b529f8c0921d56adb42f37fb5e022110bba1e", "shasum": "" }, "require": { @@ -2130,7 +2195,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-24T13:58:54+00:00", + "time": "2023-07-27T14:06:46+00:00", "type": "library", "extra": { "branch-alias": { @@ -2163,17 +2228,17 @@ }, { "name": "illuminate/collections", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/collections.git", - "reference": "73652e915e56531e08c06bd356d8fa8bc346812e" + "reference": "f494398dbaaead9e5ff16a18002d11634e8358e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/73652e915e56531e08c06bd356d8fa8bc346812e", - "reference": "73652e915e56531e08c06bd356d8fa8bc346812e", + "url": "https://api.github.com/repos/illuminate/collections/zipball/f494398dbaaead9e5ff16a18002d11634e8358e6", + "reference": "f494398dbaaead9e5ff16a18002d11634e8358e6", "shasum": "" }, "require": { @@ -2185,7 +2250,7 @@ "suggest": { "symfony/var-dumper": "Required to use the dump method (^6.2)." }, - "time": "2023-05-24T17:26:41+00:00", + "time": "2023-08-11T14:48:51+00:00", "type": "library", "extra": { "branch-alias": { @@ -2221,8 +2286,8 @@ }, { "name": "illuminate/conditionable", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/conditionable.git", @@ -2270,8 +2335,8 @@ }, { "name": "illuminate/config", - "version": "v10.12.0", - "version_normalized": "10.12.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/config.git", @@ -2321,17 +2386,17 @@ }, { "name": "illuminate/console", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/console.git", - "reference": "ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339" + "reference": "08acf79af3f2f0ba1c61ac37360b24710d7c6b88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/console/zipball/ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339", - "reference": "ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339", + "url": "https://api.github.com/repos/illuminate/console/zipball/08acf79af3f2f0ba1c61ac37360b24710d7c6b88", + "reference": "08acf79af3f2f0ba1c61ac37360b24710d7c6b88", "shasum": "" }, "require": { @@ -2341,6 +2406,7 @@ "illuminate/macroable": "^10.0", "illuminate/support": "^10.0", "illuminate/view": "^10.0", + "laravel/prompts": "^0.1", "nunomaduro/termwind": "^1.13", "php": "^8.1", "symfony/console": "^6.2", @@ -2355,7 +2421,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-23T18:03:05+00:00", + "time": "2023-08-22T13:18:30+00:00", "type": "library", "extra": { "branch-alias": { @@ -2388,17 +2454,17 @@ }, { "name": "illuminate/container", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/container.git", - "reference": "f85a85791c75a754190d6495e6ca611faaa64f61" + "reference": "ddc26273085fad3c471b2602ad820e0097ff7939" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/container/zipball/f85a85791c75a754190d6495e6ca611faaa64f61", - "reference": "f85a85791c75a754190d6495e6ca611faaa64f61", + "url": "https://api.github.com/repos/illuminate/container/zipball/ddc26273085fad3c471b2602ad820e0097ff7939", + "reference": "ddc26273085fad3c471b2602ad820e0097ff7939", "shasum": "" }, "require": { @@ -2409,7 +2475,7 @@ "provide": { "psr/container-implementation": "1.1|2.0" }, - "time": "2023-04-03T19:51:31+00:00", + "time": "2023-06-18T09:12:03+00:00", "type": "library", "extra": { "branch-alias": { @@ -2442,17 +2508,17 @@ }, { "name": "illuminate/contracts", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "0f8b766d66df7e0784ea73cfe4caf7a48b623f53" + "reference": "eb1a7e72e159136a832f2c0467de5570bdc208ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/0f8b766d66df7e0784ea73cfe4caf7a48b623f53", - "reference": "0f8b766d66df7e0784ea73cfe4caf7a48b623f53", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/eb1a7e72e159136a832f2c0467de5570bdc208ae", + "reference": "eb1a7e72e159136a832f2c0467de5570bdc208ae", "shasum": "" }, "require": { @@ -2460,7 +2526,7 @@ "psr/container": "^1.1.1|^2.0.1", "psr/simple-cache": "^1.0|^2.0|^3.0" }, - "time": "2023-05-01T15:41:14+00:00", + "time": "2023-07-26T21:27:34+00:00", "type": "library", "extra": { "branch-alias": { @@ -2493,17 +2559,17 @@ }, { "name": "illuminate/database", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/database.git", - "reference": "5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4" + "reference": "d15f10d02bbfecf144366d63e3c13d804b64eae6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/database/zipball/5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4", - "reference": "5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4", + "url": "https://api.github.com/repos/illuminate/database/zipball/d15f10d02bbfecf144366d63e3c13d804b64eae6", + "reference": "d15f10d02bbfecf144366d63e3c13d804b64eae6", "shasum": "" }, "require": { @@ -2526,7 +2592,7 @@ "illuminate/pagination": "Required to paginate the result set (^10.0).", "symfony/finder": "Required to use Eloquent model factories (^6.2)." }, - "time": "2023-05-29T15:22:45+00:00", + "time": "2023-08-29T13:06:25+00:00", "type": "library", "extra": { "branch-alias": { @@ -2565,17 +2631,17 @@ }, { "name": "illuminate/events", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/events.git", - "reference": "c68138ea57360c19a145e5912fb474cfd1845366" + "reference": "e8cbfa31e1ada8d178ffcd7a5e26e101ec280c59" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/events/zipball/c68138ea57360c19a145e5912fb474cfd1845366", - "reference": "c68138ea57360c19a145e5912fb474cfd1845366", + "url": "https://api.github.com/repos/illuminate/events/zipball/e8cbfa31e1ada8d178ffcd7a5e26e101ec280c59", + "reference": "e8cbfa31e1ada8d178ffcd7a5e26e101ec280c59", "shasum": "" }, "require": { @@ -2587,7 +2653,7 @@ "illuminate/support": "^10.0", "php": "^8.1" }, - "time": "2023-02-16T15:35:09+00:00", + "time": "2023-08-11T15:02:04+00:00", "type": "library", "extra": { "branch-alias": { @@ -2623,17 +2689,17 @@ }, { "name": "illuminate/filesystem", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/filesystem.git", - "reference": "53a46fed9b31617ce3a786690b2294f0a54559ea" + "reference": "da2619dd556b61e4c76c062c8acff98bc5bac3e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/filesystem/zipball/53a46fed9b31617ce3a786690b2294f0a54559ea", - "reference": "53a46fed9b31617ce3a786690b2294f0a54559ea", + "url": "https://api.github.com/repos/illuminate/filesystem/zipball/da2619dd556b61e4c76c062c8acff98bc5bac3e8", + "reference": "da2619dd556b61e4c76c062c8acff98bc5bac3e8", "shasum": "" }, "require": { @@ -2657,7 +2723,7 @@ "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", "symfony/mime": "Required to enable support for guessing extensions (^6.2)." }, - "time": "2023-03-22T21:14:41+00:00", + "time": "2023-08-25T18:39:53+00:00", "type": "library", "extra": { "branch-alias": { @@ -2690,17 +2756,17 @@ }, { "name": "illuminate/http", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/http.git", - "reference": "e08bf43e2ca73d06d0082a4e993878f8a4620ae4" + "reference": "52cc8f45705109816f4f9b9b8db615c6a5a8400d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/http/zipball/e08bf43e2ca73d06d0082a4e993878f8a4620ae4", - "reference": "e08bf43e2ca73d06d0082a4e993878f8a4620ae4", + "url": "https://api.github.com/repos/illuminate/http/zipball/52cc8f45705109816f4f9b9b8db615c6a5a8400d", + "reference": "52cc8f45705109816f4f9b9b8db615c6a5a8400d", "shasum": "" }, "require": { @@ -2720,7 +2786,7 @@ "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "guzzlehttp/guzzle": "Required to use the HTTP Client (^7.5)." }, - "time": "2023-05-15T14:58:02+00:00", + "time": "2023-08-23T18:59:47+00:00", "type": "library", "extra": { "branch-alias": { @@ -2753,17 +2819,17 @@ }, { "name": "illuminate/log", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/log.git", - "reference": "65ed49152b121fc82116223f092b68fe8a3b4ba0" + "reference": "9cff51ef5d0014e4ffe986359add45342adbf0a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/log/zipball/65ed49152b121fc82116223f092b68fe8a3b4ba0", - "reference": "65ed49152b121fc82116223f092b68fe8a3b4ba0", + "url": "https://api.github.com/repos/illuminate/log/zipball/9cff51ef5d0014e4ffe986359add45342adbf0a8", + "reference": "9cff51ef5d0014e4ffe986359add45342adbf0a8", "shasum": "" }, "require": { @@ -2772,7 +2838,7 @@ "monolog/monolog": "^3.0", "php": "^8.1" }, - "time": "2023-03-13T03:05:16+00:00", + "time": "2023-07-08T20:34:59+00:00", "type": "library", "extra": { "branch-alias": { @@ -2805,23 +2871,23 @@ }, { "name": "illuminate/macroable", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/macroable.git", - "reference": "6b80109438161d45a5f2bdf7ecdd56cbd0096c3d" + "reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/macroable/zipball/6b80109438161d45a5f2bdf7ecdd56cbd0096c3d", - "reference": "6b80109438161d45a5f2bdf7ecdd56cbd0096c3d", + "url": "https://api.github.com/repos/illuminate/macroable/zipball/dff667a46ac37b634dcf68909d9d41e94dc97c27", + "reference": "dff667a46ac37b634dcf68909d9d41e94dc97c27", "shasum": "" }, "require": { "php": "^8.1" }, - "time": "2023-03-17T13:33:11+00:00", + "time": "2023-06-05T12:46:42+00:00", "type": "library", "extra": { "branch-alias": { @@ -2854,8 +2920,8 @@ }, { "name": "illuminate/pagination", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/pagination.git", @@ -2907,8 +2973,8 @@ }, { "name": "illuminate/pipeline", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/pipeline.git", @@ -2958,17 +3024,17 @@ }, { "name": "illuminate/redis", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/redis.git", - "reference": "a86771f93c92b827e19f007347d65d1197202793" + "reference": "896a0f1940147417f8ce88cced703691bc5548b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/redis/zipball/a86771f93c92b827e19f007347d65d1197202793", - "reference": "a86771f93c92b827e19f007347d65d1197202793", + "url": "https://api.github.com/repos/illuminate/redis/zipball/896a0f1940147417f8ce88cced703691bc5548b0", + "reference": "896a0f1940147417f8ce88cced703691bc5548b0", "shasum": "" }, "require": { @@ -2982,7 +3048,7 @@ "ext-redis": "Required to use the phpredis connector (^4.0|^5.0).", "predis/predis": "Required to use the predis connector (^2.0.2)." }, - "time": "2023-05-08T14:32:30+00:00", + "time": "2023-08-02T14:11:43+00:00", "type": "library", "extra": { "branch-alias": { @@ -3015,17 +3081,17 @@ }, { "name": "illuminate/routing", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/routing.git", - "reference": "62e17faf9f9f4bb80f00c32599b630f5fcd257d7" + "reference": "188288e6e4184f41aa496f5dcee6da2913bebe6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/routing/zipball/62e17faf9f9f4bb80f00c32599b630f5fcd257d7", - "reference": "62e17faf9f9f4bb80f00c32599b630f5fcd257d7", + "url": "https://api.github.com/repos/illuminate/routing/zipball/188288e6e4184f41aa496f5dcee6da2913bebe6d", + "reference": "188288e6e4184f41aa496f5dcee6da2913bebe6d", "shasum": "" }, "require": { @@ -3049,7 +3115,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-23T18:17:17+00:00", + "time": "2023-08-27T20:33:50+00:00", "type": "library", "extra": { "branch-alias": { @@ -3082,8 +3148,8 @@ }, { "name": "illuminate/session", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/session.git", @@ -3142,17 +3208,17 @@ }, { "name": "illuminate/support", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "679edd76b4ba656c3d4ee2dbf53e99e31a73448b" + "reference": "73bf6767ecac70d02ab70e655fc7bfad3b812d69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/679edd76b4ba656c3d4ee2dbf53e99e31a73448b", - "reference": "679edd76b4ba656c3d4ee2dbf53e99e31a73448b", + "url": "https://api.github.com/repos/illuminate/support/zipball/73bf6767ecac70d02ab70e655fc7bfad3b812d69", + "reference": "73bf6767ecac70d02ab70e655fc7bfad3b812d69", "shasum": "" }, "require": { @@ -3164,7 +3230,7 @@ "illuminate/conditionable": "^10.0", "illuminate/contracts": "^10.0", "illuminate/macroable": "^10.0", - "nesbot/carbon": "^2.62.1", + "nesbot/carbon": "^2.67", "php": "^8.1", "voku/portable-ascii": "^2.0" }, @@ -3180,7 +3246,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-26T14:41:26+00:00", + "time": "2023-08-25T14:28:45+00:00", "type": "library", "extra": { "branch-alias": { @@ -3216,17 +3282,17 @@ }, { "name": "illuminate/translation", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/translation.git", - "reference": "6c61b26735d57797753b5970029505d3854be127" + "reference": "242fb14ad898cd51a50a33956c249fe43548930f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/translation/zipball/6c61b26735d57797753b5970029505d3854be127", - "reference": "6c61b26735d57797753b5970029505d3854be127", + "url": "https://api.github.com/repos/illuminate/translation/zipball/242fb14ad898cd51a50a33956c249fe43548930f", + "reference": "242fb14ad898cd51a50a33956c249fe43548930f", "shasum": "" }, "require": { @@ -3237,7 +3303,7 @@ "illuminate/support": "^10.0", "php": "^8.1" }, - "time": "2023-02-14T15:00:37+00:00", + "time": "2023-06-27T13:25:34+00:00", "type": "library", "extra": { "branch-alias": { @@ -3270,17 +3336,17 @@ }, { "name": "illuminate/validation", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/validation.git", - "reference": "86e252487c170fb88cdb72f74aee1a8d187d377a" + "reference": "2b61d283b463f69094874717526155bb2aef2642" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/validation/zipball/86e252487c170fb88cdb72f74aee1a8d187d377a", - "reference": "86e252487c170fb88cdb72f74aee1a8d187d377a", + "url": "https://api.github.com/repos/illuminate/validation/zipball/2b61d283b463f69094874717526155bb2aef2642", + "reference": "2b61d283b463f69094874717526155bb2aef2642", "shasum": "" }, "require": { @@ -3301,7 +3367,7 @@ "suggest": { "illuminate/database": "Required to use the database presence verifier (^10.0)." }, - "time": "2023-05-29T06:27:01+00:00", + "time": "2023-08-28T14:25:12+00:00", "type": "library", "extra": { "branch-alias": { @@ -3334,17 +3400,17 @@ }, { "name": "illuminate/view", - "version": "v10.13.0", - "version_normalized": "10.13.0.0", + "version": "v10.21.0", + "version_normalized": "10.21.0.0", "source": { "type": "git", "url": "https://github.com/illuminate/view.git", - "reference": "acf034c30db23debb797a94641a43780aeecd6c1" + "reference": "953183a224c659240ff8956bae58df4b456462a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/view/zipball/acf034c30db23debb797a94641a43780aeecd6c1", - "reference": "acf034c30db23debb797a94641a43780aeecd6c1", + "url": "https://api.github.com/repos/illuminate/view/zipball/953183a224c659240ff8956bae58df4b456462a3", + "reference": "953183a224c659240ff8956bae58df4b456462a3", "shasum": "" }, "require": { @@ -3358,7 +3424,7 @@ "illuminate/support": "^10.0", "php": "^8.1" }, - "time": "2023-05-30T14:18:22+00:00", + "time": "2023-08-28T13:34:15+00:00", "type": "library", "extra": { "branch-alias": { @@ -3391,17 +3457,17 @@ }, { "name": "james-heinrich/phpthumb", - "version": "v1.7.20", - "version_normalized": "1.7.20.0", + "version": "v1.7.21", + "version_normalized": "1.7.21.0", "source": { "type": "git", "url": "https://github.com/JamesHeinrich/phpThumb.git", - "reference": "6c642aad3fa33ce88fe1307feaa6316edfc9ed76" + "reference": "7ee966b38ddd7eb4d8091389aa514604710711c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/JamesHeinrich/phpThumb/zipball/6c642aad3fa33ce88fe1307feaa6316edfc9ed76", - "reference": "6c642aad3fa33ce88fe1307feaa6316edfc9ed76", + "url": "https://api.github.com/repos/JamesHeinrich/phpThumb/zipball/7ee966b38ddd7eb4d8091389aa514604710711c8", + "reference": "7ee966b38ddd7eb4d8091389aa514604710711c8", "shasum": "" }, "require": { @@ -3411,7 +3477,7 @@ "ext-gd": "PHP GD library", "ext-imagick": "PHP ImageMagick" }, - "time": "2023-01-09T14:23:26+00:00", + "time": "2023-07-14T21:25:25+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3445,7 +3511,7 @@ ], "support": { "issues": "https://github.com/JamesHeinrich/phpThumb/issues", - "source": "https://github.com/JamesHeinrich/phpThumb/tree/v1.7.20" + "source": "https://github.com/JamesHeinrich/phpThumb/tree/v1.7.21" }, "install-path": "../james-heinrich/phpthumb" }, @@ -3523,58 +3589,105 @@ "install-path": "../justinrainbow/json-schema" }, { - "name": "league/flysystem", - "version": "1.1.10", - "version_normalized": "1.1.10.0", + "name": "laravel/prompts", + "version": "v0.1.6", + "version_normalized": "0.1.6.0", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1" + "url": "https://github.com/laravel/prompts.git", + "reference": "b514c5620e1b3b61221b0024dc88def26d9654f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/3239285c825c152bcc315fe0e87d6b55f5972ed1", - "reference": "3239285c825c152bcc315fe0e87d6b55f5972ed1", + "url": "https://api.github.com/repos/laravel/prompts/zipball/b514c5620e1b3b61221b0024dc88def26d9654f4", + "reference": "b514c5620e1b3b61221b0024dc88def26d9654f4", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2" }, "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-mockery": "^1.1" }, "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" - }, - "time": "2022-10-04T09:16:37+00:00", + "ext-pcntl": "Required for the spinner to be animated." + }, + "time": "2023-08-18T13:32:23+00:00", "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" + "installation-source": "dist", + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" } }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.6" + }, + "install-path": "../laravel/prompts" + }, + { + "name": "league/flysystem", + "version": "3.15.1", + "version_normalized": "3.15.1.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "a141d430414fcb8bf797a18716b09f759a385bed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a141d430414fcb8bf797a18716b09f759a385bed", + "reference": "a141d430414fcb8bf797a18716b09f759a385bed", + "shasum": "" + }, + "require": { + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.220.0", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "time": "2023-05-04T09:04:26+00:00", + "type": "library", "installation-source": "dist", "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "League\\Flysystem\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3584,66 +3697,127 @@ "authors": [ { "name": "Frank de Jonge", - "email": "info@frenky.net" + "email": "info@frankdejonge.nl" } ], - "description": "Filesystem abstraction: Many filesystems, one API.", + "description": "File storage abstraction for PHP", "keywords": [ - "Cloud Files", "WebDAV", - "abstraction", "aws", "cloud", - "copy.com", - "dropbox", - "file systems", + "file", "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" + "source": "https://github.com/thephpleague/flysystem/tree/3.15.1" }, "funding": [ { - "url": "https://offset.earth/frankdejonge", - "type": "other" + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" } ], "install-path": "../league/flysystem" }, + { + "name": "league/flysystem-local", + "version": "3.15.0", + "version_normalized": "3.15.0.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/543f64c397fefdf9cfeac443ffb6beff602796b3", + "reference": "543f64c397fefdf9cfeac443ffb6beff602796b3", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "time": "2023-05-02T20:02:14+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-local/issues", + "source": "https://github.com/thephpleague/flysystem-local/tree/3.15.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "install-path": "../league/flysystem-local" + }, { "name": "league/mime-type-detection", - "version": "1.11.0", - "version_normalized": "1.11.0.0", + "version": "1.13.0", + "version_normalized": "1.13.0.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/a6dfb1194a2946fcdc1f38219445234f65b35c96", + "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96", "shasum": "" }, "require": { "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" }, - "time": "2022-04-17T13:12:02+00:00", + "time": "2023-08-05T12:09:49+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -3664,7 +3838,7 @@ "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" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.13.0" }, "funding": [ { @@ -3680,17 +3854,17 @@ }, { "name": "monolog/monolog", - "version": "3.3.1", - "version_normalized": "3.3.1.0", + "version": "3.4.0", + "version_normalized": "3.4.0.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" + "reference": "e2392369686d420ca32df3803de28b5d6f76867d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", - "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e2392369686d420ca32df3803de28b5d6f76867d", + "reference": "e2392369686d420ca32df3803de28b5d6f76867d", "shasum": "" }, "require": { @@ -3705,7 +3879,7 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "graylog2/gelf-php": "^1.4.2 || ^2.0", "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", @@ -3713,7 +3887,7 @@ "phpstan/phpstan": "^1.9", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^9.5.26", + "phpunit/phpunit": "^10.1", "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", "symfony/mailer": "^5.4 || ^6", @@ -3735,7 +3909,7 @@ "rollbar/rollbar": "Allow sending log messages to Rollbar", "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, - "time": "2023-02-06T13:46:10+00:00", + "time": "2023-06-21T08:46:11+00:00", "type": "library", "extra": { "branch-alias": { @@ -3768,7 +3942,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.3.1" + "source": "https://github.com/Seldaek/monolog/tree/3.4.0" }, "funding": [ { @@ -3784,26 +3958,30 @@ }, { "name": "nesbot/carbon", - "version": "2.67.0", - "version_normalized": "2.67.0.0", + "version": "2.69.0", + "version_normalized": "2.69.0.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8" + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/c1001b3bc75039b07f38a79db5237c4c529e04c8", - "reference": "c1001b3bc75039b07f38a79db5237c4c529e04c8", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4308217830e4ca445583a37d1bf4aff4153fa81c", + "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, + "provide": { + "psr/clock-implementation": "1.0" + }, "require-dev": { "doctrine/dbal": "^2.0 || ^3.1.4", "doctrine/orm": "^2.7", @@ -3817,7 +3995,7 @@ "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.4" }, - "time": "2023-05-25T22:09:47+00:00", + "time": "2023-08-03T09:00:52+00:00", "bin": [ "bin/carbon" ], @@ -3978,17 +4156,17 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.8.0", - "version_normalized": "6.8.0.0", + "version": "v6.8.1", + "version_normalized": "6.8.1.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "df16b615e371d81fb79e506277faea67a1be18f1" + "reference": "e88da8d679acc3824ff231fdc553565b802ac016" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/df16b615e371d81fb79e506277faea67a1be18f1", - "reference": "df16b615e371d81fb79e506277faea67a1be18f1", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e88da8d679acc3824ff231fdc553565b802ac016", + "reference": "e88da8d679acc3824ff231fdc553565b802ac016", "shasum": "" }, "require": { @@ -3998,13 +4176,13 @@ "php": ">=5.5.0" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", "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", + "squizlabs/php_codesniffer": "^3.7.2", "yoast/phpunit-polyfills": "^1.0.4" }, "suggest": { @@ -4017,7 +4195,7 @@ "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" }, - "time": "2023-03-06T14:43:22+00:00", + "time": "2023-08-29T08:26:30+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4049,7 +4227,7 @@ "description": "PHPMailer is a full-featured email creation and transfer class for PHP", "support": { "issues": "https://github.com/PHPMailer/PHPMailer/issues", - "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.0" + "source": "https://github.com/PHPMailer/PHPMailer/tree/v6.8.1" }, "funding": [ { @@ -4139,17 +4317,17 @@ }, { "name": "predis/predis", - "version": "v2.1.2", - "version_normalized": "2.1.2.0", + "version": "v2.2.1", + "version_normalized": "2.2.1.0", "source": { "type": "git", "url": "https://github.com/predis/predis.git", - "reference": "a77a43913a74f9331f637bb12867eb8e274814e5" + "reference": "5f2b410a74afaff296a87a494e4c5488cf9fab57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/predis/predis/zipball/a77a43913a74f9331f637bb12867eb8e274814e5", - "reference": "a77a43913a74f9331f637bb12867eb8e274814e5", + "url": "https://api.github.com/repos/predis/predis/zipball/5f2b410a74afaff296a87a494e4c5488cf9fab57", + "reference": "5f2b410a74afaff296a87a494e4c5488cf9fab57", "shasum": "" }, "require": { @@ -4160,7 +4338,10 @@ "phpstan/phpstan": "^1.9", "phpunit/phpunit": "^8.0 || ~9.4.4" }, - "time": "2023-03-02T18:32:04+00:00", + "suggest": { + "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" + }, + "time": "2023-08-15T23:01:46+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -4188,7 +4369,7 @@ ], "support": { "issues": "https://github.com/predis/predis/issues", - "source": "https://github.com/predis/predis/tree/v2.1.2" + "source": "https://github.com/predis/predis/tree/v2.2.1" }, "funding": [ { @@ -4250,6 +4431,57 @@ }, "install-path": "../psr/cache" }, + { + "name": "psr/clock", + "version": "1.0.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "time": "2022-11-25T14:36:26+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "install-path": "../psr/clock" + }, { "name": "psr/container", "version": "2.0.2", @@ -4764,19 +4996,20 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "d40baa1c4204055d04a5a9b5ad39c95b189ef889" + "reference": "c16c8b67835bc384c40b9f282b3a49a6f4cb5124" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/d40baa1c4204055d04a5a9b5ad39c95b189ef889", - "reference": "d40baa1c4204055d04a5a9b5ad39c95b189ef889", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/c16c8b67835bc384c40b9f282b3a49a6f4cb5124", + "reference": "c16c8b67835bc384c40b9f282b3a49a6f4cb5124", "shasum": "" }, "conflict": { "3f/pygmentize": "<1.2", - "admidio/admidio": "<4.1.9", + "admidio/admidio": "<4.2.11", "adodb/adodb-php": "<=5.20.20|>=5.21,<=5.21.3", - "aheinze/cockpit": "<=2.2.1", + "aheinze/cockpit": "<2.2", + "aimeos/aimeos-typo3": "<19.10.12|>=20,<20.10.5", "akaunting/akaunting": "<2.1.13", "akeneo/pim-community-dev": "<5.0.119|>=6,<6.0.53", "alextselegidis/easyappointments": "<1.5", @@ -4787,18 +5020,23 @@ "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", + "andrewhaine/silverstripe-form-capture": ">=0.2,<=0.2.3|>=1,<1.0.2|>=2,<2.2.5", "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", + "artesaos/seotools": "<0.17.2", + "asymmetricrypt/asymmetricrypt": "<9.9.99", + "athlon1600/php-proxy": "<=5.1", + "athlon1600/php-proxy-app": "<=3", + "austintoddj/canvas": "<=3.4.2", "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", + "backpack/crud": "<3.4.9", "badaso/core": "<2.7", "bagisto/bagisto": "<0.1.5", "barrelstrength/sprout-base-email": "<1.2.7", @@ -4807,8 +5045,8 @@ "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", + "bigfork/silverstripe-form-capture": ">=3,<3.1.1", + "billz/raspap-webgui": "<=2.9.2", "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", @@ -4822,39 +5060,44 @@ "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/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cardgate/magento2": "<2.0.33", + "cardgate/woocommerce": "<=3.1.15", "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", + "centreon/centreon": "<22.10.0.0-beta1", "cesnet/simplesamlphp-module-proxystatistics": "<3.1", - "cockpit-hq/cockpit": "<2.4.1", + "chriskacerguis/codeigniter-restserver": "<=2.7.1", + "cockpit-hq/cockpit": "<=2.6.3", "codeception/codeception": "<3.1.3|>=4,<4.1.22", - "codeigniter/framework": "<=3.0.6", + "codeigniter/framework": "<3.1.9", "codeigniter4/framework": "<4.3.5", - "codeigniter4/shield": "<1-beta.4|= 1.0.0-beta", + "codeigniter4/shield": "<1.0.0.0-beta4", "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", + "composer/composer": "<1.10.26|>=2,<2.2.12|>=2.3,<2.3.5", + "concrete5/concrete5": "<9.2", "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/core-bundle": "<4.9.42|>=4.10,<4.13.28|>=5,<5.1.10", "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", + "cosenary/instagram": "<=2.3", + "craftcms/cms": "<=4.4.14", + "croogo/croogo": "<4", "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", + "dcat/laravel-admin": "<=2.1.3.0-beta", "derhansen/fe_change_pwd": "<2.0.5|>=3,<3.0.3", "derhansen/sf_event_mgt": "<4.3.1|>=5,<5.1.1", + "desperado/xml-bundle": "<=0.1.7", "directmailteam/direct-mail": "<5.2.4", "doctrine/annotations": ">=1,<1.2.7", "doctrine/cache": ">=1,<1.3.2|>=1.4,<1.4.2", @@ -4865,14 +5108,14 @@ "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", + "dolibarr/dolibarr": "<17.0.1", + "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", + "drupal/drupal": ">=6,<6.38|>=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", + "elefant/cms": "<2.0.7", "elgg/elgg": "<3.3.24|>=4,<4.0.5", "encore/laravel-admin": "<=1.8.19", "endroid/qr-code-bundle": "<3.4.2", @@ -4880,26 +5123,26 @@ "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", + "exceedone/laravel-admin": "<2.2.3|==3", + "ezsystems/demobundle": ">=5.4,<5.4.6.1-dev", "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/ezdemo-ls-extension": ">=5.4,<5.4.2.1-dev", + "ezsystems/ezfind-ls": ">=5.3,<5.3.6.1-dev|>=5.4,<5.4.11.1-dev|>=2017.12,<2017.12.0.1-dev", "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-graphql": ">=1.0.0.0-RC1-dev,<1.0.13|>=2.0.0.0-beta1,<2.3.12", + "ezsystems/ezplatform-kernel": "<1.2.5.1-dev|>=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-richtext": ">=2.3,<2.3.7.1-dev", "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/ezpublish-kernel": "<6.13.8.2-dev|>=7,<7.5.30", + "ezsystems/ezpublish-legacy": "<=2017.12.7.3|>=2018.06,<=2019.03.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", + "ezsystems/repository-forms": ">=2.3,<2.3.2.1-dev|>=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", + "facturascripts/facturascripts": "<=2022.08", "feehi/cms": "<=2.1.1", "feehi/feehicms": "<=2.1.1", "fenom/fenom": "<=2.12.1", @@ -4907,12 +5150,13 @@ "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/core": "<1.8", + "flarum/framework": "<1.8", "flarum/mentions": "<1.6.3", - "flarum/sticky": ">=0.1-beta.14,<=0.1-beta.15", - "flarum/tags": "<=0.1-beta.13", + "flarum/sticky": ">=0.1.0.0-beta14,<=0.1.0.0-beta15", + "flarum/tags": "<=0.1.0.0-beta13", "fluidtypo3/vhs": "<5.1.1", - "fof/byobu": ">=0.3-beta.2,<1.1.7", + "fof/byobu": ">=0.3.0.0-beta2,<1.1.7", "fof/upload": "<1.2.3", "fooman/tcpdf": "<6.2.22", "forkcms/forkcms": "<5.11.1", @@ -4923,18 +5167,22 @@ "friendsofsymfony/rest-bundle": ">=1.2,<1.2.2", "friendsofsymfony/user-bundle": ">=1.2,<1.3.5", "friendsoftypo3/mediace": ">=7.6.2,<7.6.5", + "friendsoftypo3/openid": ">=4.5,<4.5.31|>=4.7,<4.7.16|>=6,<6.0.11|>=6.1,<6.1.6", "froala/wysiwyg-editor": "<3.2.7", - "froxlor/froxlor": "<2.0.16", + "froxlor/froxlor": "<2.1", "fuel/core": "<1.8.1", - "funadmin/funadmin": "<=3.2", + "funadmin/funadmin": "<=3.2|>=3.3.2,<=3.3.3", "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", + "getgrav/grav": "<=1.7.42.1", + "getkirby/cms": "<3.5.8.3-dev|>=3.6,<3.6.6.3-dev|>=3.7,<3.7.5.2-dev|>=3.8,<3.8.4.1-dev|>=3.9,<3.9.6", + "getkirby/kirby": "<=2.5.12", "getkirby/panel": "<2.5.14", "getkirby/starterkit": "<=3.7.0.2", "gilacms/gila": "<=1.11.4", + "gleez/cms": "<=1.2", "globalpayments/php-sdk": "<2", + "gogentooss/samlbase": "<1.2.7", "google/protobuf": "<3.15", "gos/web-socket-bundle": "<1.10.4|>=2,<2.6.1|>=3,<3.3", "gree/jose": "<2.2.1", @@ -4942,8 +5190,10 @@ "grumpydictator/firefly-iii": "<6", "guzzlehttp/guzzle": "<6.5.8|>=7,<7.4.5", "guzzlehttp/psr7": "<1.9.1|>=2,<2.4.5", + "haffner/jh_captcha": "<=2.1.3|>=3,<=3.0.2", "harvesthq/chosen": "<1.8.7", - "helloxz/imgurl": "= 2.31|<=2.31", + "helloxz/imgurl": "<=2.31", + "hhxsv5/laravel-s": "<3.7.36", "hillelcoren/invoice-ninja": "<5.3.35", "himiklab/yii2-jqgrid-widget": "<1.0.8", "hjue/justwriting": "<=1", @@ -4962,8 +5212,9 @@ "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", + "impresscms/impresscms": "<=1.4.5", "in2code/femanager": "<5.5.3|>=6,<6.3.4|>=7,<7.1", + "in2code/ipandlanguageredirect": "<5.1.2", "in2code/lux": "<17.6.1|>=18,<24.0.2", "innologi/typo3-appointments": "<2.0.6", "intelliants/subrion": "<=4.2.1", @@ -4972,10 +5223,13 @@ "jackalope/jackalope-doctrine-dbal": "<1.7.4", "james-heinrich/getid3": "<1.9.21", "jasig/phpcas": "<1.3.3", + "jcbrand/converse.js": "<3.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/framework": ">=2.5.4,<=3.8.12", "joomla/input": ">=2,<2.0.2", + "joomla/joomla-cms": "<3.9.12", "joomla/session": "<1.3.1", "joyqi/hyper-down": "<=2.4.27", "jsdecena/laracom": "<2.0.9", @@ -4983,26 +5237,29 @@ "kazist/phpwhois": "<=4.2.6", "kelvinmo/simplexrd": "<3.1.1", "kevinpapst/kimai2": "<1.16.7", + "khodakhah/nodcms": "<=3", "kimai/kimai": "<1.1", - "kitodo/presentation": "<3.1.2", + "kitodo/presentation": "<3.2.3|>=3.3,<3.3.4", "klaviyo/magento2-extension": ">=1,<3", "knplabs/knp-snappy": "<1.4.2", + "kohana/core": "<3.3.3", "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-diactoros": "<2.18.1|==2.19|==2.20|==2.21|==2.22|==2.23|>=2.24,<2.24.2|>=2.25,<2.25.2", "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/framework": "<6.20.44|>=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", + "league/oauth2-server": ">=8.3.2,<8.4.2|>=8.5,<8.5.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", - "librenms/librenms": "<22.10", + "librenms/librenms": "<2017.08.18", "liftkit/database": "<2.13.2", "limesurvey/limesurvey": "<3.27.19", "livehelperchat/livehelperchat": "<=3.91", @@ -5010,15 +5267,15 @@ "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", + "magento/community-edition": "<=2.4", + "magento/magento1ce": "<1.9.4.3-dev", + "magento/magento1ee": ">=1,<1.14.4.3-dev", + "magento/product-community-edition": ">=2,<2.2.10|>=2.3,<2.3.2.0-patch2", "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", + "mautic/core": "<4.3", "mediawiki/core": ">=1.27,<1.27.6|>=1.29,<1.29.3|>=1.30,<1.30.2|>=1.31,<1.31.9|>=1.32,<1.32.6|>=1.32.99,<1.33.3|>=1.33.99,<1.34.3|>=1.34.99,<1.35", "mediawiki/matomo": "<2.4.3", "melisplatform/melis-asset-manager": "<5.0.1", @@ -5026,18 +5283,20 @@ "melisplatform/melis-front": "<5.0.1", "mezzio/mezzio-swoole": "<3.7|>=4,<4.3", "mgallegos/laravel-jqgrid": "<=1.3", - "microweber/microweber": "<1.3.4", + "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", + "modx/revolution": "<=2.8.3.0-patch", "mojo42/jirafeau": "<4.4", "monolog/monolog": ">=1.8,<1.12", - "moodle/moodle": "<4.2-rc.2|= 3.11", + "moodle/moodle": "<4.2.0.0-RC2-dev|==4.2", + "movim/moxl": ">=0.8,<=0.10", + "mpdf/mpdf": "<=7.1.7", "mustache/mustache": ">=2,<2.14.1", "namshi/jose": "<2.2", "neoan3-apps/template": "<1.1.1", - "neorazorx/facturascripts": "<2022.4", + "neorazorx/facturascripts": "<2022.04", "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", @@ -5045,16 +5304,16 @@ "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", + "nilsteampassnet/teampass": "<3.0.10", "notrinos/notrinos-erp": "<=0.7", "noumo/easyii": "<=0.9", - "nukeviet/nukeviet": "<4.5.2", + "nukeviet/nukeviet": "<4.5.02", "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/cms": "<1.0.469|==1.0.469|==1.0.471|==1.1.1", + "october/october": "<=3.4.4", "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", @@ -5063,24 +5322,27 @@ "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", + "opensource-workshop/connect-cms": "<1.7.2|>=2,<2.3.2", + "orchid/platform": ">=9,<9.4.4|>=14.0.0.0-alpha4,<14.5", "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", + "oxid-esales/oxideshop-ce": "<4.5", "packbackbooks/lti-1-3-php-library": "<5", "padraic/humbug_get_contents": "<1.1.2", - "pagarme/pagarme-php": ">=0,<3", + "pagarme/pagarme-php": "<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", + "pear/pear": "<=1.10.1", "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", + "phpbb/phpbb": "<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", @@ -5089,40 +5351,45 @@ "phpoffice/phpexcel": "<1.8", "phpoffice/phpspreadsheet": "<1.16", "phpseclib/phpseclib": "<2.0.31|>=3,<3.0.19", - "phpservermon/phpservermon": "<=3.5.2", + "phpservermon/phpservermon": "<3.6", "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", + "pi/pi": "<=2.5", + "pimcore/admin-ui-classic-bundle": "<1.0.3", + "pimcore/customer-management-framework-bundle": "<3.4.2", "pimcore/data-hub": "<1.2.4", "pimcore/perspective-editor": "<1.5.1", - "pimcore/pimcore": "<10.5.21", + "pimcore/pimcore": "<10.6.8", "pixelfed/pixelfed": "<=0.11.4", "pocketmine/bedrock-protocol": "<8.0.2", - "pocketmine/pocketmine-mp": "<4.12.5|>= 4.0.0-BETA5, < 4.4.2", + "pocketmine/pocketmine-mp": "<4.22.3|>=5,<5.2.1", "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/prestashop": "<=8.1", "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/propel": ">=2.0.0.0-alpha1,<=2.0.0.0-alpha7", "propel/propel1": ">=1,<=1.7.1", "pterodactyl/panel": "<1.7", + "ptheofan/yii2-statemachine": ">=2", "ptrofimov/beanstalk_console": "<1.7.14", "pusher/pusher-php-server": "<2.2.1", - "pwweb/laravel-core": "<=0.3.6-beta", + "pwweb/laravel-core": "<=0.3.6.0-beta", "pyrocms/pyrocms": "<=3.9.1", "rainlab/debugbar-plugin": "<3.1", + "rainlab/user-plugin": "<=1.4.5", "rankmath/seo-by-rank-math": "<=1.0.95", + "rap2hpoutre/laravel-log-viewer": "<0.13", "react/http": ">=0.7,<1.9", "really-simple-plugins/complianz-gdpr": "<6.4.2", "remdex/livehelperchat": "<3.99", @@ -5133,25 +5400,29 @@ "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", + "sabre/dav": "<1.7.11|>=1.8,<1.8.9", + "scheb/two-factor-bundle": "<3.26|>=4,<4.11", "sensiolabs/connect": "<4.2.3", "serluck/phpwhois": "<=4.2.6", + "sfroemken/url_redirect": "<=1.2.1", + "sheng/yiicms": "<=1.2", "shopware/core": "<=6.4.20", "shopware/platform": "<=6.4.20", "shopware/production": "<=6.3.5.2", - "shopware/shopware": "<=5.7.14", + "shopware/shopware": "<=5.7.17", "shopware/storefront": "<=6.4.8.1", "shopxo/shopxo": "<2.2.6", "showdoc/showdoc": "<2.10.4", - "silverstripe/admin": "<1.12.7", + "silverstripe-australia/advancedreports": ">=1,<=2", + "silverstripe/admin": "<1.13.6", "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/framework": "<4.13.14|>=5,<5.0.13", + "silverstripe/graphql": "<3.5.2|>=4.0.0.0-alpha1,<4.0.0.0-alpha2|>=4.1.1,<4.1.2|>=4.2.2,<4.2.3", "silverstripe/hybridsessions": ">=1,<2.4.1|>=2.5,<2.5.1", + "silverstripe/recipe-cms": ">=4.5,<4.5.3", "silverstripe/registry": ">=2.1,<2.1.2|>=2.2,<2.2.1", "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", @@ -5160,30 +5431,34 @@ "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/saml2": "<1.15.4|>=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", + "sjbr/sr-freecap": "<=2.5.2", "slim/psr7": "<1.4.1|>=1.5,<1.5.1|>=1.6,<1.6.1", "slim/slim": "<2.6", + "slub/slub-events": "<3.0.3", "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", + "snipe/snipe-it": "<=6.0.14", "socalnick/scn-social-auth": "<1.15.2", "socialiteproviders/steam": "<1.1", "spatie/browsershot": "<3.57.4", "spipu/html2pdf": "<5.2.4", + "spoon/library": "<1.4.1", "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", + "ssddanbrown/bookstack": "<22.02.3", + "statamic/cms": "<4.10", + "stormpath/sdk": "<9.9.99", + "studio-42/elfinder": "<2.1.62", + "subhh/libconnect": "<7.0.8|>=8,<8.1", "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", + "sulu/sulu": "<1.6.44|>=2,<2.2.18|>=2.3,<2.3.8|==2.4.0.0-RC1|>=2.5,<2.5.10", "sumocoders/framework-user-bundle": "<1.4", "swag/paypal": "<5.4.4", "swiftmailer/swiftmailer": ">=4,<5.4.5", @@ -5202,7 +5477,7 @@ "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/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", "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", @@ -5220,40 +5495,44 @@ "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/symfony": "<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", + "t3/dce": "<0.11.5|>=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", + "thelia/thelia": ">=2.1,<2.1.3", "theonedemon/phpwhois": "<=4.2.5", "thinkcmf/thinkcmf": "<=5.1.7", - "thorsten/phpmyfaq": "<3.2-beta", + "thorsten/phpmyfaq": "<3.2.0.0-beta2", + "tikiwiki/tiki-manager": "<=17.1", "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", + "titon/framework": "<9.9.99", + "tobiasbg/tablepress": "<=2.0.0.0-RC1", "topthink/framework": "<6.0.14", "topthink/think": "<=6.1.1", "topthink/thinkphp": "<=3.2.3", + "tpwd/ke_search": "<4.0.3|>=4.1,<4.6.6|>=5,<5.0.2", "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": "<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-core": "<8.7.51|>=9,<9.5.42|>=10,<10.4.39|>=11,<11.5.30|>=12,<12.4.4", + "typo3/cms-extbase": "<6.2.24|>=7,<7.6.8|==8.1.1", "typo3/cms-form": ">=8,<=8.7.39|>=9,<=9.5.24|>=10,<=10.4.13|>=11,<=11.1", + "typo3/cms-rte-ckeditor": ">=9.5,<9.5.42|>=10,<10.4.39|>=11,<11.5.30", "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/html-sanitizer": ">=1,<1.5.1|>=2,<2.1.2", "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", @@ -5267,19 +5546,23 @@ "verot/class.upload.php": "<=1.0.3|>=2,<=2.0.4", "vova07/yii2-fileapi-widget": "<0.1.9", "vrana/adminer": "<4.8.1", + "waldhacker/hcaptcha": "<2.1.2", "wallabag/tcpdf": "<6.2.22", - "wallabag/wallabag": "<2.5.4", + "wallabag/wallabag": "<=2.6.2", "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", + "webklex/laravel-imap": "<5.3", + "webklex/php-imap": "<5.3", "webpa/webpa": "<3.1.2", + "wikibase/wikibase": "<=1.39.3", "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", + "wintercms/winter": "<1.2.3", "woocommerce/woocommerce": "<6.6", "wp-cli/wp-cli": "<2.5", - "wp-graphql/wp-graphql": "<0.3.5", + "wp-graphql/wp-graphql": "<=1.14.5", "wpanel/wpanel4-cms": "<=4.3.1", "wpcloud/wp-stateless": "<3.2", "wwbn/avideo": "<=12.4", @@ -5300,6 +5583,7 @@ "yikesinc/yikes-inc-easy-mailchimp-extender": "<6.8.6", "yoast-seo-for-typo3/yoast_seo": "<7.2.3", "yourls/yourls": "<=1.8.2", + "zencart/zencart": "<=1.5.7.0-beta", "zendesk/zendesk_api_client_php": "<2.2.11", "zendframework/zend-cache": ">=2.4,<2.4.8|>=2.5,<2.5.3", "zendframework/zend-captcha": ">=2,<2.4.9|>=2.5,<2.5.2", @@ -5321,14 +5605,15 @@ "zendframework/zendframework": "<=3", "zendframework/zendframework1": "<1.12.20", "zendframework/zendopenid": ">=2,<2.0.2", - "zendframework/zendxml": ">=1,<1.0.1", + "zendframework/zendxml": "<1.0.1", + "zenstruck/collection": "<0.2.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" }, - "time": "2023-05-30T21:04:11+00:00", + "time": "2023-08-29T00:13:38+00:00", "type": "metapackage", "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6115,17 +6400,17 @@ }, { "name": "symfony/console", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.4", + "version_normalized": "6.3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7" + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7", - "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7", + "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", + "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", "shasum": "" }, "require": { @@ -6154,7 +6439,7 @@ "symfony/process": "^5.4|^6.0", "symfony/var-dumper": "^5.4|^6.0" }, - "time": "2023-05-29T12:49:39+00:00", + "time": "2023-08-16T10:10:12+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6188,7 +6473,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.0" + "source": "https://github.com/symfony/console/tree/v6.3.4" }, "funding": [ { @@ -6278,17 +6563,17 @@ }, { "name": "symfony/error-handler", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.2", + "version_normalized": "6.3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "99d2d814a6351461af350ead4d963bd67451236f" + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/99d2d814a6351461af350ead4d963bd67451236f", - "reference": "99d2d814a6351461af350ead4d963bd67451236f", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a", + "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a", "shasum": "" }, "require": { @@ -6304,7 +6589,7 @@ "symfony/http-kernel": "^5.4|^6.0", "symfony/serializer": "^5.4|^6.0" }, - "time": "2023-05-10T12:03:13+00:00", + "time": "2023-07-16T17:05:46+00:00", "bin": [ "Resources/bin/patch-type-declarations" ], @@ -6335,7 +6620,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.3.0" + "source": "https://github.com/symfony/error-handler/tree/v6.3.2" }, "funding": [ { @@ -6355,17 +6640,17 @@ }, { "name": "symfony/event-dispatcher", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.2", + "version_normalized": "6.3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa" + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa", - "reference": "3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", "shasum": "" }, "require": { @@ -6390,7 +6675,7 @@ "symfony/service-contracts": "^2.5|^3", "symfony/stopwatch": "^5.4|^6.0" }, - "time": "2023-04-21T14:41:17+00:00", + "time": "2023-07-06T06:56:43+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6418,7 +6703,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.3.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2" }, "funding": [ { @@ -6517,17 +6802,17 @@ }, { "name": "symfony/filesystem", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.1", + "version_normalized": "6.3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "97b698e1d77d356304def77a8d0cd73090b359ea" + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/97b698e1d77d356304def77a8d0cd73090b359ea", - "reference": "97b698e1d77d356304def77a8d0cd73090b359ea", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", + "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "shasum": "" }, "require": { @@ -6535,7 +6820,7 @@ "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, - "time": "2023-05-30T17:12:32+00:00", + "time": "2023-06-01T08:30:39+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6563,7 +6848,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.3.0" + "source": "https://github.com/symfony/filesystem/tree/v6.3.1" }, "funding": [ { @@ -6583,17 +6868,17 @@ }, { "name": "symfony/finder", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.3", + "version_normalized": "6.3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2" + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d9b01ba073c44cef617c7907ce2419f8d00d75e2", - "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2", + "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e", + "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e", "shasum": "" }, "require": { @@ -6602,7 +6887,7 @@ "require-dev": { "symfony/filesystem": "^6.0" }, - "time": "2023-04-02T01:25:41+00:00", + "time": "2023-07-31T08:31:44+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6630,7 +6915,7 @@ "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" + "source": "https://github.com/symfony/finder/tree/v6.3.3" }, "funding": [ { @@ -6650,17 +6935,17 @@ }, { "name": "symfony/http-foundation", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.4", + "version_normalized": "6.3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "718a97ed430d34e5c568ea2c44eab708c6efbefb" + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/718a97ed430d34e5c568ea2c44eab708c6efbefb", - "reference": "718a97ed430d34e5c568ea2c44eab708c6efbefb", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/cac1556fdfdf6719668181974104e6fcfa60e844", + "reference": "cac1556fdfdf6719668181974104e6fcfa60e844", "shasum": "" }, "require": { @@ -6682,7 +6967,7 @@ "symfony/mime": "^5.4|^6.0", "symfony/rate-limiter": "^5.2|^6.0" }, - "time": "2023-05-19T12:46:45+00:00", + "time": "2023-08-22T08:20:46+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6710,7 +6995,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.3.0" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.4" }, "funding": [ { @@ -6730,17 +7015,17 @@ }, { "name": "symfony/http-kernel", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.4", + "version_normalized": "6.3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "241973f3dd900620b1ca052fe409144f11aea748" + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/241973f3dd900620b1ca052fe409144f11aea748", - "reference": "241973f3dd900620b1ca052fe409144f11aea748", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", + "reference": "36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb", "shasum": "" }, "require": { @@ -6749,7 +7034,7 @@ "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/http-foundation": "^6.3.4", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -6757,7 +7042,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.3", + "symfony/dependency-injection": "<6.3.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -6781,7 +7066,7 @@ "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.3", + "symfony/dependency-injection": "^6.3.4", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", @@ -6798,7 +7083,7 @@ "symfony/var-exporter": "^6.2", "twig/twig": "^2.13|^3.0.4" }, - "time": "2023-05-30T19:03:32+00:00", + "time": "2023-08-26T13:54:49+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6826,7 +7111,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.3.0" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.4" }, "funding": [ { @@ -6846,21 +7131,22 @@ }, { "name": "symfony/mime", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.3", + "version_normalized": "6.3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad" + "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/7b5d2121858cd6efbed778abce9cfdd7ab1f62ad", - "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad", + "url": "https://api.github.com/repos/symfony/mime/zipball/9a0cbd52baa5ba5a5b1f0cacc59466f194730f98", + "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -6869,7 +7155,7 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2" + "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", @@ -6878,9 +7164,9 @@ "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" + "symfony/serializer": "~6.2.13|^6.3.2" }, - "time": "2023-04-28T15:57:00+00:00", + "time": "2023-07-31T07:08:24+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -6912,7 +7198,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.3.0" + "source": "https://github.com/symfony/mime/tree/v6.3.3" }, "funding": [ { @@ -6932,17 +7218,17 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { @@ -6954,11 +7240,11 @@ "suggest": { "ext-ctype": "For best performance" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -6997,7 +7283,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { @@ -7017,17 +7303,17 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", "shasum": "" }, "require": { @@ -7036,11 +7322,11 @@ "suggest": { "ext-intl": "For best performance" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7081,7 +7367,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" }, "funding": [ { @@ -7101,17 +7387,17 @@ }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", "shasum": "" }, "require": { @@ -7122,11 +7408,11 @@ "suggest": { "ext-intl": "For best performance" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:30:37+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7171,7 +7457,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" }, "funding": [ { @@ -7191,17 +7477,17 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "shasum": "" }, "require": { @@ -7210,11 +7496,11 @@ "suggest": { "ext-intl": "For best performance" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7258,7 +7544,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" }, "funding": [ { @@ -7278,17 +7564,17 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { @@ -7300,11 +7586,11 @@ "suggest": { "ext-mbstring": "For best performance" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-07-28T09:04:16+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7344,7 +7630,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" }, "funding": [ { @@ -7364,27 +7650,27 @@ }, { "name": "symfony/polyfill-php72", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7423,7 +7709,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" }, "funding": [ { @@ -7443,27 +7729,27 @@ }, { "name": "symfony/polyfill-php73", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", + "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7505,7 +7791,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0" }, "funding": [ { @@ -7525,27 +7811,27 @@ }, { "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7591,7 +7877,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -7611,27 +7897,27 @@ }, { "name": "symfony/polyfill-php81", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", + "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", "shasum": "" }, "require": { "php": ">=7.1" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-01-26T09:26:14+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7673,7 +7959,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" }, "funding": [ { @@ -7693,28 +7979,28 @@ }, { "name": "symfony/polyfill-php83", - "version": "v1.27.0", - "version_normalized": "1.27.0.0", + "version": "v1.28.0", + "version_normalized": "1.28.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57" + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/508c652ba3ccf69f8c97f251534f229791b52a57", - "reference": "508c652ba3ccf69f8c97f251534f229791b52a57", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", "shasum": "" }, "require": { "php": ">=7.1", "symfony/polyfill-php80": "^1.14" }, - "time": "2022-11-03T14:55:06+00:00", + "time": "2023-08-16T06:22:46+00:00", "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7728,7 +8014,10 @@ ], "psr-4": { "Symfony\\Polyfill\\Php83\\": "" - } + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7753,7 +8042,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" }, "funding": [ { @@ -7773,23 +8062,23 @@ }, { "name": "symfony/process", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.4", + "version_normalized": "6.3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "8741e3ed7fe2e91ec099e02446fb86667a0f1628" + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/8741e3ed7fe2e91ec099e02446fb86667a0f1628", - "reference": "8741e3ed7fe2e91ec099e02446fb86667a0f1628", + "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", + "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", "shasum": "" }, "require": { "php": ">=8.1" }, - "time": "2023-05-19T08:06:44+00:00", + "time": "2023-08-07T10:39:22+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -7817,7 +8106,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.0" + "source": "https://github.com/symfony/process/tree/v6.3.4" }, "funding": [ { @@ -7837,21 +8126,22 @@ }, { "name": "symfony/routing", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.3", + "version_normalized": "6.3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b" + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b", - "reference": "827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b", + "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a", + "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "doctrine/annotations": "<1.12", @@ -7868,7 +8158,7 @@ "symfony/http-foundation": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0" }, - "time": "2023-04-28T15:57:00+00:00", + "time": "2023-07-31T07:08:24+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -7902,7 +8192,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.3.0" + "source": "https://github.com/symfony/routing/tree/v6.3.3" }, "funding": [ { @@ -8007,17 +8297,17 @@ }, { "name": "symfony/string", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.2", + "version_normalized": "6.3.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f" + "reference": "53d1a83225002635bca3482fcbf963001313fb68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f2e190ee75ff0f5eced645ec0be5c66fac81f51f", - "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f", + "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68", + "reference": "53d1a83225002635bca3482fcbf963001313fb68", "shasum": "" }, "require": { @@ -8037,7 +8327,7 @@ "symfony/translation-contracts": "^2.5|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, - "time": "2023-03-21T21:06:29+00:00", + "time": "2023-07-05T08:41:27+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -8076,7 +8366,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.0" + "source": "https://github.com/symfony/string/tree/v6.3.2" }, "funding": [ { @@ -8096,21 +8386,22 @@ }, { "name": "symfony/translation", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.3", + "version_normalized": "6.3.3.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f" + "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/f72b2cba8f79dd9d536f534f76874b58ad37876f", - "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f", + "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", + "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, @@ -8142,7 +8433,7 @@ "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^5.4|^6.0" }, - "time": "2023-05-19T12:46:45+00:00", + "time": "2023-07-31T07:08:24+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -8173,7 +8464,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.3.0" + "source": "https://github.com/symfony/translation/tree/v6.3.3" }, "funding": [ { @@ -8274,21 +8565,22 @@ }, { "name": "symfony/var-dumper", - "version": "v6.3.0", - "version_normalized": "6.3.0.0", + "version": "v6.3.4", + "version_normalized": "6.3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "6acdcd5c122074ee9f7b051e4fb177025c277a0e" + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6acdcd5c122074ee9f7b051e4fb177025c277a0e", - "reference": "6acdcd5c122074ee9f7b051e4fb177025c277a0e", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2027be14f8ae8eae999ceadebcda5b4909b81d45", + "reference": "2027be14f8ae8eae999ceadebcda5b4909b81d45", "shasum": "" }, "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { @@ -8297,11 +8589,12 @@ "require-dev": { "ext-iconv": "*", "symfony/console": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0", "symfony/process": "^5.4|^6.0", "symfony/uid": "^5.4|^6.0", "twig/twig": "^2.13|^3.0.4" }, - "time": "2023-05-25T13:09:35+00:00", + "time": "2023-08-24T14:51:05+00:00", "bin": [ "Resources/bin/var-dump-server" ], @@ -8339,7 +8632,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.0" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.4" }, "funding": [ { @@ -8359,23 +8652,23 @@ }, { "name": "tracy/tracy", - "version": "v2.10.2", - "version_normalized": "2.10.2.0", + "version": "v2.10.3", + "version_normalized": "2.10.3.0", "source": { "type": "git", "url": "https://github.com/nette/tracy.git", - "reference": "882fee7cf4258a602ad4a37461e837ed2ca1406b" + "reference": "ec6637866d6836ef6f8de2bab63ae7708b23bcd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/tracy/zipball/882fee7cf4258a602ad4a37461e837ed2ca1406b", - "reference": "882fee7cf4258a602ad4a37461e837ed2ca1406b", + "url": "https://api.github.com/repos/nette/tracy/zipball/ec6637866d6836ef6f8de2bab63ae7708b23bcd7", + "reference": "ec6637866d6836ef6f8de2bab63ae7708b23bcd7", "shasum": "" }, "require": { "ext-json": "*", "ext-session": "*", - "php": ">=8.0 <8.3" + "php": ">=8.0 <8.4" }, "conflict": { "nette/di": "<3.0" @@ -8383,13 +8676,14 @@ "require-dev": { "latte/latte": "^2.5", "nette/di": "^3.0", + "nette/http": "^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" }, - "time": "2023-03-29T12:34:53+00:00", + "time": "2023-07-30T13:56:20+00:00", "type": "library", "extra": { "branch-alias": { @@ -8430,7 +8724,7 @@ ], "support": { "issues": "https://github.com/nette/tracy/issues", - "source": "https://github.com/nette/tracy/tree/v2.10.2" + "source": "https://github.com/nette/tracy/tree/v2.10.3" }, "install-path": "../tracy/tracy" }, @@ -8598,6 +8892,67 @@ ], "install-path": "../voku/portable-ascii" }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "version_normalized": "1.11.0.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "time": "2022-06-03T18:03:27+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "install-path": "../webmozart/assert" + }, { "name": "wikimedia/composer-merge-plugin", "version": "v2.1.0", diff --git a/core/vendor/composer/installed.php b/core/vendor/composer/installed.php index 04c9bf9ada..f4f9a3d3ff 100644 --- a/core/vendor/composer/installed.php +++ b/core/vendor/composer/installed.php @@ -1,9 +1,9 @@ array( 'name' => 'evolutioncms/core', - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => NULL, + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => 'c1240bdc55e0792bf6f45f3933b52115269c8827', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -20,27 +20,27 @@ 'dev_requirement' => false, ), 'composer/ca-bundle' => array( - 'pretty_version' => '1.3.5', - 'version' => '1.3.5.0', - 'reference' => '74780ccf8c19d6acb8d65c5f39cd72110e132bbd', + 'pretty_version' => '1.3.6', + 'version' => '1.3.6.0', + 'reference' => '90d087e988ff194065333d16bc5cf649872d9cdb', 'type' => 'library', 'install_path' => __DIR__ . '/./ca-bundle', 'aliases' => array(), 'dev_requirement' => false, ), 'composer/class-map-generator' => array( - 'pretty_version' => '1.0.0', - 'version' => '1.0.0.0', - 'reference' => '1e1cb2b791facb2dfe32932a7718cf2571187513', + 'pretty_version' => '1.1.0', + 'version' => '1.1.0.0', + 'reference' => '953cc4ea32e0c31f2185549c7d216d7921f03da9', 'type' => 'library', 'install_path' => __DIR__ . '/./class-map-generator', 'aliases' => array(), 'dev_requirement' => false, ), 'composer/composer' => array( - 'pretty_version' => '2.5.7', - 'version' => '2.5.7.0', - 'reference' => 'd477018d3f2ebd76dede3d3988a0b1a7add4d81e', + 'pretty_version' => '2.5.8', + 'version' => '2.5.8.0', + 'reference' => '4c516146167d1392c8b9b269bb7c24115d262164', 'type' => 'library', 'install_path' => __DIR__ . '/./composer', 'aliases' => array(), @@ -110,18 +110,18 @@ 'dev_requirement' => false, ), 'doctrine/dbal' => array( - 'pretty_version' => '3.6.2', - 'version' => '3.6.2.0', - 'reference' => 'b4bd1cfbd2b916951696d82e57d054394d84864c', + 'pretty_version' => '3.6.6', + 'version' => '3.6.6.0', + 'reference' => '63646ffd71d1676d2f747f871be31b7e921c7864', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/dbal', 'aliases' => array(), 'dev_requirement' => false, ), 'doctrine/deprecations' => array( - 'pretty_version' => 'v1.1.0', - 'version' => '1.1.0.0', - 'reference' => '8cffffb2218e01f3b370bf763e00e81697725259', + 'pretty_version' => 'v1.1.1', + 'version' => '1.1.1.0', + 'reference' => '612a3ee5ab0d5dd97b7cf3874a6efe24325efac3', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/deprecations', 'aliases' => array(), @@ -137,9 +137,9 @@ 'dev_requirement' => false, ), 'doctrine/inflector' => array( - 'pretty_version' => '2.0.6', - 'version' => '2.0.6.0', - 'reference' => 'd9d313a36c872fd6ee06d9a6cbcf713eaa40f024', + 'pretty_version' => '2.0.8', + 'version' => '2.0.8.0', + 'reference' => 'f9301a5b2fb1216b2b08f02ba04dc45423db6bff', 'type' => 'library', 'install_path' => __DIR__ . '/../doctrine/inflector', 'aliases' => array(), @@ -154,6 +154,15 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'dragonmantank/cron-expression' => array( + 'pretty_version' => 'v3.3.3', + 'version' => '3.3.3.0', + 'reference' => 'adfb1f505deb6384dc8b39804c5065dd3c8c8c0a', + 'type' => 'library', + 'install_path' => __DIR__ . '/../dragonmantank/cron-expression', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'egulias/email-validator' => array( 'pretty_version' => '4.0.1', 'version' => '4.0.1.0', @@ -182,9 +191,9 @@ 'dev_requirement' => false, ), 'evolutioncms/core' => array( - 'pretty_version' => '1.0.0+no-version-set', - 'version' => '1.0.0.0', - 'reference' => NULL, + 'pretty_version' => 'dev-master', + 'version' => 'dev-master', + 'reference' => 'c1240bdc55e0792bf6f45f3933b52115269c8827', 'type' => 'project', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -220,71 +229,71 @@ 'dev_requirement' => false, ), 'guzzlehttp/guzzle' => array( - 'pretty_version' => '7.7.0', - 'version' => '7.7.0.0', - 'reference' => 'fb7566caccf22d74d1ab270de3551f72a58399f5', + 'pretty_version' => '7.8.0', + 'version' => '7.8.0.0', + 'reference' => '1110f66a6530a40fe7aea0378fe608ee2b2248f9', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 'aliases' => array(), 'dev_requirement' => false, ), 'guzzlehttp/promises' => array( - 'pretty_version' => '2.0.0', - 'version' => '2.0.0.0', - 'reference' => '3a494dc7dc1d7d12e511890177ae2d0e6c107da6', + 'pretty_version' => '2.0.1', + 'version' => '2.0.1.0', + 'reference' => '111166291a0f8130081195ac4556a5587d7f1b5d', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/promises', 'aliases' => array(), 'dev_requirement' => false, ), 'guzzlehttp/psr7' => array( - 'pretty_version' => '2.5.0', - 'version' => '2.5.0.0', - 'reference' => 'b635f279edd83fc275f822a1188157ffea568ff6', + 'pretty_version' => '2.6.1', + 'version' => '2.6.1.0', + 'reference' => 'be45764272e8873c72dbe3d2edcfdfcc3bc9f727', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), 'dev_requirement' => false, ), 'guzzlehttp/uri-template' => array( - 'pretty_version' => 'v1.0.1', - 'version' => '1.0.1.0', - 'reference' => 'b945d74a55a25a949158444f09ec0d3c120d69e2', + 'pretty_version' => 'v1.0.2', + 'version' => '1.0.2.0', + 'reference' => '61bf437fc2197f587f6857d3ff903a24f1731b5d', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/uri-template', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/bus' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => 'ec2250684df1ff5cddc4ae639ec913996a4bd0be', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => 'aba48b9b7b9266a62b8e5ece47919533b3d49de7', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/bus', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/cache' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '8d74fa61d5dcdfd99f113eab5db6b8f7d3128e72', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => 'f86b529f8c0921d56adb42f37fb5e022110bba1e', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/cache', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/collections' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '73652e915e56531e08c06bd356d8fa8bc346812e', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => 'f494398dbaaead9e5ff16a18002d11634e8358e6', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/collections', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/conditionable' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', 'reference' => 'd0958e4741fc9d6f516a552060fd1b829a85e009', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/conditionable', @@ -292,8 +301,8 @@ 'dev_requirement' => false, ), 'illuminate/config' => array( - 'pretty_version' => 'v10.12.0', - 'version' => '10.12.0.0', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', 'reference' => 'd5e83ceff5c4d5607b1b81763eb4c436911c35da', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/config', @@ -301,89 +310,89 @@ 'dev_requirement' => false, ), 'illuminate/console' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => 'ea06cc4e42d4e1f3e839ca26a3a21c8adeb1d339', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => '08acf79af3f2f0ba1c61ac37360b24710d7c6b88', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/console', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/container' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => 'f85a85791c75a754190d6495e6ca611faaa64f61', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => 'ddc26273085fad3c471b2602ad820e0097ff7939', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/container', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/contracts' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '0f8b766d66df7e0784ea73cfe4caf7a48b623f53', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => 'eb1a7e72e159136a832f2c0467de5570bdc208ae', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/contracts', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/database' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '5ea66301d2cad33ca994e01aeb4dfa5b6bbd45e4', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => 'd15f10d02bbfecf144366d63e3c13d804b64eae6', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/database', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/events' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => 'c68138ea57360c19a145e5912fb474cfd1845366', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => 'e8cbfa31e1ada8d178ffcd7a5e26e101ec280c59', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/events', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/filesystem' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '53a46fed9b31617ce3a786690b2294f0a54559ea', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => 'da2619dd556b61e4c76c062c8acff98bc5bac3e8', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/filesystem', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/http' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => 'e08bf43e2ca73d06d0082a4e993878f8a4620ae4', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => '52cc8f45705109816f4f9b9b8db615c6a5a8400d', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/http', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/log' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '65ed49152b121fc82116223f092b68fe8a3b4ba0', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => '9cff51ef5d0014e4ffe986359add45342adbf0a8', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/log', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/macroable' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '6b80109438161d45a5f2bdf7ecdd56cbd0096c3d', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => 'dff667a46ac37b634dcf68909d9d41e94dc97c27', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/macroable', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/pagination' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', 'reference' => '2af69e712297cc38377593a72f00d430867e8bdc', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/pagination', @@ -391,8 +400,8 @@ 'dev_requirement' => false, ), 'illuminate/pipeline' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', 'reference' => 'f2119ae9a26e420bf0ed9d5e7e7aa4548547e7b1', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/pipeline', @@ -400,26 +409,26 @@ 'dev_requirement' => false, ), 'illuminate/redis' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => 'a86771f93c92b827e19f007347d65d1197202793', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => '896a0f1940147417f8ce88cced703691bc5548b0', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/redis', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/routing' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '62e17faf9f9f4bb80f00c32599b630f5fcd257d7', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => '188288e6e4184f41aa496f5dcee6da2913bebe6d', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/routing', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/session' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', 'reference' => 'f39be6b679781d5a7089c76965ed635491b4b5dd', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/session', @@ -427,45 +436,45 @@ 'dev_requirement' => false, ), 'illuminate/support' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '679edd76b4ba656c3d4ee2dbf53e99e31a73448b', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => '73bf6767ecac70d02ab70e655fc7bfad3b812d69', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/support', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/translation' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '6c61b26735d57797753b5970029505d3854be127', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => '242fb14ad898cd51a50a33956c249fe43548930f', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/translation', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/validation' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => '86e252487c170fb88cdb72f74aee1a8d187d377a', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => '2b61d283b463f69094874717526155bb2aef2642', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/validation', 'aliases' => array(), 'dev_requirement' => false, ), 'illuminate/view' => array( - 'pretty_version' => 'v10.13.0', - 'version' => '10.13.0.0', - 'reference' => 'acf034c30db23debb797a94641a43780aeecd6c1', + 'pretty_version' => 'v10.21.0', + 'version' => '10.21.0.0', + 'reference' => '953183a224c659240ff8956bae58df4b456462a3', 'type' => 'library', 'install_path' => __DIR__ . '/../illuminate/view', 'aliases' => array(), 'dev_requirement' => false, ), 'james-heinrich/phpthumb' => array( - 'pretty_version' => 'v1.7.20', - 'version' => '1.7.20.0', - 'reference' => '6c642aad3fa33ce88fe1307feaa6316edfc9ed76', + 'pretty_version' => 'v1.7.21', + 'version' => '1.7.21.0', + 'reference' => '7ee966b38ddd7eb4d8091389aa514604710711c8', 'type' => 'library', 'install_path' => __DIR__ . '/../james-heinrich/phpthumb', 'aliases' => array(), @@ -480,37 +489,61 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'laravel/prompts' => array( + 'pretty_version' => 'v0.1.6', + 'version' => '0.1.6.0', + 'reference' => 'b514c5620e1b3b61221b0024dc88def26d9654f4', + 'type' => 'library', + 'install_path' => __DIR__ . '/../laravel/prompts', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'league/flysystem' => array( - 'pretty_version' => '1.1.10', - 'version' => '1.1.10.0', - 'reference' => '3239285c825c152bcc315fe0e87d6b55f5972ed1', + 'pretty_version' => '3.15.1', + 'version' => '3.15.1.0', + 'reference' => 'a141d430414fcb8bf797a18716b09f759a385bed', 'type' => 'library', 'install_path' => __DIR__ . '/../league/flysystem', 'aliases' => array(), 'dev_requirement' => false, ), + 'league/flysystem-local' => array( + 'pretty_version' => '3.15.0', + 'version' => '3.15.0.0', + 'reference' => '543f64c397fefdf9cfeac443ffb6beff602796b3', + 'type' => 'library', + 'install_path' => __DIR__ . '/../league/flysystem-local', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'league/mime-type-detection' => array( - 'pretty_version' => '1.11.0', - 'version' => '1.11.0.0', - 'reference' => 'ff6248ea87a9f116e78edd6002e39e5128a0d4dd', + 'pretty_version' => '1.13.0', + 'version' => '1.13.0.0', + 'reference' => 'a6dfb1194a2946fcdc1f38219445234f65b35c96', 'type' => 'library', 'install_path' => __DIR__ . '/../league/mime-type-detection', 'aliases' => array(), 'dev_requirement' => false, ), 'monolog/monolog' => array( - 'pretty_version' => '3.3.1', - 'version' => '3.3.1.0', - 'reference' => '9b5daeaffce5b926cac47923798bba91059e60e2', + 'pretty_version' => '3.4.0', + 'version' => '3.4.0.0', + 'reference' => 'e2392369686d420ca32df3803de28b5d6f76867d', 'type' => 'library', 'install_path' => __DIR__ . '/../monolog/monolog', 'aliases' => array(), 'dev_requirement' => false, ), + 'mtdowling/cron-expression' => array( + 'dev_requirement' => false, + 'replaced' => array( + 0 => '^1.0', + ), + ), 'nesbot/carbon' => array( - 'pretty_version' => '2.67.0', - 'version' => '2.67.0.0', - 'reference' => 'c1001b3bc75039b07f38a79db5237c4c529e04c8', + 'pretty_version' => '2.69.0', + 'version' => '2.69.0.0', + 'reference' => '4308217830e4ca445583a37d1bf4aff4153fa81c', 'type' => 'library', 'install_path' => __DIR__ . '/../nesbot/carbon', 'aliases' => array(), @@ -526,9 +559,9 @@ 'dev_requirement' => false, ), 'phpmailer/phpmailer' => array( - 'pretty_version' => 'v6.8.0', - 'version' => '6.8.0.0', - 'reference' => 'df16b615e371d81fb79e506277faea67a1be18f1', + 'pretty_version' => 'v6.8.1', + 'version' => '6.8.1.0', + 'reference' => 'e88da8d679acc3824ff231fdc553565b802ac016', 'type' => 'library', 'install_path' => __DIR__ . '/../phpmailer/phpmailer', 'aliases' => array(), @@ -544,9 +577,9 @@ 'dev_requirement' => false, ), 'predis/predis' => array( - 'pretty_version' => 'v2.1.2', - 'version' => '2.1.2.0', - 'reference' => 'a77a43913a74f9331f637bb12867eb8e274814e5', + 'pretty_version' => 'v2.2.1', + 'version' => '2.2.1.0', + 'reference' => '5f2b410a74afaff296a87a494e4c5488cf9fab57', 'type' => 'library', 'install_path' => __DIR__ . '/../predis/predis', 'aliases' => array(), @@ -561,6 +594,21 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'psr/clock' => array( + 'pretty_version' => '1.0.0', + 'version' => '1.0.0.0', + 'reference' => 'e41a24703d4560fd0acb709162f73b8adfc3aa0d', + 'type' => 'library', + 'install_path' => __DIR__ . '/../psr/clock', + 'aliases' => array(), + 'dev_requirement' => false, + ), + 'psr/clock-implementation' => array( + 'dev_requirement' => false, + 'provided' => array( + 0 => '1.0', + ), + ), 'psr/container' => array( 'pretty_version' => '2.0.2', 'version' => '2.0.2.0', @@ -688,7 +736,7 @@ 'roave/security-advisories' => array( 'pretty_version' => 'dev-master', 'version' => 'dev-master', - 'reference' => 'd40baa1c4204055d04a5a9b5ad39c95b189ef889', + 'reference' => 'c16c8b67835bc384c40b9f282b3a49a6f4cb5124', 'type' => 'metapackage', 'install_path' => NULL, 'aliases' => array(), @@ -785,9 +833,9 @@ 'dev_requirement' => false, ), 'symfony/console' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => '8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7', + 'pretty_version' => 'v6.3.4', + 'version' => '6.3.4.0', + 'reference' => 'eca495f2ee845130855ddf1cf18460c38966c8b6', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), @@ -803,18 +851,18 @@ 'dev_requirement' => false, ), 'symfony/error-handler' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => '99d2d814a6351461af350ead4d963bd67451236f', + 'pretty_version' => 'v6.3.2', + 'version' => '6.3.2.0', + 'reference' => '85fd65ed295c4078367c784e8a5a6cee30348b7a', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/error-handler', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/event-dispatcher' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => '3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa', + 'pretty_version' => 'v6.3.2', + 'version' => '6.3.2.0', + 'reference' => 'adb01fe097a4ee930db9258a3cc906b5beb5cf2e', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/event-dispatcher', 'aliases' => array(), @@ -836,153 +884,153 @@ ), ), 'symfony/filesystem' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => '97b698e1d77d356304def77a8d0cd73090b359ea', + 'pretty_version' => 'v6.3.1', + 'version' => '6.3.1.0', + 'reference' => 'edd36776956f2a6fcf577edb5b05eb0e3bdc52ae', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/finder' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => 'd9b01ba073c44cef617c7907ce2419f8d00d75e2', + 'pretty_version' => 'v6.3.3', + 'version' => '6.3.3.0', + 'reference' => '9915db259f67d21eefee768c1abcf1cc61b1fc9e', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/finder', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/http-foundation' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => '718a97ed430d34e5c568ea2c44eab708c6efbefb', + 'pretty_version' => 'v6.3.4', + 'version' => '6.3.4.0', + 'reference' => 'cac1556fdfdf6719668181974104e6fcfa60e844', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/http-foundation', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/http-kernel' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => '241973f3dd900620b1ca052fe409144f11aea748', + 'pretty_version' => 'v6.3.4', + 'version' => '6.3.4.0', + 'reference' => '36abb425b4af863ae1fe54d8a8b8b4c76a2bccdb', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/http-kernel', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/mime' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => '7b5d2121858cd6efbed778abce9cfdd7ab1f62ad', + 'pretty_version' => 'v6.3.3', + 'version' => '6.3.3.0', + 'reference' => '9a0cbd52baa5ba5a5b1f0cacc59466f194730f98', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/mime', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-ctype' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '5bbc823adecdae860bb64756d639ecfec17b050a', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => 'ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-intl-grapheme' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '511a08c03c1960e08a883f4cffcacd219b758354', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '875e90aeea2777b6f135677f618529449334a612', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-intl-idn' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '639084e360537a19f9ee352433b84ce831f3d2da', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => 'ecaafce9f77234a6a449d29e49267ba10499116d', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-intl-normalizer' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '19bd1e4fcd5b91116f14d8533c57831ed00571b6', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '42292d99c55abe617799667f454222c54c60e229', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php72' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '869329b1e9894268a8a61dabb69153029b7a8c97', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '70f4aebd92afca2f865444d30a4d2151c13c3179', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php72', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php73' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '9e8ecb5f92152187c4799efd3c96b78ccab18ff9', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => 'fe2f306d1d9d346a7fee353d0d5012e401e984b5', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php73', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php80' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '6caa57379c4aec19c0a12a38b59b26487dcfe4b5', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php80', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php81' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '707403074c8ea6e2edaf8794b0157a0bfa52157a', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => '7581cd600fa9fd681b797d00b02f068e2f13263b', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php81', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/polyfill-php83' => array( - 'pretty_version' => 'v1.27.0', - 'version' => '1.27.0.0', - 'reference' => '508c652ba3ccf69f8c97f251534f229791b52a57', + 'pretty_version' => 'v1.28.0', + 'version' => '1.28.0.0', + 'reference' => 'b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-php83', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/process' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => '8741e3ed7fe2e91ec099e02446fb86667a0f1628', + 'pretty_version' => 'v6.3.4', + 'version' => '6.3.4.0', + 'reference' => '0b5c29118f2e980d455d2e34a5659f4579847c54', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/process', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/routing' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => '827f59fdc67eecfc4dfff81f9c93bf4d98f0c89b', + 'pretty_version' => 'v6.3.3', + 'version' => '6.3.3.0', + 'reference' => 'e7243039ab663822ff134fbc46099b5fdfa16f6a', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/routing', 'aliases' => array(), @@ -998,18 +1046,18 @@ 'dev_requirement' => false, ), 'symfony/string' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => 'f2e190ee75ff0f5eced645ec0be5c66fac81f51f', + 'pretty_version' => 'v6.3.2', + 'version' => '6.3.2.0', + 'reference' => '53d1a83225002635bca3482fcbf963001313fb68', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/string', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/translation' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => 'f72b2cba8f79dd9d536f534f76874b58ad37876f', + 'pretty_version' => 'v6.3.3', + 'version' => '6.3.3.0', + 'reference' => '3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/translation', 'aliases' => array(), @@ -1031,18 +1079,18 @@ ), ), 'symfony/var-dumper' => array( - 'pretty_version' => 'v6.3.0', - 'version' => '6.3.0.0', - 'reference' => '6acdcd5c122074ee9f7b051e4fb177025c277a0e', + 'pretty_version' => 'v6.3.4', + 'version' => '6.3.4.0', + 'reference' => '2027be14f8ae8eae999ceadebcda5b4909b81d45', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/var-dumper', 'aliases' => array(), 'dev_requirement' => false, ), 'tracy/tracy' => array( - 'pretty_version' => 'v2.10.2', - 'version' => '2.10.2.0', - 'reference' => '882fee7cf4258a602ad4a37461e837ed2ca1406b', + 'pretty_version' => 'v2.10.3', + 'version' => '2.10.3.0', + 'reference' => 'ec6637866d6836ef6f8de2bab63ae7708b23bcd7', 'type' => 'library', 'install_path' => __DIR__ . '/../tracy/tracy', 'aliases' => array(), @@ -1066,6 +1114,15 @@ 'aliases' => array(), 'dev_requirement' => false, ), + 'webmozart/assert' => array( + 'pretty_version' => '1.11.0', + 'version' => '1.11.0.0', + 'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991', + 'type' => 'library', + 'install_path' => __DIR__ . '/../webmozart/assert', + 'aliases' => array(), + 'dev_requirement' => false, + ), 'wikimedia/composer-merge-plugin' => array( 'pretty_version' => 'v2.1.0', 'version' => '2.1.0.0', diff --git a/core/vendor/dmitry-suffi/redis-session-handler/.gitignore b/core/vendor/dmitry-suffi/redis-session-handler/.gitignore deleted file mode 100644 index c6ef2182bd..0000000000 --- a/core/vendor/dmitry-suffi/redis-session-handler/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.idea - diff --git a/core/vendor/doctrine/dbal/composer.json b/core/vendor/doctrine/dbal/composer.json index 559ceddd85..c7bc60c271 100644 --- a/core/vendor/doctrine/dbal/composer.json +++ b/core/vendor/doctrine/dbal/composer.json @@ -40,13 +40,14 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "11.1.0", + "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2022.3", - "phpstan/phpstan": "1.10.9", + "jetbrains/phpstorm-stubs": "2023.1", + "phpstan/phpstan": "1.10.29", "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.6", + "phpunit/phpunit": "9.6.9", "psalm/plugin-phpunit": "0.18.4", + "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^5.4|^6.0", "symfony/console": "^4.4|^5.4|^6.0", diff --git a/core/vendor/doctrine/dbal/src/Cache/ArrayResult.php b/core/vendor/doctrine/dbal/src/Cache/ArrayResult.php index 93b93d176f..ce1283ba91 100644 --- a/core/vendor/doctrine/dbal/src/Cache/ArrayResult.php +++ b/core/vendor/doctrine/dbal/src/Cache/ArrayResult.php @@ -30,7 +30,7 @@ public function __construct(array $data) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchNumeric() { @@ -44,7 +44,7 @@ public function fetchNumeric() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchAssociative() { @@ -52,7 +52,7 @@ public function fetchAssociative() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchOne() { @@ -66,7 +66,7 @@ public function fetchOne() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchAllNumeric(): array { @@ -74,7 +74,7 @@ public function fetchAllNumeric(): array } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchAllAssociative(): array { @@ -82,7 +82,7 @@ public function fetchAllAssociative(): array } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchFirstColumn(): array { diff --git a/core/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php b/core/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php index 3a08312d65..ab9a64c0de 100644 --- a/core/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php @@ -19,7 +19,7 @@ abstract class AbstractDB2Driver implements Driver { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getDatabasePlatform() { @@ -27,7 +27,7 @@ public function getDatabasePlatform() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@link DB2Platform::createSchemaManager()} instead. */ diff --git a/core/vendor/doctrine/dbal/src/Driver/AbstractException.php b/core/vendor/doctrine/dbal/src/Driver/AbstractException.php index d4d20aa347..389f82e70a 100644 --- a/core/vendor/doctrine/dbal/src/Driver/AbstractException.php +++ b/core/vendor/doctrine/dbal/src/Driver/AbstractException.php @@ -35,7 +35,7 @@ public function __construct($message, $sqlState = null, $code = 0, ?Throwable $p } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLState() { diff --git a/core/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php b/core/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php index 64f239a1a2..93c487949e 100644 --- a/core/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php +++ b/core/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php @@ -27,7 +27,7 @@ abstract class AbstractMySQLDriver implements VersionAwarePlatformDriver { /** - * {@inheritdoc} + * {@inheritDoc} * * @throws Exception */ @@ -148,7 +148,7 @@ private function getMariaDbMysqlVersionNumber(string $versionString): string } /** - * {@inheritdoc} + * {@inheritDoc} * * @return AbstractMySQLPlatform */ @@ -158,7 +158,7 @@ public function getDatabasePlatform() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@link AbstractMySQLPlatform::createSchemaManager()} instead. * diff --git a/core/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php b/core/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php index f1bec91673..b0f92453af 100644 --- a/core/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php +++ b/core/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php @@ -20,7 +20,7 @@ abstract class AbstractOracleDriver implements Driver { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getDatabasePlatform() { @@ -28,7 +28,7 @@ public function getDatabasePlatform() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@link OraclePlatform::createSchemaManager()} instead. */ diff --git a/core/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php b/core/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php index 69e4baff31..099630d336 100644 --- a/core/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php +++ b/core/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php @@ -24,7 +24,7 @@ abstract class AbstractPostgreSQLDriver implements VersionAwarePlatformDriver { /** - * {@inheritdoc} + * {@inheritDoc} */ public function createDatabasePlatformForVersion($version) { @@ -55,7 +55,7 @@ public function createDatabasePlatformForVersion($version) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getDatabasePlatform() { @@ -63,7 +63,7 @@ public function getDatabasePlatform() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@link PostgreSQLPlatform::createSchemaManager()} instead. */ diff --git a/core/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php b/core/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php index c5d79feeff..b9a99552e6 100644 --- a/core/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php +++ b/core/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php @@ -20,7 +20,7 @@ abstract class AbstractSQLServerDriver implements Driver { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getDatabasePlatform() { @@ -28,7 +28,7 @@ public function getDatabasePlatform() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@link SQLServerPlatform::createSchemaManager()} instead. */ diff --git a/core/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver.php b/core/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver.php index 3c9d2c7141..f8808f7565 100644 --- a/core/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver.php +++ b/core/vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver.php @@ -19,7 +19,7 @@ abstract class AbstractSQLiteDriver implements Driver { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getDatabasePlatform() { @@ -27,7 +27,7 @@ public function getDatabasePlatform() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@link SqlitePlatform::createSchemaManager()} instead. */ diff --git a/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php b/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php index 1eb913e357..dfb11c2366 100644 --- a/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php +++ b/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php @@ -43,7 +43,7 @@ public function __construct($connection) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getServerVersion() { @@ -70,7 +70,7 @@ public function query(string $sql): ResultInterface } /** - * {@inheritdoc} + * {@inheritDoc} */ public function quote($value, $type = ParameterType::STRING) { @@ -95,7 +95,7 @@ public function exec(string $sql): int } /** - * {@inheritdoc} + * {@inheritDoc} */ public function lastInsertId($name = null) { diff --git a/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Driver.php b/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Driver.php index 897d8a2446..7650db5f46 100644 --- a/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Driver.php @@ -12,7 +12,7 @@ final class Driver extends AbstractDB2Driver { /** - * {@inheritdoc} + * {@inheritDoc} * * @return Connection */ diff --git a/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Statement.php b/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Statement.php index 4cfb135d04..699e236d71 100644 --- a/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Statement.php +++ b/core/vendor/doctrine/dbal/src/Driver/IBMDB2/Statement.php @@ -56,7 +56,7 @@ public function __construct($stmt) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function bindValue($param, $value, $type = ParameterType::STRING): bool { @@ -75,7 +75,7 @@ public function bindValue($param, $value, $type = ParameterType::STRING): bool } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see bindValue()} instead. */ @@ -132,7 +132,7 @@ private function bind($position, &$variable, int $parameterType, int $dataType): } /** - * {@inheritdoc} + * {@inheritDoc} */ public function execute($params = null): ResultInterface { @@ -182,6 +182,8 @@ private function bindLobs(): array } else { $this->bind($param, $value, DB2_PARAM_IN, DB2_CHAR); } + + unset($value); } return $handles; diff --git a/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php b/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php index 6dab1cf13a..f2809cd0a5 100644 --- a/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php +++ b/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php @@ -34,7 +34,7 @@ public function query(string $sql): Result } /** - * {@inheritdoc} + * {@inheritDoc} */ public function quote($value, $type = ParameterType::STRING) { @@ -47,7 +47,7 @@ public function exec(string $sql): int } /** - * {@inheritdoc} + * {@inheritDoc} */ public function lastInsertId($name = null) { @@ -63,7 +63,7 @@ public function lastInsertId($name = null) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function beginTransaction() { @@ -71,7 +71,7 @@ public function beginTransaction() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function commit() { @@ -79,7 +79,7 @@ public function commit() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function rollBack() { @@ -87,7 +87,7 @@ public function rollBack() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getServerVersion() { diff --git a/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php b/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php index 6fb8b5950f..1c9d430972 100644 --- a/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php +++ b/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php @@ -20,7 +20,7 @@ public function __construct(Driver $wrappedDriver) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function connect( #[SensitiveParameter] @@ -30,7 +30,7 @@ public function connect( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getDatabasePlatform() { @@ -38,7 +38,7 @@ public function getDatabasePlatform() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@link AbstractPlatform::createSchemaManager()} instead. */ @@ -60,7 +60,7 @@ public function getExceptionConverter(): ExceptionConverter } /** - * {@inheritdoc} + * {@inheritDoc} */ public function createDatabasePlatformForVersion($version) { diff --git a/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php b/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php index de90207b06..198d39b0db 100644 --- a/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php +++ b/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php @@ -14,7 +14,7 @@ public function __construct(Result $result) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchNumeric() { @@ -22,7 +22,7 @@ public function fetchNumeric() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchAssociative() { @@ -30,7 +30,7 @@ public function fetchAssociative() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchOne() { @@ -38,7 +38,7 @@ public function fetchOne() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchAllNumeric(): array { @@ -46,7 +46,7 @@ public function fetchAllNumeric(): array } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchAllAssociative(): array { @@ -54,7 +54,7 @@ public function fetchAllAssociative(): array } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchFirstColumn(): array { diff --git a/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php b/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php index 70e8df637c..6cd2f8f089 100644 --- a/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php +++ b/core/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php @@ -19,7 +19,7 @@ public function __construct(Statement $wrappedStatement) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function bindValue($param, $value, $type = ParameterType::STRING) { @@ -36,7 +36,7 @@ public function bindValue($param, $value, $type = ParameterType::STRING) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see bindValue()} instead. */ @@ -62,7 +62,7 @@ public function bindParam($param, &$variable, $type = ParameterType::STRING, $le } /** - * {@inheritdoc} + * {@inheritDoc} */ public function execute($params = null): Result { diff --git a/core/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php b/core/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php index 78112d8254..d492684cc1 100644 --- a/core/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php +++ b/core/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php @@ -71,7 +71,7 @@ public function query(string $sql): ResultInterface } /** - * {@inheritdoc} + * {@inheritDoc} */ public function quote($value, $type = ParameterType::STRING) { @@ -94,7 +94,7 @@ public function exec(string $sql): int } /** - * {@inheritdoc} + * {@inheritDoc} */ public function lastInsertId($name = null) { diff --git a/core/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php b/core/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php index 1c804069da..4f5186875b 100644 --- a/core/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php @@ -16,7 +16,7 @@ final class Driver extends AbstractMySQLDriver { /** - * {@inheritdoc} + * {@inheritDoc} * * @return Connection */ diff --git a/core/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php b/core/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php index c096e6d762..c7dc65d1db 100644 --- a/core/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php +++ b/core/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php @@ -85,7 +85,7 @@ public function __construct(mysqli_stmt $statement) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchNumeric() { @@ -127,7 +127,7 @@ public function fetchAssociative() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchOne() { @@ -135,7 +135,7 @@ public function fetchOne() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchAllNumeric(): array { @@ -143,7 +143,7 @@ public function fetchAllNumeric(): array } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchAllAssociative(): array { @@ -151,7 +151,7 @@ public function fetchAllAssociative(): array } /** - * {@inheritdoc} + * {@inheritDoc} */ public function fetchFirstColumn(): array { diff --git a/core/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php b/core/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php index 7b7c93129b..035e487aa1 100644 --- a/core/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php +++ b/core/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php @@ -63,7 +63,7 @@ public function __construct(mysqli_stmt $stmt) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see bindValue()} instead. */ @@ -98,7 +98,7 @@ public function bindParam($param, &$variable, $type = ParameterType::STRING, $le } /** - * {@inheritdoc} + * {@inheritDoc} */ public function bindValue($param, $value, $type = ParameterType::STRING): bool { @@ -125,7 +125,7 @@ public function bindValue($param, $value, $type = ParameterType::STRING): bool } /** - * {@inheritdoc} + * {@inheritDoc} */ public function execute($params = null): ResultInterface { diff --git a/core/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php b/core/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php index da4f61aeba..72353fa31c 100644 --- a/core/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php +++ b/core/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php @@ -81,7 +81,7 @@ public function query(string $sql): ResultInterface } /** - * {@inheritdoc} + * {@inheritDoc} */ public function quote($value, $type = ParameterType::STRING) { @@ -104,7 +104,7 @@ public function exec(string $sql): int } /** - * {@inheritdoc} + * {@inheritDoc} * * @param string|null $name * diff --git a/core/vendor/doctrine/dbal/src/Driver/OCI8/Driver.php b/core/vendor/doctrine/dbal/src/Driver/OCI8/Driver.php index 898ecb369c..53e563c63c 100644 --- a/core/vendor/doctrine/dbal/src/Driver/OCI8/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/OCI8/Driver.php @@ -17,7 +17,7 @@ final class Driver extends AbstractOracleDriver { /** - * {@inheritdoc} + * {@inheritDoc} * * @return Connection */ diff --git a/core/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php b/core/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php index e707f721c1..015a14b7be 100644 --- a/core/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php +++ b/core/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php @@ -52,7 +52,7 @@ public function __construct($connection, $statement, array $parameterMap, Execut } /** - * {@inheritdoc} + * {@inheritDoc} */ public function bindValue($param, $value, $type = ParameterType::STRING): bool { @@ -69,7 +69,7 @@ public function bindValue($param, $value, $type = ParameterType::STRING): bool } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see bindValue()} instead. */ @@ -137,7 +137,7 @@ private function convertParameterType(int $type): int } /** - * {@inheritdoc} + * {@inheritDoc} */ public function execute($params = null): ResultInterface { diff --git a/core/vendor/doctrine/dbal/src/Driver/PDO/Connection.php b/core/vendor/doctrine/dbal/src/Driver/PDO/Connection.php index 5eb855a78e..a7bd2d74db 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PDO/Connection.php +++ b/core/vendor/doctrine/dbal/src/Driver/PDO/Connection.php @@ -40,7 +40,7 @@ public function exec(string $sql): int } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getServerVersion() { @@ -77,7 +77,7 @@ public function query(string $sql): ResultInterface } /** - * {@inheritdoc} + * {@inheritDoc} */ public function quote($value, $type = ParameterType::STRING) { @@ -85,7 +85,7 @@ public function quote($value, $type = ParameterType::STRING) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function lastInsertId($name = null) { diff --git a/core/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php b/core/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php index f0b836a0e9..2492698b4f 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php @@ -12,7 +12,7 @@ final class Driver extends AbstractMySQLDriver { /** - * {@inheritdoc} + * {@inheritDoc} * * @return Connection */ diff --git a/core/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php b/core/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php index e8b9aaa9d0..10ada9f0e2 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php @@ -12,7 +12,7 @@ final class Driver extends AbstractOracleDriver { /** - * {@inheritdoc} + * {@inheritDoc} * * @return Connection */ diff --git a/core/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php b/core/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php index ca7a14d00f..1c586d69d1 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php @@ -13,7 +13,7 @@ final class Driver extends AbstractPostgreSQLDriver { /** - * {@inheritdoc} + * {@inheritDoc} * * @return Connection */ diff --git a/core/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php b/core/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php index 1e9d7f7d57..63eabb71a7 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php @@ -16,7 +16,7 @@ final class Driver extends AbstractSQLServerDriver { /** - * {@inheritdoc} + * {@inheritDoc} * * @return Connection */ diff --git a/core/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php b/core/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php index edabd410ac..10f6ba7fec 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php +++ b/core/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php @@ -23,7 +23,7 @@ public function __construct(PDOStatement $statement) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see bindValue()} instead. * @@ -82,7 +82,7 @@ public function bindParam( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function bindValue($param, $value, $type = ParameterType::STRING): bool { diff --git a/core/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php b/core/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php index 92875cb9b6..2e97788e6b 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php @@ -16,7 +16,7 @@ final class Driver extends AbstractSQLiteDriver { /** - * {@inheritdoc} + * {@inheritDoc} * * @return Connection */ diff --git a/core/vendor/doctrine/dbal/src/Driver/PDO/Statement.php b/core/vendor/doctrine/dbal/src/Driver/PDO/Statement.php index 071decbefb..df2dac6f88 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PDO/Statement.php +++ b/core/vendor/doctrine/dbal/src/Driver/PDO/Statement.php @@ -24,7 +24,7 @@ public function __construct(PDOStatement $stmt) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function bindValue($param, $value, $type = ParameterType::STRING) { @@ -104,7 +104,7 @@ public function bindParam( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function execute($params = null): ResultInterface { diff --git a/core/vendor/doctrine/dbal/src/Driver/PgSQL/Connection.php b/core/vendor/doctrine/dbal/src/Driver/PgSQL/Connection.php index e316259e35..378e8ed7a1 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PgSQL/Connection.php +++ b/core/vendor/doctrine/dbal/src/Driver/PgSQL/Connection.php @@ -93,7 +93,7 @@ public function query(string $sql): Result return new Result($result); } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function quote($value, $type = ParameterType::STRING) { if ($type === ParameterType::BINARY || $type === ParameterType::LARGE_OBJECT) { @@ -108,7 +108,7 @@ public function exec(string $sql): int return $this->query($sql)->rowCount(); } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function lastInsertId($name = null) { if ($name !== null) { diff --git a/core/vendor/doctrine/dbal/src/Driver/PgSQL/Driver.php b/core/vendor/doctrine/dbal/src/Driver/PgSQL/Driver.php index 298cac7a62..73c97cd81c 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PgSQL/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/PgSQL/Driver.php @@ -23,7 +23,7 @@ final class Driver extends AbstractPostgreSQLDriver { - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function connect( #[SensitiveParameter] array $params diff --git a/core/vendor/doctrine/dbal/src/Driver/PgSQL/Result.php b/core/vendor/doctrine/dbal/src/Driver/PgSQL/Result.php index 18494bd05f..d7ea1db34d 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PgSQL/Result.php +++ b/core/vendor/doctrine/dbal/src/Driver/PgSQL/Result.php @@ -60,7 +60,7 @@ public function __destruct() $this->free(); } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function fetchNumeric() { if ($this->result === null) { @@ -75,7 +75,7 @@ public function fetchNumeric() return $this->mapNumericRow($row, $this->fetchNumericColumnTypes()); } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function fetchAssociative() { if ($this->result === null) { @@ -90,13 +90,13 @@ public function fetchAssociative() return $this->mapAssociativeRow($row, $this->fetchAssociativeColumnTypes()); } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function fetchOne() { return FetchUtils::fetchOne($this); } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function fetchAllNumeric(): array { if ($this->result === null) { @@ -117,7 +117,7 @@ public function fetchAllNumeric(): array ); } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function fetchAllAssociative(): array { if ($this->result === null) { @@ -138,7 +138,7 @@ public function fetchAllAssociative(): array ); } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function fetchFirstColumn(): array { if ($this->result === null) { diff --git a/core/vendor/doctrine/dbal/src/Driver/PgSQL/Statement.php b/core/vendor/doctrine/dbal/src/Driver/PgSQL/Statement.php index 3a4c81cba7..75af66f301 100644 --- a/core/vendor/doctrine/dbal/src/Driver/PgSQL/Statement.php +++ b/core/vendor/doctrine/dbal/src/Driver/PgSQL/Statement.php @@ -74,7 +74,7 @@ public function __destruct() ); } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function bindValue($param, $value, $type = ParameterType::STRING): bool { if (! isset($this->parameterMap[$param])) { @@ -87,7 +87,7 @@ public function bindValue($param, $value, $type = ParameterType::STRING): bool return true; } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool { Deprecation::trigger( @@ -124,7 +124,7 @@ public function bindParam($param, &$variable, $type = ParameterType::STRING, $le return true; } - /** {@inheritdoc} */ + /** {@inheritDoc} */ public function execute($params = null): Result { if ($params !== null) { diff --git a/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php b/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php index ba1c58c174..16e45d110a 100644 --- a/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php +++ b/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php @@ -36,7 +36,7 @@ public function __construct($connection) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getServerVersion() { diff --git a/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Driver.php b/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Driver.php index 7ff27fad12..fcbdb7734e 100644 --- a/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Driver.php @@ -16,7 +16,7 @@ final class Driver extends AbstractSQLServerDriver { /** - * {@inheritdoc} + * {@inheritDoc} * * @return Connection */ diff --git a/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php b/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php index 1244ba51a4..227c33456c 100644 --- a/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php +++ b/core/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php @@ -82,7 +82,7 @@ public function __construct($conn, $sql) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function bindValue($param, $value, $type = ParameterType::STRING): bool { @@ -104,7 +104,7 @@ public function bindValue($param, $value, $type = ParameterType::STRING): bool } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see bindValue()} instead. */ @@ -138,7 +138,7 @@ public function bindParam($param, &$variable, $type = ParameterType::STRING, $le } /** - * {@inheritdoc} + * {@inheritDoc} */ public function execute($params = null): ResultInterface { diff --git a/core/vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php b/core/vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php index 922f6bd168..fecc4819d0 100644 --- a/core/vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php +++ b/core/vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php @@ -10,7 +10,7 @@ final class Driver extends AbstractSQLiteDriver { /** - * {@inheritdoc} + * {@inheritDoc} */ public function connect( #[SensitiveParameter] diff --git a/core/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php b/core/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php index 6256cdb5b4..9598f43ccd 100644 --- a/core/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php +++ b/core/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php @@ -68,7 +68,7 @@ public function postConnect(ConnectionEventArgs $args) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSubscribedEvents() { diff --git a/core/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php b/core/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php index 0f77e9ffc5..4ce32d6283 100644 --- a/core/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php +++ b/core/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php @@ -34,7 +34,7 @@ public function postConnect(ConnectionEventArgs $args) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSubscribedEvents() { diff --git a/core/vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php b/core/vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php index f2ee05a32d..950f05f485 100644 --- a/core/vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php +++ b/core/vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php @@ -21,7 +21,7 @@ public function postConnect(ConnectionEventArgs $args) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSubscribedEvents() { diff --git a/core/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php b/core/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php index 9b4724ddfd..75c9fe9cf7 100644 --- a/core/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php +++ b/core/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php @@ -30,7 +30,7 @@ public function __construct($generatorTableName = 'sequences') } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptSchema(Schema $schema) { @@ -41,35 +41,35 @@ public function acceptSchema(Schema $schema) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptTable(Table $table) { } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptColumn(Table $table, Column $column) { } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) { } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptIndex(Table $table, Index $index) { } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptSequence(Sequence $sequence) { diff --git a/core/vendor/doctrine/dbal/src/Logging/DebugStack.php b/core/vendor/doctrine/dbal/src/Logging/DebugStack.php index e8539e5841..1a970d060f 100644 --- a/core/vendor/doctrine/dbal/src/Logging/DebugStack.php +++ b/core/vendor/doctrine/dbal/src/Logging/DebugStack.php @@ -43,7 +43,7 @@ public function __construct() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function startQuery($sql, ?array $params = null, ?array $types = null) { @@ -62,7 +62,7 @@ public function startQuery($sql, ?array $params = null, ?array $types = null) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function stopQuery() { diff --git a/core/vendor/doctrine/dbal/src/Logging/LoggerChain.php b/core/vendor/doctrine/dbal/src/Logging/LoggerChain.php index 3c62a1d8e0..7a4eaa49af 100644 --- a/core/vendor/doctrine/dbal/src/Logging/LoggerChain.php +++ b/core/vendor/doctrine/dbal/src/Logging/LoggerChain.php @@ -27,7 +27,7 @@ public function __construct(iterable $loggers = []) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function startQuery($sql, ?array $params = null, ?array $types = null) { @@ -37,7 +37,7 @@ public function startQuery($sql, ?array $params = null, ?array $types = null) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function stopQuery() { diff --git a/core/vendor/doctrine/dbal/src/Logging/Statement.php b/core/vendor/doctrine/dbal/src/Logging/Statement.php index 95d6035867..039b93b6a6 100644 --- a/core/vendor/doctrine/dbal/src/Logging/Statement.php +++ b/core/vendor/doctrine/dbal/src/Logging/Statement.php @@ -36,7 +36,7 @@ public function __construct(StatementInterface $statement, LoggerInterface $logg } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see bindValue()} instead. */ @@ -65,7 +65,7 @@ public function bindParam($param, &$variable, $type = ParameterType::STRING, $le } /** - * {@inheritdoc} + * {@inheritDoc} */ public function bindValue($param, $value, $type = ParameterType::STRING) { @@ -85,7 +85,7 @@ public function bindValue($param, $value, $type = ParameterType::STRING) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function execute($params = null): ResultInterface { diff --git a/core/vendor/doctrine/dbal/src/Platforms/AbstractMySQLPlatform.php b/core/vendor/doctrine/dbal/src/Platforms/AbstractMySQLPlatform.php index cdbdbec78b..73badf7f2e 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/AbstractMySQLPlatform.php +++ b/core/vendor/doctrine/dbal/src/Platforms/AbstractMySQLPlatform.php @@ -113,7 +113,7 @@ public function getConcatExpression() } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) { @@ -238,7 +238,7 @@ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengt } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) { @@ -510,7 +510,7 @@ protected function _getCreateTableSQL($name, array $columns, array $options = [] } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ @@ -983,7 +983,7 @@ private function getRemainingForeignKeyConstraintsRequiringRenamedIndexes(TableD } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff) { @@ -1062,7 +1062,7 @@ public function getSmallIntTypeDeclarationSQL(array $column) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getFloatDeclarationSQL(array $column) { @@ -1070,7 +1070,7 @@ public function getFloatDeclarationSQL(array $column) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getDecimalTypeDeclarationSQL(array $column) { @@ -1279,7 +1279,7 @@ public function getVarcharMaxLength() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -1368,7 +1368,7 @@ public function getBlobTypeDeclarationSQL(array $column) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function quoteStringLiteral($str) { @@ -1378,7 +1378,7 @@ public function quoteStringLiteral($str) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getDefaultTransactionIsolationLevel() { diff --git a/core/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php b/core/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php index 32e8b743c9..8e58a66b94 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php +++ b/core/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php @@ -4155,7 +4155,7 @@ public function getDefaultSchemaName() */ public function supportsCreateDropDatabase() { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5513', '%s is deprecated.', diff --git a/core/vendor/doctrine/dbal/src/Platforms/DB2Platform.php b/core/vendor/doctrine/dbal/src/Platforms/DB2Platform.php index c40a03e6d2..74840866e1 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/DB2Platform.php +++ b/core/vendor/doctrine/dbal/src/Platforms/DB2Platform.php @@ -26,7 +26,7 @@ class DB2Platform extends AbstractPlatform { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -42,7 +42,7 @@ public function getCharMaxLength(): int } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -58,7 +58,7 @@ public function getBinaryMaxLength() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -120,7 +120,7 @@ protected function initializeDoctrineTypeMappings() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function isCommentedDoctrineType(Type $doctrineType) { @@ -159,7 +159,7 @@ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengt } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) { @@ -244,7 +244,7 @@ protected function _getCommonIntegerTypeDeclarationSQL(array $column) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getBitAndComparisonExpression($value1, $value2) { @@ -252,7 +252,7 @@ public function getBitAndComparisonExpression($value1, $value2) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getBitOrComparisonExpression($value1, $value2) { @@ -260,7 +260,7 @@ public function getBitOrComparisonExpression($value1, $value2) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) { @@ -280,7 +280,7 @@ protected function getDateArithmeticIntervalExpression($date, $operator, $interv } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getDateDiffExpression($date1, $date2) { @@ -316,7 +316,7 @@ public function getTimeTypeDeclarationSQL(array $column) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getTruncateTableSQL($tableName, $cascade = false) { @@ -484,7 +484,7 @@ public function supportsCreateDropDatabase() } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ @@ -801,7 +801,7 @@ protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) { diff --git a/core/vendor/doctrine/dbal/src/Platforms/Keywords/DB2Keywords.php b/core/vendor/doctrine/dbal/src/Platforms/Keywords/DB2Keywords.php index ee8cb1d67f..d5dbbd734d 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/Keywords/DB2Keywords.php +++ b/core/vendor/doctrine/dbal/src/Platforms/Keywords/DB2Keywords.php @@ -10,7 +10,7 @@ class DB2Keywords extends KeywordList { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -26,7 +26,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getKeywords() { diff --git a/core/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php b/core/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php index 06c5612549..5417c6caaa 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php +++ b/core/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php @@ -19,7 +19,7 @@ public function getName(): string } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getKeywords(): array { diff --git a/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL57Keywords.php b/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL57Keywords.php index 65dcea5000..4588aab84a 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL57Keywords.php +++ b/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL57Keywords.php @@ -12,7 +12,7 @@ class MySQL57Keywords extends MySQLKeywords { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -28,7 +28,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @link http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-7.html */ diff --git a/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL80Keywords.php b/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL80Keywords.php index 1ed030afac..c62ae9e5b9 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL80Keywords.php +++ b/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQL80Keywords.php @@ -12,7 +12,7 @@ class MySQL80Keywords extends MySQL57Keywords { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -28,7 +28,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @link https://dev.mysql.com/doc/refman/8.0/en/keywords.html */ diff --git a/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQLKeywords.php b/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQLKeywords.php index 4f7fe998d5..f9505e0e17 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQLKeywords.php +++ b/core/vendor/doctrine/dbal/src/Platforms/Keywords/MySQLKeywords.php @@ -10,7 +10,7 @@ class MySQLKeywords extends KeywordList { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -26,7 +26,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getKeywords() { diff --git a/core/vendor/doctrine/dbal/src/Platforms/Keywords/OracleKeywords.php b/core/vendor/doctrine/dbal/src/Platforms/Keywords/OracleKeywords.php index d49ddd58e1..d2d0094c72 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/Keywords/OracleKeywords.php +++ b/core/vendor/doctrine/dbal/src/Platforms/Keywords/OracleKeywords.php @@ -10,7 +10,7 @@ class OracleKeywords extends KeywordList { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -26,7 +26,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getKeywords() { diff --git a/core/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQLKeywords.php b/core/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQLKeywords.php index 8714c6db61..1ff4142b23 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQLKeywords.php +++ b/core/vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQLKeywords.php @@ -10,7 +10,7 @@ class PostgreSQLKeywords extends KeywordList { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -26,7 +26,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getKeywords() { diff --git a/core/vendor/doctrine/dbal/src/Platforms/Keywords/ReservedKeywordsValidator.php b/core/vendor/doctrine/dbal/src/Platforms/Keywords/ReservedKeywordsValidator.php index e168e8b1ce..b33f3e4b31 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/Keywords/ReservedKeywordsValidator.php +++ b/core/vendor/doctrine/dbal/src/Platforms/Keywords/ReservedKeywordsValidator.php @@ -79,7 +79,7 @@ private function addViolation($asset, $violatedPlatforms): void } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptColumn(Table $table, Column $column) { @@ -90,35 +90,35 @@ public function acceptColumn(Table $table, Column $column) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) { } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptIndex(Table $table, Index $index) { } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptSchema(Schema $schema) { } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptSequence(Sequence $sequence) { } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptTable(Table $table) { diff --git a/core/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServerKeywords.php b/core/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServerKeywords.php index 48953baa25..76614cf954 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServerKeywords.php +++ b/core/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServerKeywords.php @@ -11,7 +11,7 @@ class SQLServerKeywords extends KeywordList { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -27,7 +27,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @link http://msdn.microsoft.com/en-us/library/aa238507%28v=sql.80%29.aspx */ diff --git a/core/vendor/doctrine/dbal/src/Platforms/Keywords/SQLiteKeywords.php b/core/vendor/doctrine/dbal/src/Platforms/Keywords/SQLiteKeywords.php index 65351078e9..9a3edeb577 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/Keywords/SQLiteKeywords.php +++ b/core/vendor/doctrine/dbal/src/Platforms/Keywords/SQLiteKeywords.php @@ -10,7 +10,7 @@ class SQLiteKeywords extends KeywordList { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -26,7 +26,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getKeywords() { diff --git a/core/vendor/doctrine/dbal/src/Platforms/MariaDBPlatform.php b/core/vendor/doctrine/dbal/src/Platforms/MariaDBPlatform.php index 9e3d3ddb9a..1dddeccaf2 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/MariaDBPlatform.php +++ b/core/vendor/doctrine/dbal/src/Platforms/MariaDBPlatform.php @@ -24,7 +24,7 @@ public function getDefaultValueDeclarationSQL($column) } /** - * {@inheritdoc} + * {@inheritDoc} * * @link https://mariadb.com/kb/en/library/json-data-type/ */ diff --git a/core/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php b/core/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php index ea11ee6365..f3899959d3 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php +++ b/core/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php @@ -17,7 +17,7 @@ class MySQL57Platform extends MySQLPlatform { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -34,7 +34,7 @@ public function hasNativeJsonType() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getJsonTypeDeclarationSQL(array $column) { @@ -47,7 +47,7 @@ public function createSQLParser(): Parser } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getPreAlterTableRenameIndexForeignKeySQL(TableDiff $diff) { @@ -55,7 +55,7 @@ protected function getPreAlterTableRenameIndexForeignKeySQL(TableDiff $diff) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getPostAlterTableRenameIndexForeignKeySQL(TableDiff $diff) { @@ -63,7 +63,7 @@ protected function getPostAlterTableRenameIndexForeignKeySQL(TableDiff $diff) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) { @@ -71,7 +71,7 @@ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Implement {@see createReservedKeywordsList()} instead. */ @@ -88,7 +88,7 @@ protected function getReservedKeywordsClass() } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function initializeDoctrineTypeMappings() { diff --git a/core/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php b/core/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php index dd6599de15..9ea6ee881c 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php +++ b/core/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php @@ -10,7 +10,7 @@ class MySQL80Platform extends MySQL57Platform { /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Implement {@see createReservedKeywordsList()} instead. */ diff --git a/core/vendor/doctrine/dbal/src/Platforms/OraclePlatform.php b/core/vendor/doctrine/dbal/src/Platforms/OraclePlatform.php index 306173e99a..4e1b5b9d19 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/OraclePlatform.php +++ b/core/vendor/doctrine/dbal/src/Platforms/OraclePlatform.php @@ -103,7 +103,7 @@ public function getLocateExpression($str, $substr, $startPos = false) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) { @@ -373,7 +373,7 @@ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengt } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) { @@ -390,7 +390,7 @@ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $length } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -798,7 +798,7 @@ public function getDropForeignKeySQL($foreignKey, $table) } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ @@ -818,7 +818,7 @@ public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ @@ -1001,7 +1001,7 @@ public function getAlterTableSQL(TableDiff $diff) } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ @@ -1050,7 +1050,7 @@ public function getColumnDeclarationSQL($name, array $column) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) { @@ -1063,7 +1063,7 @@ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -1080,7 +1080,7 @@ public function usesSequenceEmulatedIdentityColumns() } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the OraclePlatform class hierarchy. */ diff --git a/core/vendor/doctrine/dbal/src/Platforms/PostgreSQLPlatform.php b/core/vendor/doctrine/dbal/src/Platforms/PostgreSQLPlatform.php index 7c4592651b..b01eb860a2 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/PostgreSQLPlatform.php +++ b/core/vendor/doctrine/dbal/src/Platforms/PostgreSQLPlatform.php @@ -10,6 +10,7 @@ use Doctrine\DBAL\Schema\Index; use Doctrine\DBAL\Schema\PostgreSQLSchemaManager; use Doctrine\DBAL\Schema\Sequence; +use Doctrine\DBAL\Schema\Table; use Doctrine\DBAL\Schema\TableDiff; use Doctrine\DBAL\Types\BinaryType; use Doctrine\DBAL\Types\BlobType; @@ -127,7 +128,7 @@ public function getLocateExpression($str, $substr, $startPos = false) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) { @@ -169,7 +170,7 @@ public function supportsSchemas() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -194,7 +195,7 @@ public function supportsIdentityColumns() } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ @@ -204,7 +205,7 @@ public function supportsPartialIndexes() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -221,7 +222,7 @@ public function usesSequenceEmulatedIdentityColumns() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -728,7 +729,7 @@ private function isUnchangedBinaryColumn(ColumnDiff $columnDiff): bool } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) { @@ -741,7 +742,7 @@ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ @@ -809,6 +810,36 @@ public function getDropForeignKeySQL($foreignKey, $table) return $this->getDropConstraintSQL($foreignKey, $table); } + /** + * {@inheritDoc} + */ + public function getDropIndexSQL($index, $table = null) + { + if ($index instanceof Index && $index->isPrimary() && $table !== null) { + $constraintName = $index->getName() === 'primary' ? $this->tableName($table) . '_pkey' : $index->getName(); + + return $this->getDropConstraintSQL($constraintName, $table); + } + + if ($index === '"primary"' && $table !== null) { + $constraintName = $this->tableName($table) . '_pkey'; + + return $this->getDropConstraintSQL($constraintName, $table); + } + + return parent::getDropIndexSQL($index, $table); + } + + /** + * @param Table|string|null $table + * + * @return string + */ + private function tableName($table) + { + return $table instanceof Table ? $table->getName() : (string) $table; + } + /** * {@inheritDoc} */ @@ -1092,7 +1123,7 @@ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed) { @@ -1227,7 +1258,7 @@ public function getVarcharMaxLength() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getBinaryMaxLength() { @@ -1241,7 +1272,7 @@ public function getBinaryMaxLength() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -1257,7 +1288,7 @@ public function getBinaryDefaultLength() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -1299,7 +1330,7 @@ public function getBlobTypeDeclarationSQL(array $column) } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ @@ -1313,7 +1344,7 @@ public function getDefaultValueDeclarationSQL($column) } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ @@ -1323,7 +1354,7 @@ public function supportsColumnCollation() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getJsonTypeDeclarationSQL(array $column) { diff --git a/core/vendor/doctrine/dbal/src/Platforms/SQLServerPlatform.php b/core/vendor/doctrine/dbal/src/Platforms/SQLServerPlatform.php index 027f7239c7..03a1e8c406 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/SQLServerPlatform.php +++ b/core/vendor/doctrine/dbal/src/Platforms/SQLServerPlatform.php @@ -49,7 +49,7 @@ class SQLServerPlatform extends AbstractPlatform { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getCurrentDateSQL() { @@ -57,7 +57,7 @@ public function getCurrentDateSQL() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getCurrentTimeSQL() { @@ -76,7 +76,7 @@ private function getConvertExpression($dataType, $expression): string } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) { @@ -135,7 +135,7 @@ public function supportsReleaseSavepoints() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function supportsSchemas() { @@ -143,7 +143,7 @@ public function supportsSchemas() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -189,7 +189,7 @@ public function getCreateSequenceSQL(Sequence $sequence): string } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. */ @@ -206,7 +206,7 @@ public function getListSequencesSQL($database) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSequenceNextValSQL($sequence) { @@ -857,7 +857,7 @@ protected function getDropColumnCommentSQL($tableName, $columnName) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) { @@ -1315,7 +1315,7 @@ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengt } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) { @@ -1334,7 +1334,7 @@ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $length } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -1575,7 +1575,7 @@ public function rollbackSavePoint($savepoint) } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ @@ -1659,7 +1659,7 @@ public function getBlobTypeDeclarationSQL(array $column) } /** - * {@inheritdoc} + * {@inheritDoc} * * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. */ diff --git a/core/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php b/core/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php index 71c29f38ae..5035801cfd 100644 --- a/core/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php +++ b/core/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php @@ -141,7 +141,7 @@ public function getLocateExpression($str, $substr, $startPos = false) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) { @@ -482,7 +482,7 @@ protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed) { @@ -490,7 +490,7 @@ protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -506,7 +506,7 @@ public function getBinaryMaxLength() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ @@ -941,7 +941,7 @@ public function getCreatePrimaryKeySQL(Index $index, $table) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table) { @@ -949,7 +949,7 @@ public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getDropForeignKeySQL($foreignKey, $table) { diff --git a/core/vendor/doctrine/dbal/src/Portability/Statement.php b/core/vendor/doctrine/dbal/src/Portability/Statement.php index 9b3e74f583..8fcd79d4a8 100644 --- a/core/vendor/doctrine/dbal/src/Portability/Statement.php +++ b/core/vendor/doctrine/dbal/src/Portability/Statement.php @@ -24,7 +24,7 @@ public function __construct(DriverStatement $stmt, Converter $converter) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function execute($params = null): ResultInterface { diff --git a/core/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php b/core/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php index 445c9ff2fb..7e1fd93ff2 100644 --- a/core/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php +++ b/core/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php @@ -215,7 +215,7 @@ public function listTableColumns($table, $database = null) if ($database === null) { $database = $this->getDatabase(__METHOD__); } else { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/issues/5284', 'Passing $database to AbstractSchemaManager::listTableColumns() is deprecated.', @@ -242,10 +242,10 @@ protected function doListTableColumns($table, $database = null): array if ($database === null) { $database = $this->getDatabase(__METHOD__); } else { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/issues/5284', - 'Passing $database to AbstractSchemaManager::listTableColumns() is deprecated.', + 'Passing $database to AbstractSchemaManager::doListTableColumns() is deprecated.', ); } @@ -442,7 +442,7 @@ protected function doListTables(): array */ public function listTableDetails($name) { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5595', '%s is deprecated. Use introspectTable() instead.', diff --git a/core/vendor/doctrine/dbal/src/Schema/Column.php b/core/vendor/doctrine/dbal/src/Schema/Column.php index d7e39d8cf8..03fd686f43 100644 --- a/core/vendor/doctrine/dbal/src/Schema/Column.php +++ b/core/vendor/doctrine/dbal/src/Schema/Column.php @@ -436,7 +436,7 @@ public function setCustomSchemaOptions(array $customSchemaOptions) */ public function getCustomSchemaOptions() { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5476', 'Column::getCustomSchemaOptions() is deprecated. Use getPlatformOptions() instead.', diff --git a/core/vendor/doctrine/dbal/src/Schema/DB2SchemaManager.php b/core/vendor/doctrine/dbal/src/Schema/DB2SchemaManager.php index 0308d69b53..1070a14e27 100644 --- a/core/vendor/doctrine/dbal/src/Schema/DB2SchemaManager.php +++ b/core/vendor/doctrine/dbal/src/Schema/DB2SchemaManager.php @@ -50,7 +50,7 @@ public function listTables() */ public function listTableDetails($name) { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5595', '%s is deprecated. Use introspectTable() instead.', @@ -85,7 +85,7 @@ public function listTableForeignKeys($table, $database = null) } /** - * {@inheritdoc} + * {@inheritDoc} * * @throws Exception */ @@ -170,7 +170,7 @@ protected function _getPortableTableColumnDefinition($tableColumn) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableDefinition($table) { @@ -180,7 +180,7 @@ protected function _getPortableTableDefinition($table) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) { @@ -193,7 +193,7 @@ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableForeignKeyDefinition($tableForeignKey) { @@ -207,7 +207,7 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableForeignKeysList($tableForeignKeys) { @@ -255,7 +255,7 @@ protected function _getPortableForeignKeyRuleDef($def) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableViewDefinition($view) { diff --git a/core/vendor/doctrine/dbal/src/Schema/ForeignKeyConstraint.php b/core/vendor/doctrine/dbal/src/Schema/ForeignKeyConstraint.php index 852ad0a315..2f0311cd66 100644 --- a/core/vendor/doctrine/dbal/src/Schema/ForeignKeyConstraint.php +++ b/core/vendor/doctrine/dbal/src/Schema/ForeignKeyConstraint.php @@ -194,7 +194,7 @@ public function getUnquotedForeignColumns() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see getLocalColumns()} instead. * diff --git a/core/vendor/doctrine/dbal/src/Schema/Index.php b/core/vendor/doctrine/dbal/src/Schema/Index.php index 222f208292..84fac41469 100644 --- a/core/vendor/doctrine/dbal/src/Schema/Index.php +++ b/core/vendor/doctrine/dbal/src/Schema/Index.php @@ -84,7 +84,7 @@ protected function _addColumn(string $column): void } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getColumns() { @@ -92,7 +92,7 @@ public function getColumns() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getQuotedColumns(AbstractPlatform $platform) { diff --git a/core/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php b/core/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php index f2305098ab..2ddc249d81 100644 --- a/core/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php +++ b/core/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php @@ -73,7 +73,7 @@ public function listTables() */ public function listTableDetails($name) { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5595', '%s is deprecated. Use introspectTable() instead.', @@ -108,7 +108,7 @@ public function listTableForeignKeys($table, $database = null) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableViewDefinition($view) { @@ -116,7 +116,7 @@ protected function _getPortableViewDefinition($view) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableDefinition($table) { @@ -124,7 +124,7 @@ protected function _getPortableTableDefinition($table) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) { @@ -154,7 +154,7 @@ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableDatabaseDefinition($database) { @@ -162,7 +162,7 @@ protected function _getPortableDatabaseDefinition($database) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableColumnDefinition($tableColumn) { @@ -330,7 +330,7 @@ private function getMariaDb1027ColumnDefault(MariaDb1027Platform $platform, ?str } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableForeignKeysList($tableForeignKeys) { diff --git a/core/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php b/core/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php index 8b0d8e3cc3..0737522146 100644 --- a/core/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php +++ b/core/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php @@ -51,7 +51,7 @@ public function listTables() */ public function listTableDetails($name) { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5595', '%s is deprecated. Use introspectTable() instead.', @@ -86,7 +86,7 @@ public function listTableForeignKeys($table, $database = null) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableViewDefinition($view) { @@ -96,7 +96,7 @@ protected function _getPortableViewDefinition($view) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableDefinition($table) { @@ -106,7 +106,7 @@ protected function _getPortableTableDefinition($table) } /** - * {@inheritdoc} + * {@inheritDoc} * * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html */ @@ -137,7 +137,7 @@ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableColumnDefinition($tableColumn) { @@ -236,7 +236,7 @@ protected function _getPortableTableColumnDefinition($tableColumn) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableForeignKeysList($tableForeignKeys) { @@ -282,7 +282,7 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey): Fore } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableSequenceDefinition($sequence) { @@ -296,7 +296,7 @@ protected function _getPortableSequenceDefinition($sequence) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableDatabaseDefinition($database) { @@ -306,7 +306,7 @@ protected function _getPortableDatabaseDefinition($database) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function createDatabase($database) { @@ -344,7 +344,7 @@ public function dropAutoincrement($table) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function dropTable($name) { diff --git a/core/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php b/core/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php index 87df0457f6..183ef5e6a7 100644 --- a/core/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php +++ b/core/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php @@ -63,7 +63,7 @@ public function listTables() */ public function listTableDetails($name) { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5595', '%s is deprecated. Use introspectTable() instead.', @@ -218,7 +218,7 @@ public function determineExistingSchemaSearchPaths() } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableForeignKeyDefinition($tableForeignKey) { @@ -264,7 +264,7 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableViewDefinition($view) { @@ -272,7 +272,7 @@ protected function _getPortableViewDefinition($view) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableDefinition($table) { @@ -286,7 +286,7 @@ protected function _getPortableTableDefinition($table) } /** - * {@inheritdoc} + * {@inheritDoc} * * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html */ @@ -325,7 +325,7 @@ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableDatabaseDefinition($database) { @@ -333,7 +333,7 @@ protected function _getPortableDatabaseDefinition($database) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see listSchemaNames()} instead. */ @@ -350,7 +350,7 @@ protected function getPortableNamespaceDefinition(array $namespace) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableSequenceDefinition($sequence) { @@ -364,7 +364,7 @@ protected function _getPortableSequenceDefinition($sequence) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableColumnDefinition($tableColumn) { diff --git a/core/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php b/core/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php index 657e3651a8..64538e6898 100644 --- a/core/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php +++ b/core/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php @@ -55,7 +55,7 @@ public function listTables() */ public function listTableDetails($name) { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5595', '%s is deprecated. Use introspectTable() instead.', @@ -104,7 +104,7 @@ public function listSchemaNames(): array } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableSequenceDefinition($sequence) { @@ -112,7 +112,7 @@ protected function _getPortableSequenceDefinition($sequence) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableColumnDefinition($tableColumn) { @@ -209,7 +209,7 @@ private function parseDefaultExpression(string $value): ?string } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableForeignKeysList($tableForeignKeys) { @@ -239,7 +239,7 @@ protected function _getPortableTableForeignKeysList($tableForeignKeys) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) { @@ -253,7 +253,7 @@ protected function _getPortableTableIndexesList($tableIndexes, $tableName = null } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableForeignKeyDefinition($tableForeignKey) { @@ -267,7 +267,7 @@ protected function _getPortableTableForeignKeyDefinition($tableForeignKey) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableDefinition($table) { @@ -279,7 +279,7 @@ protected function _getPortableTableDefinition($table) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableDatabaseDefinition($database) { @@ -287,7 +287,7 @@ protected function _getPortableDatabaseDefinition($database) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see listSchemaNames()} instead. */ @@ -304,7 +304,7 @@ protected function getPortableNamespaceDefinition(array $namespace) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableViewDefinition($view) { @@ -313,7 +313,7 @@ protected function _getPortableViewDefinition($view) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function alterTable(TableDiff $tableDiff) { @@ -403,7 +403,7 @@ protected function selectTableNames(string $databaseName): Result ORDER BY name SQL; - return $this->_conn->executeQuery($sql, [$databaseName]); + return $this->_conn->executeQuery($sql); } protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result diff --git a/core/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php b/core/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php index c240ce2129..a8f3e92a56 100644 --- a/core/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php +++ b/core/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php @@ -107,7 +107,7 @@ protected function fetchForeignKeyColumnsByTable(string $databaseName): array } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Delete the database file using the filesystem. */ @@ -127,7 +127,7 @@ public function dropDatabase($database) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated The engine will create the database file automatically. */ @@ -151,7 +151,7 @@ public function createDatabase($database) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function createForeignKey(ForeignKeyConstraint $foreignKey, $table) { @@ -163,7 +163,7 @@ public function createForeignKey(ForeignKeyConstraint $foreignKey, $table) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated Use {@see dropForeignKey()} and {@see createForeignKey()} instead. */ @@ -184,7 +184,7 @@ public function dropAndCreateForeignKey(ForeignKeyConstraint $foreignKey, $table } /** - * {@inheritdoc} + * {@inheritDoc} */ public function dropForeignKey($foreignKey, $table) { @@ -196,7 +196,7 @@ public function dropForeignKey($foreignKey, $table) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function listTableForeignKeys($table, $database = null) { @@ -213,7 +213,7 @@ public function listTableForeignKeys($table, $database = null) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableDefinition($table) { @@ -221,7 +221,7 @@ protected function _getPortableTableDefinition($table) } /** - * {@inheritdoc} + * {@inheritDoc} * * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html */ @@ -285,7 +285,7 @@ static function (array $a, array $b): int { } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableColumnList($table, $database, $tableColumns) { @@ -352,7 +352,7 @@ protected function _getPortableTableColumnList($table, $database, $tableColumns) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableColumnDefinition($tableColumn) { @@ -431,7 +431,7 @@ protected function _getPortableTableColumnDefinition($tableColumn) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableViewDefinition($view) { @@ -439,7 +439,7 @@ protected function _getPortableViewDefinition($view) } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _getPortableTableForeignKeysList($tableForeignKeys) { diff --git a/core/vendor/doctrine/dbal/src/Schema/Table.php b/core/vendor/doctrine/dbal/src/Schema/Table.php index 7fbd6091a4..ce4cc3260f 100644 --- a/core/vendor/doctrine/dbal/src/Schema/Table.php +++ b/core/vendor/doctrine/dbal/src/Schema/Table.php @@ -724,7 +724,7 @@ public function getColumns() */ public function getForeignKeyColumns() { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5731', '%s is deprecated. Use getForeignKey() and ForeignKeyConstraint::getLocalColumns() instead.', @@ -813,7 +813,7 @@ public function getPrimaryKey() */ public function getPrimaryKeyColumns() { - Deprecation::trigger( + Deprecation::triggerIfCalledFromOutside( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5731', '%s is deprecated. Use getPrimaryKey() and Index::getColumns() instead.', diff --git a/core/vendor/doctrine/dbal/src/Schema/TableDiff.php b/core/vendor/doctrine/dbal/src/Schema/TableDiff.php index 58128d75b3..9aaf9e7702 100644 --- a/core/vendor/doctrine/dbal/src/Schema/TableDiff.php +++ b/core/vendor/doctrine/dbal/src/Schema/TableDiff.php @@ -180,11 +180,11 @@ public function __construct( $this->changedForeignKeys = $changedForeignKeys; $this->removedForeignKeys = $removedForeignKeys; - if ($fromTable !== null) { + if ($fromTable === null) { Deprecation::trigger( 'doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5678', - 'Not passing the $fromColumn to %s is deprecated.', + 'Not passing the $fromTable to %s is deprecated.', __METHOD__, ); } diff --git a/core/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php b/core/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php index 85502e714b..f353f303aa 100644 --- a/core/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php +++ b/core/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php @@ -57,7 +57,7 @@ public function __construct(string $name, array $columns, array $flags = [], arr } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getColumns() { @@ -65,7 +65,7 @@ public function getColumns() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getQuotedColumns(AbstractPlatform $platform) { diff --git a/core/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php b/core/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php index 3d2ad27c00..f8f3b5825c 100644 --- a/core/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php +++ b/core/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php @@ -21,7 +21,7 @@ public function acceptSchema(Schema $schema) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptNamespace($namespaceName) { diff --git a/core/vendor/doctrine/dbal/src/Schema/Visitor/CreateSchemaSqlCollector.php b/core/vendor/doctrine/dbal/src/Schema/Visitor/CreateSchemaSqlCollector.php index e7908c3ee0..bab0ff982e 100644 --- a/core/vendor/doctrine/dbal/src/Schema/Visitor/CreateSchemaSqlCollector.php +++ b/core/vendor/doctrine/dbal/src/Schema/Visitor/CreateSchemaSqlCollector.php @@ -39,7 +39,7 @@ public function __construct(AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptNamespace($namespaceName) { @@ -51,7 +51,7 @@ public function acceptNamespace($namespaceName) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptTable(Table $table) { @@ -59,7 +59,7 @@ public function acceptTable(Table $table) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) { @@ -71,7 +71,7 @@ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkCons } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptSequence(Sequence $sequence) { diff --git a/core/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php b/core/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php index 0c5730258c..ddec6b4aed 100644 --- a/core/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php +++ b/core/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php @@ -38,7 +38,7 @@ public function __construct(AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptTable(Table $table) { @@ -46,7 +46,7 @@ public function acceptTable(Table $table) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) { @@ -58,7 +58,7 @@ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkCons } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptSequence(Sequence $sequence) { diff --git a/core/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php b/core/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php index e3c61411e4..5eff0d9450 100644 --- a/core/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php +++ b/core/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php @@ -21,7 +21,7 @@ class Graphviz extends AbstractVisitor private string $output = ''; /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) { @@ -37,7 +37,7 @@ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkCons } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptSchema(Schema $schema) { @@ -50,7 +50,7 @@ public function acceptSchema(Schema $schema) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptTable(Table $table) { diff --git a/core/vendor/doctrine/dbal/src/Schema/Visitor/RemoveNamespacedAssets.php b/core/vendor/doctrine/dbal/src/Schema/Visitor/RemoveNamespacedAssets.php index c67bf99e8d..5ed349bfdd 100644 --- a/core/vendor/doctrine/dbal/src/Schema/Visitor/RemoveNamespacedAssets.php +++ b/core/vendor/doctrine/dbal/src/Schema/Visitor/RemoveNamespacedAssets.php @@ -36,7 +36,7 @@ public function __construct() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptSchema(Schema $schema) { @@ -44,7 +44,7 @@ public function acceptSchema(Schema $schema) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptTable(Table $table) { @@ -60,7 +60,7 @@ public function acceptTable(Table $table) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptSequence(Sequence $sequence) { @@ -76,7 +76,7 @@ public function acceptSequence(Sequence $sequence) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) { diff --git a/core/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php b/core/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php index 4748d717bf..1d10d4f0ca 100644 --- a/core/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php +++ b/core/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php @@ -137,7 +137,7 @@ protected function configure() } /** - * {@inheritdoc} + * {@inheritDoc} * * @return int * diff --git a/core/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php b/core/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php index 5f4f7a92f9..874b4193f9 100644 --- a/core/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php +++ b/core/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php @@ -56,7 +56,7 @@ protected function configure() } /** - * {@inheritdoc} + * {@inheritDoc} * * @return int * diff --git a/core/vendor/doctrine/dbal/src/Types/ArrayType.php b/core/vendor/doctrine/dbal/src/Types/ArrayType.php index fb202406f8..c2aa2f4de0 100644 --- a/core/vendor/doctrine/dbal/src/Types/ArrayType.php +++ b/core/vendor/doctrine/dbal/src/Types/ArrayType.php @@ -23,7 +23,7 @@ class ArrayType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -31,7 +31,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function convertToDatabaseValue($value, AbstractPlatform $platform) { @@ -40,7 +40,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function convertToPHPValue($value, AbstractPlatform $platform) { @@ -66,7 +66,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -74,7 +74,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/AsciiStringType.php b/core/vendor/doctrine/dbal/src/Types/AsciiStringType.php index ab1e0e0614..4ea92d9744 100644 --- a/core/vendor/doctrine/dbal/src/Types/AsciiStringType.php +++ b/core/vendor/doctrine/dbal/src/Types/AsciiStringType.php @@ -10,7 +10,7 @@ final class AsciiStringType extends StringType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { diff --git a/core/vendor/doctrine/dbal/src/Types/BigIntType.php b/core/vendor/doctrine/dbal/src/Types/BigIntType.php index 795883b3a2..8d57a11218 100644 --- a/core/vendor/doctrine/dbal/src/Types/BigIntType.php +++ b/core/vendor/doctrine/dbal/src/Types/BigIntType.php @@ -11,7 +11,7 @@ class BigIntType extends Type implements PhpIntegerMappingType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -19,7 +19,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -27,7 +27,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getBindingType() { @@ -35,7 +35,7 @@ public function getBindingType() } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * diff --git a/core/vendor/doctrine/dbal/src/Types/BinaryType.php b/core/vendor/doctrine/dbal/src/Types/BinaryType.php index e030f16602..acbbd87ad2 100644 --- a/core/vendor/doctrine/dbal/src/Types/BinaryType.php +++ b/core/vendor/doctrine/dbal/src/Types/BinaryType.php @@ -18,7 +18,7 @@ class BinaryType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -26,7 +26,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function convertToPHPValue($value, AbstractPlatform $platform) { @@ -50,7 +50,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -58,7 +58,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getBindingType() { diff --git a/core/vendor/doctrine/dbal/src/Types/BlobType.php b/core/vendor/doctrine/dbal/src/Types/BlobType.php index b71e7255eb..cfaabec903 100644 --- a/core/vendor/doctrine/dbal/src/Types/BlobType.php +++ b/core/vendor/doctrine/dbal/src/Types/BlobType.php @@ -18,7 +18,7 @@ class BlobType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -26,7 +26,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function convertToPHPValue($value, AbstractPlatform $platform) { @@ -50,7 +50,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -58,7 +58,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getBindingType() { diff --git a/core/vendor/doctrine/dbal/src/Types/BooleanType.php b/core/vendor/doctrine/dbal/src/Types/BooleanType.php index 440ca72bd4..7dc7f3a9de 100644 --- a/core/vendor/doctrine/dbal/src/Types/BooleanType.php +++ b/core/vendor/doctrine/dbal/src/Types/BooleanType.php @@ -13,7 +13,7 @@ class BooleanType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -21,7 +21,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function convertToDatabaseValue($value, AbstractPlatform $platform) { @@ -29,7 +29,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -43,7 +43,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -51,7 +51,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getBindingType() { diff --git a/core/vendor/doctrine/dbal/src/Types/DateImmutableType.php b/core/vendor/doctrine/dbal/src/Types/DateImmutableType.php index 86f0544704..da96b69d54 100644 --- a/core/vendor/doctrine/dbal/src/Types/DateImmutableType.php +++ b/core/vendor/doctrine/dbal/src/Types/DateImmutableType.php @@ -12,7 +12,7 @@ class DateImmutableType extends DateType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -20,7 +20,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -46,7 +46,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -74,7 +74,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/DateIntervalType.php b/core/vendor/doctrine/dbal/src/Types/DateIntervalType.php index ac4885d97c..32b32c8d44 100644 --- a/core/vendor/doctrine/dbal/src/Types/DateIntervalType.php +++ b/core/vendor/doctrine/dbal/src/Types/DateIntervalType.php @@ -17,7 +17,7 @@ class DateIntervalType extends Type public const FORMAT = '%RP%YY%MM%DDT%HH%IM%SS'; /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -25,7 +25,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -35,7 +35,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -57,7 +57,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -92,7 +92,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php b/core/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php index cb1a17f297..8da25be523 100644 --- a/core/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php +++ b/core/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php @@ -14,7 +14,7 @@ class DateTimeImmutableType extends DateTimeType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -22,7 +22,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -48,7 +48,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -80,7 +80,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/DateTimeType.php b/core/vendor/doctrine/dbal/src/Types/DateTimeType.php index 4a75dfd7e1..f1e5fb5e1a 100644 --- a/core/vendor/doctrine/dbal/src/Types/DateTimeType.php +++ b/core/vendor/doctrine/dbal/src/Types/DateTimeType.php @@ -14,7 +14,7 @@ class DateTimeType extends Type implements PhpDateTimeMappingType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -22,7 +22,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -30,7 +30,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -52,7 +52,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * diff --git a/core/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php b/core/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php index aab826aa40..f3a4b884d8 100644 --- a/core/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php +++ b/core/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php @@ -12,7 +12,7 @@ class DateTimeTzImmutableType extends DateTimeTzType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -20,7 +20,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @psalm-param T $value * @@ -46,7 +46,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -74,7 +74,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/DateTimeTzType.php b/core/vendor/doctrine/dbal/src/Types/DateTimeTzType.php index c3f3fc9cb1..c105093bdf 100644 --- a/core/vendor/doctrine/dbal/src/Types/DateTimeTzType.php +++ b/core/vendor/doctrine/dbal/src/Types/DateTimeTzType.php @@ -25,7 +25,7 @@ class DateTimeTzType extends Type implements PhpDateTimeMappingType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -33,7 +33,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -41,7 +41,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -67,7 +67,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * diff --git a/core/vendor/doctrine/dbal/src/Types/DateType.php b/core/vendor/doctrine/dbal/src/Types/DateType.php index 7ce9656a77..3ba8500585 100644 --- a/core/vendor/doctrine/dbal/src/Types/DateType.php +++ b/core/vendor/doctrine/dbal/src/Types/DateType.php @@ -12,7 +12,7 @@ class DateType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -20,7 +20,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -28,7 +28,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @psalm-param T $value * @@ -50,7 +50,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * diff --git a/core/vendor/doctrine/dbal/src/Types/DecimalType.php b/core/vendor/doctrine/dbal/src/Types/DecimalType.php index 144e97a049..308134b087 100644 --- a/core/vendor/doctrine/dbal/src/Types/DecimalType.php +++ b/core/vendor/doctrine/dbal/src/Types/DecimalType.php @@ -16,7 +16,7 @@ class DecimalType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -24,7 +24,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -32,7 +32,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function convertToPHPValue($value, AbstractPlatform $platform) { diff --git a/core/vendor/doctrine/dbal/src/Types/FloatType.php b/core/vendor/doctrine/dbal/src/Types/FloatType.php index d8cb33557c..e01b774138 100644 --- a/core/vendor/doctrine/dbal/src/Types/FloatType.php +++ b/core/vendor/doctrine/dbal/src/Types/FloatType.php @@ -7,7 +7,7 @@ class FloatType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -15,7 +15,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -23,7 +23,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * diff --git a/core/vendor/doctrine/dbal/src/Types/GuidType.php b/core/vendor/doctrine/dbal/src/Types/GuidType.php index 6ce903e2b4..3c8b7f4f87 100644 --- a/core/vendor/doctrine/dbal/src/Types/GuidType.php +++ b/core/vendor/doctrine/dbal/src/Types/GuidType.php @@ -11,7 +11,7 @@ class GuidType extends StringType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -19,7 +19,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -27,7 +27,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/IntegerType.php b/core/vendor/doctrine/dbal/src/Types/IntegerType.php index 57ba7087e7..7c2d7110d4 100644 --- a/core/vendor/doctrine/dbal/src/Types/IntegerType.php +++ b/core/vendor/doctrine/dbal/src/Types/IntegerType.php @@ -11,7 +11,7 @@ class IntegerType extends Type implements PhpIntegerMappingType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -19,7 +19,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -27,7 +27,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -41,7 +41,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getBindingType() { diff --git a/core/vendor/doctrine/dbal/src/Types/JsonType.php b/core/vendor/doctrine/dbal/src/Types/JsonType.php index 797f5bc3d9..27f872c88a 100644 --- a/core/vendor/doctrine/dbal/src/Types/JsonType.php +++ b/core/vendor/doctrine/dbal/src/Types/JsonType.php @@ -20,7 +20,7 @@ class JsonType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -28,7 +28,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -50,7 +50,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function convertToPHPValue($value, AbstractPlatform $platform) { @@ -70,7 +70,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -78,7 +78,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/ObjectType.php b/core/vendor/doctrine/dbal/src/Types/ObjectType.php index 1c497a3ffc..497e9c4076 100644 --- a/core/vendor/doctrine/dbal/src/Types/ObjectType.php +++ b/core/vendor/doctrine/dbal/src/Types/ObjectType.php @@ -20,7 +20,7 @@ class ObjectType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -28,7 +28,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param mixed $value * @@ -40,7 +40,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function convertToPHPValue($value, AbstractPlatform $platform) { @@ -62,7 +62,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -70,7 +70,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/SimpleArrayType.php b/core/vendor/doctrine/dbal/src/Types/SimpleArrayType.php index 0961ae3980..ee97b9b9ff 100644 --- a/core/vendor/doctrine/dbal/src/Types/SimpleArrayType.php +++ b/core/vendor/doctrine/dbal/src/Types/SimpleArrayType.php @@ -20,7 +20,7 @@ class SimpleArrayType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -28,7 +28,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param mixed $value * @@ -44,7 +44,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param mixed $value * @@ -62,7 +62,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -70,7 +70,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/SmallIntType.php b/core/vendor/doctrine/dbal/src/Types/SmallIntType.php index e38f4ca721..2c8567a118 100644 --- a/core/vendor/doctrine/dbal/src/Types/SmallIntType.php +++ b/core/vendor/doctrine/dbal/src/Types/SmallIntType.php @@ -11,7 +11,7 @@ class SmallIntType extends Type implements PhpIntegerMappingType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -19,7 +19,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -27,7 +27,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -41,7 +41,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getBindingType() { diff --git a/core/vendor/doctrine/dbal/src/Types/StringType.php b/core/vendor/doctrine/dbal/src/Types/StringType.php index e409c2a8fe..1992e8fa42 100644 --- a/core/vendor/doctrine/dbal/src/Types/StringType.php +++ b/core/vendor/doctrine/dbal/src/Types/StringType.php @@ -10,7 +10,7 @@ class StringType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -18,7 +18,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { diff --git a/core/vendor/doctrine/dbal/src/Types/TextType.php b/core/vendor/doctrine/dbal/src/Types/TextType.php index b1e640b695..d060bb2da2 100644 --- a/core/vendor/doctrine/dbal/src/Types/TextType.php +++ b/core/vendor/doctrine/dbal/src/Types/TextType.php @@ -13,7 +13,7 @@ class TextType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -21,7 +21,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function convertToPHPValue($value, AbstractPlatform $platform) { @@ -29,7 +29,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { diff --git a/core/vendor/doctrine/dbal/src/Types/TimeImmutableType.php b/core/vendor/doctrine/dbal/src/Types/TimeImmutableType.php index a3f0040b44..117abeed23 100644 --- a/core/vendor/doctrine/dbal/src/Types/TimeImmutableType.php +++ b/core/vendor/doctrine/dbal/src/Types/TimeImmutableType.php @@ -12,7 +12,7 @@ class TimeImmutableType extends TimeType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -20,7 +20,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -46,7 +46,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -74,7 +74,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/TimeType.php b/core/vendor/doctrine/dbal/src/Types/TimeType.php index 0123d4ba82..faab69bf08 100644 --- a/core/vendor/doctrine/dbal/src/Types/TimeType.php +++ b/core/vendor/doctrine/dbal/src/Types/TimeType.php @@ -12,7 +12,7 @@ class TimeType extends Type { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -20,7 +20,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} */ public function getSQLDeclaration(array $column, AbstractPlatform $platform) { @@ -28,7 +28,7 @@ public function getSQLDeclaration(array $column, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -50,7 +50,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * diff --git a/core/vendor/doctrine/dbal/src/Types/Type.php b/core/vendor/doctrine/dbal/src/Types/Type.php index 536cf36f2b..2b49248ec3 100644 --- a/core/vendor/doctrine/dbal/src/Types/Type.php +++ b/core/vendor/doctrine/dbal/src/Types/Type.php @@ -100,7 +100,8 @@ abstract public function getSQLDeclaration(array $column, AbstractPlatform $plat /** * Gets the name of this type. * - * @deprecated this method will be removed in Doctrine DBAL 4.0. + * @deprecated this method will be removed in Doctrine DBAL 4.0, + * use {@see TypeRegistry::lookupName()} instead. * * @return string */ diff --git a/core/vendor/doctrine/dbal/src/Types/VarDateTimeImmutableType.php b/core/vendor/doctrine/dbal/src/Types/VarDateTimeImmutableType.php index 9ac6905145..94cc0ad4c7 100644 --- a/core/vendor/doctrine/dbal/src/Types/VarDateTimeImmutableType.php +++ b/core/vendor/doctrine/dbal/src/Types/VarDateTimeImmutableType.php @@ -14,7 +14,7 @@ class VarDateTimeImmutableType extends VarDateTimeType { /** - * {@inheritdoc} + * {@inheritDoc} */ public function getName() { @@ -22,7 +22,7 @@ public function getName() } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -48,7 +48,7 @@ public function convertToDatabaseValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * @@ -72,7 +72,7 @@ public function convertToPHPValue($value, AbstractPlatform $platform) } /** - * {@inheritdoc} + * {@inheritDoc} * * @deprecated */ diff --git a/core/vendor/doctrine/dbal/src/Types/VarDateTimeType.php b/core/vendor/doctrine/dbal/src/Types/VarDateTimeType.php index 58c1208af5..252f978933 100644 --- a/core/vendor/doctrine/dbal/src/Types/VarDateTimeType.php +++ b/core/vendor/doctrine/dbal/src/Types/VarDateTimeType.php @@ -18,7 +18,7 @@ class VarDateTimeType extends DateTimeType { /** - * {@inheritdoc} + * {@inheritDoc} * * @param T $value * diff --git a/core/vendor/doctrine/deprecations/composer.json b/core/vendor/doctrine/deprecations/composer.json index c79e38cdcd..f8319f9a2a 100644 --- a/core/vendor/doctrine/deprecations/composer.json +++ b/core/vendor/doctrine/deprecations/composer.json @@ -1,22 +1,28 @@ { "name": "doctrine/deprecations", - "type": "library", "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/", "license": "MIT", + "type": "library", + "homepage": "https://www.doctrine-project.org/", "require": { - "php": "^7.1|^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3", - "doctrine/coding-standard": "^9" + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, "autoload": { - "psr-4": {"Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"} + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } }, "autoload-dev": { "psr-4": { diff --git a/core/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php b/core/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php index 6c76d98417..07cb43b6ce 100644 --- a/core/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php +++ b/core/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php @@ -8,6 +8,7 @@ use function array_key_exists; use function array_reduce; +use function assert; use function debug_backtrace; use function sprintf; use function strpos; @@ -46,7 +47,7 @@ class Deprecation private const TYPE_TRIGGER_ERROR = 2; private const TYPE_PSR_LOGGER = 4; - /** @var self::TYPE_*|null */ + /** @var int-mask-of|null */ private static $type; /** @var LoggerInterface|null */ @@ -56,6 +57,9 @@ class Deprecation private static $ignoredPackages = []; /** @var array */ + private static $triggeredDeprecations = []; + + /** @var array */ private static $ignoredLinks = []; /** @var bool */ @@ -68,7 +72,7 @@ class Deprecation * deprecation. It is additionally used to de-duplicate the trigger of the * same deprecation during a request. * - * @param mixed $args + * @param float|int|string $args */ public static function trigger(string $package, string $link, string $message, ...$args): void { @@ -78,13 +82,17 @@ public static function trigger(string $package, string $link, string $message, . return; } - if (array_key_exists($link, self::$ignoredLinks)) { - self::$ignoredLinks[$link]++; + if (isset(self::$ignoredLinks[$link])) { + return; + } + + if (array_key_exists($link, self::$triggeredDeprecations)) { + self::$triggeredDeprecations[$link]++; } else { - self::$ignoredLinks[$link] = 1; + self::$triggeredDeprecations[$link] = 1; } - if (self::$deduplication === true && self::$ignoredLinks[$link] > 1) { + if (self::$deduplication === true && self::$triggeredDeprecations[$link] > 1) { return; } @@ -116,7 +124,7 @@ public static function trigger(string $package, string $link, string $message, . * deprecation tracking is enabled even during deduplication, because it * needs to call {@link debug_backtrace()} * - * @param mixed $args + * @param float|int|string $args */ public static function triggerIfCalledFromOutside(string $package, string $link, string $message, ...$args): void { @@ -129,7 +137,7 @@ public static function triggerIfCalledFromOutside(string $package, string $link, $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); // first check that the caller is not from a tests folder, in which case we always let deprecations pass - if (strpos($backtrace[1]['file'], DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR) === false) { + if (isset($backtrace[1]['file'], $backtrace[0]['file']) && strpos($backtrace[1]['file'], DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR) === false) { $path = DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . $package . DIRECTORY_SEPARATOR; if (strpos($backtrace[0]['file'], $path) === false) { @@ -141,13 +149,17 @@ public static function triggerIfCalledFromOutside(string $package, string $link, } } - if (array_key_exists($link, self::$ignoredLinks)) { - self::$ignoredLinks[$link]++; + if (isset(self::$ignoredLinks[$link])) { + return; + } + + if (array_key_exists($link, self::$triggeredDeprecations)) { + self::$triggeredDeprecations[$link]++; } else { - self::$ignoredLinks[$link] = 1; + self::$triggeredDeprecations[$link] = 1; } - if (self::$deduplication === true && self::$ignoredLinks[$link] > 1) { + if (self::$deduplication === true && self::$triggeredDeprecations[$link] > 1) { return; } @@ -161,7 +173,7 @@ public static function triggerIfCalledFromOutside(string $package, string $link, } /** - * @param array $backtrace + * @param list $backtrace */ private static function delegateTriggerToBackend(string $message, array $backtrace, string $link, string $package): void { @@ -169,12 +181,14 @@ private static function delegateTriggerToBackend(string $message, array $backtra if (($type & self::TYPE_PSR_LOGGER) > 0) { $context = [ - 'file' => $backtrace[0]['file'], - 'line' => $backtrace[0]['line'], + 'file' => $backtrace[0]['file'] ?? null, + 'line' => $backtrace[0]['line'] ?? null, 'package' => $package, 'link' => $link, ]; + assert(self::$logger !== null); + self::$logger->notice($message, $context); } @@ -184,10 +198,10 @@ private static function delegateTriggerToBackend(string $message, array $backtra $message .= sprintf( ' (%s:%d called by %s:%d, %s, package %s)', - self::basename($backtrace[0]['file']), - $backtrace[0]['line'], - self::basename($backtrace[1]['file']), - $backtrace[1]['line'], + self::basename($backtrace[0]['file'] ?? 'native code'), + $backtrace[0]['line'] ?? 0, + self::basename($backtrace[1]['file'] ?? 'native code'), + $backtrace[1]['line'] ?? 0, $link, $package ); @@ -211,16 +225,19 @@ private static function basename(string $filename): string public static function enableTrackingDeprecations(): void { + self::$type = self::$type ?? 0; self::$type |= self::TYPE_TRACK_DEPRECATIONS; } public static function enableWithTriggerError(): void { + self::$type = self::$type ?? 0; self::$type |= self::TYPE_TRIGGER_ERROR; } public static function enableWithPsrLogger(LoggerInterface $logger): void { + self::$type = self::$type ?? 0; self::$type |= self::TYPE_PSR_LOGGER; self::$logger = $logger; } @@ -235,9 +252,10 @@ public static function disable(): void self::$type = self::TYPE_NONE; self::$logger = null; self::$deduplication = true; + self::$ignoredLinks = []; - foreach (self::$ignoredLinks as $link => $count) { - self::$ignoredLinks[$link] = 0; + foreach (self::$triggeredDeprecations as $link => $count) { + self::$triggeredDeprecations[$link] = 0; } } @@ -249,13 +267,13 @@ public static function ignorePackage(string $packageName): void public static function ignoreDeprecations(string ...$links): void { foreach ($links as $link) { - self::$ignoredLinks[$link] = 0; + self::$ignoredLinks[$link] = true; } } public static function getUniqueTriggeredDeprecationsCount(): int { - return array_reduce(self::$ignoredLinks, static function (int $carry, int $count) { + return array_reduce(self::$triggeredDeprecations, static function (int $carry, int $count) { return $carry + $count; }, 0); } @@ -267,11 +285,11 @@ public static function getUniqueTriggeredDeprecationsCount(): int */ public static function getTriggeredDeprecations(): array { - return self::$ignoredLinks; + return self::$triggeredDeprecations; } /** - * @return self::TYPE_* + * @return int-mask-of */ private static function getTypeFromEnv(): int { diff --git a/core/vendor/doctrine/deprecations/phpstan.neon b/core/vendor/doctrine/deprecations/phpstan.neon new file mode 100644 index 0000000000..4ee286b8a7 --- /dev/null +++ b/core/vendor/doctrine/deprecations/phpstan.neon @@ -0,0 +1,9 @@ +parameters: + level: 6 + paths: + - lib + - tests + +includes: + - vendor/phpstan/phpstan-phpunit/extension.neon + - vendor/phpstan/phpstan-phpunit/rules.neon diff --git a/core/vendor/doctrine/deprecations/psalm.xml b/core/vendor/doctrine/deprecations/psalm.xml new file mode 100644 index 0000000000..ad76e32e3c --- /dev/null +++ b/core/vendor/doctrine/deprecations/psalm.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/core/vendor/doctrine/inflector/composer.json b/core/vendor/doctrine/inflector/composer.json index 862ea5c35d..91d77071e5 100644 --- a/core/vendor/doctrine/inflector/composer.json +++ b/core/vendor/doctrine/inflector/composer.json @@ -16,12 +16,12 @@ "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^10", + "doctrine/coding-standard": "^11.0", "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" + "vimeo/psalm": "^4.25 || ^5.4" }, "autoload": { "psr-4": { diff --git a/core/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php b/core/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php index db884ca043..806e17532c 100644 --- a/core/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php +++ b/core/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php @@ -98,6 +98,7 @@ public static function getIrregular(): iterable yield new Substitution(new Word('blouse'), new Word('blouses')); yield new Substitution(new Word('brother'), new Word('brothers')); yield new Substitution(new Word('cafe'), new Word('cafes')); + yield new Substitution(new Word('cave'), new Word('caves')); yield new Substitution(new Word('chateau'), new Word('chateaux')); yield new Substitution(new Word('niveau'), new Word('niveaux')); yield new Substitution(new Word('child'), new Word('children')); diff --git a/core/vendor/dragonmantank/cron-expression/CHANGELOG.md b/core/vendor/dragonmantank/cron-expression/CHANGELOG.md new file mode 100644 index 0000000000..17ab2ce44d --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/CHANGELOG.md @@ -0,0 +1,240 @@ +# Change Log + +## [3.3.3] - 2024-08-10 + +### Added +- N/A + +### Changed +- N/A + +### Fixed +- Added fixes for making sure `?` is not passed for both DOM and DOW (#148, thank you https://github.com/LeoVie) +- Fixed bug in Next Execution Time by sorting minutes properly (#160, thank you https://github.com/imyip) + +## [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/LICENSE b/core/vendor/dragonmantank/cron-expression/LICENSE new file mode 100644 index 0000000000..3e38bbc88d --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011 Michael Dowling , 2016 Chris Tankersley , and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/core/vendor/dragonmantank/cron-expression/README.md b/core/vendor/dragonmantank/cron-expression/README.md new file mode 100644 index 0000000000..494652c84e --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/README.md @@ -0,0 +1,87 @@ +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/crunzphp/crunz) diff --git a/core/vendor/dragonmantank/cron-expression/composer.json b/core/vendor/dragonmantank/cron-expression/composer.json new file mode 100644 index 0000000000..657a5b47cd --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/composer.json @@ -0,0 +1,47 @@ +{ + "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/src/Cron/AbstractField.php b/core/vendor/dragonmantank/cron-expression/src/Cron/AbstractField.php new file mode 100644 index 0000000000..df2848df4b --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/src/Cron/AbstractField.php @@ -0,0 +1,346 @@ +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 new file mode 100644 index 0000000000..216ce432f1 --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/src/Cron/CronExpression.php @@ -0,0 +1,578 @@ + '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 + * @throws InvalidArgumentException + */ + 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); + + $notEnoughParts = \count($split) < 5; + + $questionMarkInInvalidPart = array_key_exists(0, $split) && $split[0] === '?' + || array_key_exists(1, $split) && $split[1] === '?' + || array_key_exists(3, $split) && $split[3] === '?'; + + $tooManyQuestionMarks = array_key_exists(2, $split) && $split[2] === '?' + && array_key_exists(4, $split) && $split[4] === '?'; + + if ($notEnoughParts || $questionMarkInInvalidPart || $tooManyQuestionMarks) { + throw new InvalidArgumentException( + $value . ' is not a valid CRON expression' + ); + } + + $this->cronParts = $split; + 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 new file mode 100644 index 0000000000..39ff597830 --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/src/Cron/DayOfMonthField.php @@ -0,0 +1,164 @@ + + */ +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 new file mode 100644 index 0000000000..b9bbf48b68 --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/src/Cron/DayOfWeekField.php @@ -0,0 +1,194 @@ + '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 new file mode 100644 index 0000000000..839b2757dc --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactory.php @@ -0,0 +1,52 @@ +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 new file mode 100644 index 0000000000..8bd3c6581c --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/src/Cron/FieldFactoryInterface.php @@ -0,0 +1,8 @@ +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 new file mode 100644 index 0000000000..f077e6ec51 --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/src/Cron/MinutesField.php @@ -0,0 +1,97 @@ +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]; + sort($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 new file mode 100644 index 0000000000..5a15fbb8ba --- /dev/null +++ b/core/vendor/dragonmantank/cron-expression/src/Cron/MonthField.php @@ -0,0 +1,61 @@ + '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/guzzlehttp/guzzle/CHANGELOG.md b/core/vendor/guzzlehttp/guzzle/CHANGELOG.md index 1144eb7630..990b86c9e6 100644 --- a/core/vendor/guzzlehttp/guzzle/CHANGELOG.md +++ b/core/vendor/guzzlehttp/guzzle/CHANGELOG.md @@ -3,6 +3,21 @@ Please refer to [UPGRADING](UPGRADING.md) guide for upgrading to a major version. +## 7.8.0 - 2023-08-27 + +### Added + +- Support for PHP 8.3 +- Added automatic closing of handles on `CurlFactory` object destruction + + +## 7.7.1 - 2023-08-27 + +### Changed + +- Remove the need for `AllowDynamicProperties` in `CurlMultiHandler` + + ## 7.7.0 - 2023-05-21 ### Added diff --git a/core/vendor/guzzlehttp/guzzle/UPGRADING.md b/core/vendor/guzzlehttp/guzzle/UPGRADING.md index 45417a7e1f..8fa0afb5dc 100644 --- a/core/vendor/guzzlehttp/guzzle/UPGRADING.md +++ b/core/vendor/guzzlehttp/guzzle/UPGRADING.md @@ -27,7 +27,7 @@ Please make sure: - Function `GuzzleHttp\Exception\RequestException::getResponseBodySummary` is removed. Use `\GuzzleHttp\Psr7\get_message_body_summary` as an alternative. - Function `GuzzleHttp\Cookie\CookieJar::getCookieValue` is removed. -- Request option `exception` is removed. Please use `http_errors`. +- Request option `exceptions` is removed. Please use `http_errors`. - Request option `save_to` is removed. Please use `sink`. - Pool option `pool_size` is removed. Please use `concurrency`. - We now look for environment variables in the `$_SERVER` super global, due to thread safety issues with `getenv`. We continue to fallback to `getenv` in CLI environments, for maximum compatibility. diff --git a/core/vendor/guzzlehttp/guzzle/composer.json b/core/vendor/guzzlehttp/guzzle/composer.json index 3207f8c3a8..72defd6141 100644 --- a/core/vendor/guzzlehttp/guzzle/composer.json +++ b/core/vendor/guzzlehttp/guzzle/composer.json @@ -53,8 +53,8 @@ "require": { "php": "^7.2.5 || ^8.0", "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "guzzlehttp/promises": "^1.5.3 || ^2.0.1", + "guzzlehttp/psr7": "^1.9.1 || ^2.5.1", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" }, diff --git a/core/vendor/guzzlehttp/guzzle/src/Client.php b/core/vendor/guzzlehttp/guzzle/src/Client.php index 9b0d71070e..bc6efc90fc 100644 --- a/core/vendor/guzzlehttp/guzzle/src/Client.php +++ b/core/vendor/guzzlehttp/guzzle/src/Client.php @@ -202,7 +202,7 @@ public function request(string $method, $uri = '', array $options = []): Respons * * @deprecated Client::getConfig will be removed in guzzlehttp/guzzle:8.0. */ - public function getConfig(?string $option = null) + public function getConfig(string $option = null) { return $option === null ? $this->config diff --git a/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php index 6aaee61afc..1788e16ab3 100644 --- a/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php +++ b/core/vendor/guzzlehttp/guzzle/src/ClientInterface.php @@ -80,5 +80,5 @@ public function requestAsync(string $method, $uri, array $options = []): Promise * * @deprecated ClientInterface::getConfig will be removed in guzzlehttp/guzzle:8.0. */ - public function getConfig(?string $option = null); + public function getConfig(string $option = null); } diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php index b4ced5a1ac..fa2b10a8c6 100644 --- a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php +++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php @@ -96,9 +96,6 @@ public function getCookieByName(string $name): ?SetCookie return null; } - /** - * {@inheritDoc} - */ public function toArray(): array { return \array_map(static function (SetCookie $cookie): array { @@ -106,10 +103,7 @@ public function toArray(): array }, $this->getIterator()->getArrayCopy()); } - /** - * {@inheritDoc} - */ - public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void + public function clear(string $domain = null, string $path = null, string $name = null): void { if (!$domain) { $this->cookies = []; @@ -126,25 +120,22 @@ static function (SetCookie $cookie) use ($domain): bool { $this->cookies = \array_filter( $this->cookies, static function (SetCookie $cookie) use ($path, $domain): bool { - return !($cookie->matchesPath($path) && - $cookie->matchesDomain($domain)); + return !($cookie->matchesPath($path) + && $cookie->matchesDomain($domain)); } ); } else { $this->cookies = \array_filter( $this->cookies, static function (SetCookie $cookie) use ($path, $domain, $name) { - return !($cookie->getName() == $name && - $cookie->matchesPath($path) && - $cookie->matchesDomain($domain)); + return !($cookie->getName() == $name + && $cookie->matchesPath($path) + && $cookie->matchesDomain($domain)); } ); } } - /** - * {@inheritDoc} - */ public function clearSessionCookies(): void { $this->cookies = \array_filter( @@ -155,9 +146,6 @@ static function (SetCookie $cookie): bool { ); } - /** - * {@inheritDoc} - */ public function setCookie(SetCookie $cookie): bool { // If the name string is empty (but not 0), ignore the set-cookie @@ -182,9 +170,9 @@ public function setCookie(SetCookie $cookie): bool foreach ($this->cookies as $i => $c) { // Two cookies are identical, when their path, and domain are // identical. - if ($c->getPath() != $cookie->getPath() || - $c->getDomain() != $cookie->getDomain() || - $c->getName() != $cookie->getName() + if ($c->getPath() != $cookie->getPath() + || $c->getDomain() != $cookie->getDomain() + || $c->getName() != $cookie->getName() ) { continue; } @@ -286,10 +274,10 @@ public function withCookieHeader(RequestInterface $request): RequestInterface $path = $uri->getPath() ?: '/'; foreach ($this->cookies as $cookie) { - if ($cookie->matchesPath($path) && - $cookie->matchesDomain($host) && - !$cookie->isExpired() && - (!$cookie->getSecure() || $scheme === 'https') + if ($cookie->matchesPath($path) + && $cookie->matchesDomain($host) + && !$cookie->isExpired() + && (!$cookie->getSecure() || $scheme === 'https') ) { $values[] = $cookie->getName().'=' .$cookie->getValue(); diff --git a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php index 50bc36398b..8c55cc6f70 100644 --- a/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php +++ b/core/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php @@ -14,6 +14,7 @@ * cookies from a file, database, etc. * * @see https://docs.python.org/2/library/cookielib.html Inspiration + * * @extends \IteratorAggregate */ interface CookieJarInterface extends \Countable, \IteratorAggregate @@ -61,7 +62,7 @@ public function setCookie(SetCookie $cookie): bool; * @param string|null $path Clears cookies matching a domain and path * @param string|null $name Clears cookies matching a domain, path, and name */ - public function clear(?string $domain = null, ?string $path = null, ?string $name = null): void; + public function clear(string $domain = null, string $path = null, string $name = null): void; /** * Discard all sessions cookies. diff --git a/core/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php index 3a6a8db263..be88d9e497 100644 --- a/core/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php +++ b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php @@ -367,11 +367,11 @@ private function applyHandlerOptions(EasyHandle $easy, array &$conf): void // If it's a directory or a link to a directory use CURLOPT_CAPATH. // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO. if ( - \is_dir($options['verify']) || - ( - \is_link($options['verify']) === true && - ($verifyLink = \readlink($options['verify'])) !== false && - \is_dir($verifyLink) + \is_dir($options['verify']) + || ( + \is_link($options['verify']) === true + && ($verifyLink = \readlink($options['verify'])) !== false + && \is_dir($verifyLink) ) ) { $conf[\CURLOPT_CAPATH] = $options['verify']; @@ -627,4 +627,12 @@ private function createHeaderFn(EasyHandle $easy): callable return \strlen($h); }; } + + public function __destruct() + { + foreach ($this->handles as $id => $handle) { + \curl_close($handle); + unset($this->handles[$id]); + } + } } diff --git a/core/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php index f0acde145e..a64e1821a9 100644 --- a/core/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php +++ b/core/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php @@ -15,11 +15,8 @@ * associative array of curl option constants mapping to values in the * **curl** key of the provided request options. * - * @property resource|\CurlMultiHandle $_mh Internal use only. Lazy loaded multi-handle. - * * @final */ -#[\AllowDynamicProperties] class CurlMultiHandler { /** @@ -56,6 +53,9 @@ class CurlMultiHandler */ private $options = []; + /** @var resource|\CurlMultiHandle */ + private $_mh; + /** * This handler accepts the following options: * @@ -79,6 +79,10 @@ public function __construct(array $options = []) } $this->options = $options['options'] ?? []; + + // unsetting the property forces the first access to go through + // __get(). + unset($this->_mh); } /** diff --git a/core/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/core/vendor/guzzlehttp/guzzle/src/HandlerStack.php index 1ce9c4b19e..6cb12f07ab 100644 --- a/core/vendor/guzzlehttp/guzzle/src/HandlerStack.php +++ b/core/vendor/guzzlehttp/guzzle/src/HandlerStack.php @@ -44,7 +44,7 @@ class HandlerStack * handler is provided, the best handler for your * system will be utilized. */ - public static function create(?callable $handler = null): self + public static function create(callable $handler = null): self { $stack = new self($handler ?: Utils::chooseHandler()); $stack->push(Middleware::httpErrors(), 'http_errors'); @@ -131,7 +131,7 @@ public function hasHandler(): bool * @param callable(callable): callable $middleware Middleware function * @param string $name Name to register for this middleware. */ - public function unshift(callable $middleware, ?string $name = null): void + public function unshift(callable $middleware, string $name = null): void { \array_unshift($this->stack, [$middleware, $name]); $this->cached = null; diff --git a/core/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/core/vendor/guzzlehttp/guzzle/src/MessageFormatter.php index 9b77eee832..04e9eb37a4 100644 --- a/core/vendor/guzzlehttp/guzzle/src/MessageFormatter.php +++ b/core/vendor/guzzlehttp/guzzle/src/MessageFormatter.php @@ -68,7 +68,7 @@ public function __construct(?string $template = self::CLF) * @param ResponseInterface|null $response Response that was received * @param \Throwable|null $error Exception that was received */ - public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string + public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string { $cache = []; diff --git a/core/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php b/core/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php index a39ac248ee..47934614a0 100644 --- a/core/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php +++ b/core/vendor/guzzlehttp/guzzle/src/MessageFormatterInterface.php @@ -14,5 +14,5 @@ interface MessageFormatterInterface * @param ResponseInterface|null $response Response that was received * @param \Throwable|null $error Exception that was received */ - public function format(RequestInterface $request, ?ResponseInterface $response = null, ?\Throwable $error = null): string; + public function format(RequestInterface $request, ResponseInterface $response = null, \Throwable $error = null): string; } diff --git a/core/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/core/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php index f32808a758..7aa21a6232 100644 --- a/core/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php +++ b/core/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php @@ -166,8 +166,8 @@ public function modifyRequest(RequestInterface $request, array $options, Respons // not forcing RFC compliance, but rather emulating what all browsers // would do. $statusCode = $response->getStatusCode(); - if ($statusCode == 303 || - ($statusCode <= 302 && !$options['allow_redirects']['strict']) + if ($statusCode == 303 + || ($statusCode <= 302 && !$options['allow_redirects']['strict']) ) { $safeMethods = ['GET', 'HEAD', 'OPTIONS']; $requestMethod = $request->getMethod(); diff --git a/core/vendor/guzzlehttp/guzzle/src/TransferStats.php b/core/vendor/guzzlehttp/guzzle/src/TransferStats.php index 93fa334c8d..2ce9e38f27 100644 --- a/core/vendor/guzzlehttp/guzzle/src/TransferStats.php +++ b/core/vendor/guzzlehttp/guzzle/src/TransferStats.php @@ -46,8 +46,8 @@ final class TransferStats */ public function __construct( RequestInterface $request, - ?ResponseInterface $response = null, - ?float $transferTime = null, + ResponseInterface $response = null, + float $transferTime = null, $handlerErrorData = null, array $handlerStats = [] ) { diff --git a/core/vendor/guzzlehttp/promises/CHANGELOG.md b/core/vendor/guzzlehttp/promises/CHANGELOG.md index ab173ad749..eaf2af426f 100644 --- a/core/vendor/guzzlehttp/promises/CHANGELOG.md +++ b/core/vendor/guzzlehttp/promises/CHANGELOG.md @@ -1,7 +1,14 @@ # CHANGELOG -## 2.0.0 - TBC +## 2.0.1 - 2023-08-03 + +### Changed + +- PHP 8.3 support + + +## 2.0.0 - 2023-05-21 ### Added diff --git a/core/vendor/guzzlehttp/promises/README.md b/core/vendor/guzzlehttp/promises/README.md index 4dc7b6a1dc..a32d3d29c7 100644 --- a/core/vendor/guzzlehttp/promises/README.md +++ b/core/vendor/guzzlehttp/promises/README.md @@ -41,7 +41,7 @@ composer require guzzlehttp/promises | Version | Status | PHP Version | |---------|------------------------|--------------| | 1.x | Bug and security fixes | >=5.5,<8.3 | -| 2.x | Latest | >=7.2.5,<8.3 | +| 2.x | Latest | >=7.2.5,<8.4 | ## Quick Start diff --git a/core/vendor/guzzlehttp/promises/src/RejectionException.php b/core/vendor/guzzlehttp/promises/src/RejectionException.php index 0db98ffb9a..47dca86248 100644 --- a/core/vendor/guzzlehttp/promises/src/RejectionException.php +++ b/core/vendor/guzzlehttp/promises/src/RejectionException.php @@ -18,7 +18,7 @@ class RejectionException extends \RuntimeException * @param mixed $reason Rejection reason. * @param string|null $description Optional description. */ - public function __construct($reason, $description = null) + public function __construct($reason, ?string $description = null) { $this->reason = $reason; diff --git a/core/vendor/guzzlehttp/promises/vendor-bin/php-cs-fixer/composer.json b/core/vendor/guzzlehttp/promises/vendor-bin/php-cs-fixer/composer.json deleted file mode 100644 index c9dd5ee427..0000000000 --- a/core/vendor/guzzlehttp/promises/vendor-bin/php-cs-fixer/composer.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "require": { - "php": "^7.4 || ^8.0", - "friendsofphp/php-cs-fixer": "3.16.0" - }, - "config": { - "preferred-install": "dist" - } -} diff --git a/core/vendor/guzzlehttp/promises/vendor-bin/phpstan/composer.json b/core/vendor/guzzlehttp/promises/vendor-bin/phpstan/composer.json deleted file mode 100644 index 711507cba8..0000000000 --- a/core/vendor/guzzlehttp/promises/vendor-bin/phpstan/composer.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "require": { - "php": "^7.4 || ^8.0", - "phpstan/phpstan": "1.10.11", - "phpstan/phpstan-deprecation-rules": "1.1.3" - }, - "config": { - "preferred-install": "dist" - } -} diff --git a/core/vendor/guzzlehttp/promises/vendor-bin/psalm/composer.json b/core/vendor/guzzlehttp/promises/vendor-bin/psalm/composer.json deleted file mode 100644 index ab96f2caf7..0000000000 --- a/core/vendor/guzzlehttp/promises/vendor-bin/psalm/composer.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "require": { - "php": "^7.4 || ^8.0", - "psalm/phar": "5.9.0" - }, - "config": { - "preferred-install": "dist" - } -} diff --git a/core/vendor/guzzlehttp/psr7/CHANGELOG.md b/core/vendor/guzzlehttp/psr7/CHANGELOG.md index fa716c094b..d897feedda 100644 --- a/core/vendor/guzzlehttp/psr7/CHANGELOG.md +++ b/core/vendor/guzzlehttp/psr7/CHANGELOG.md @@ -5,7 +5,28 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.6.1 - 2023-08-27 + +### Fixed + +- Properly handle the fact that PHP transforms numeric strings in array keys to ints + +## 2.6.0 - 2023-08-03 + +### Changed + +- Updated the mime type map to add some new entries, fix a couple of invalid entries, and remove an invalid entry +- Fallback to `application/octet-stream` if we are unable to guess the content type for a multipart file upload + +## 2.5.1 - 2023-08-03 + +### Fixed + +- Corrected mime type for `.acc` files to `audio/aac` + +### Changed + +- PHP 8.3 support ## 2.5.0 - 2023-04-17 diff --git a/core/vendor/guzzlehttp/psr7/README.md b/core/vendor/guzzlehttp/psr7/README.md index 9566a7d472..a64ec90461 100644 --- a/core/vendor/guzzlehttp/psr7/README.md +++ b/core/vendor/guzzlehttp/psr7/README.md @@ -8,16 +8,24 @@ functionality like query string parsing. ![Static analysis](https://github.com/guzzle/psr7/workflows/Static%20analysis/badge.svg) -# Installation +## Features + +This package comes with a number of stream implementations and stream +decorators. + + +## Installation ```shell composer require guzzlehttp/psr7 ``` -# Stream implementation +## Version Guidance -This package comes with a number of stream implementations and stream -decorators. +| Version | Status | PHP Version | +|---------|---------------------|--------------| +| 1.x | Security fixes only | >=5.4,<8.1 | +| 2.x | Latest | >=7.2.5,<8.4 | ## AppendStream @@ -855,14 +863,6 @@ This of course assumes they will be resolved against the same base URI. If this equivalence or difference of relative references does not mean anything. -## Version Guidance - -| Version | Status | PHP Version | -|---------|----------------|------------------| -| 1.x | Security fixes | >=5.4,<8.1 | -| 2.x | Latest | ^7.2.5 \|\| ^8.0 | - - ## Security If you discover a security vulnerability within this package, please send an email to security@tidelift.com. All security vulnerabilities will be promptly addressed. Please do not disclose security-related issues publicly until a fix has been announced. Please see [Security Policy](https://github.com/guzzle/psr7/security/policy) for more information. diff --git a/core/vendor/guzzlehttp/psr7/src/AppendStream.php b/core/vendor/guzzlehttp/psr7/src/AppendStream.php index cbcfaee65d..ee8f37882f 100644 --- a/core/vendor/guzzlehttp/psr7/src/AppendStream.php +++ b/core/vendor/guzzlehttp/psr7/src/AppendStream.php @@ -40,12 +40,14 @@ public function __toString(): string { try { $this->rewind(); + return $this->getContents(); } catch (\Throwable $e) { if (\PHP_VERSION_ID >= 70400) { throw $e; } trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; } } @@ -138,9 +140,9 @@ public function getSize(): ?int public function eof(): bool { - return !$this->streams || - ($this->current >= count($this->streams) - 1 && - $this->streams[$this->current]->eof()); + return !$this->streams + || ($this->current >= count($this->streams) - 1 + && $this->streams[$this->current]->eof()); } public function rewind(): void @@ -167,7 +169,7 @@ public function seek($offset, $whence = SEEK_SET): void $stream->rewind(); } catch (\Exception $e) { throw new \RuntimeException('Unable to seek stream ' - . $i . ' of the AppendStream', 0, $e); + .$i.' of the AppendStream', 0, $e); } } @@ -197,7 +199,7 @@ public function read($length): string if ($this->current === $total) { break; } - $this->current++; + ++$this->current; } $result = $this->streams[$this->current]->read($remaining); @@ -237,8 +239,6 @@ public function write($string): int } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) diff --git a/core/vendor/guzzlehttp/psr7/src/BufferStream.php b/core/vendor/guzzlehttp/psr7/src/BufferStream.php index 21be8c0a9d..2b0eb77be0 100644 --- a/core/vendor/guzzlehttp/psr7/src/BufferStream.php +++ b/core/vendor/guzzlehttp/psr7/src/BufferStream.php @@ -134,8 +134,6 @@ public function write($string): int } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) diff --git a/core/vendor/guzzlehttp/psr7/src/FnStream.php b/core/vendor/guzzlehttp/psr7/src/FnStream.php index 3a1a9512e5..9fdddb9c6a 100644 --- a/core/vendor/guzzlehttp/psr7/src/FnStream.php +++ b/core/vendor/guzzlehttp/psr7/src/FnStream.php @@ -18,7 +18,7 @@ final class FnStream implements StreamInterface private const SLOTS = [ '__toString', 'close', 'detach', 'rewind', 'getSize', 'tell', 'eof', 'isSeekable', 'seek', 'isWritable', 'write', - 'isReadable', 'read', 'getContents', 'getMetadata' + 'isReadable', 'read', 'getContents', 'getMetadata', ]; /** @var array */ @@ -33,7 +33,7 @@ public function __construct(array $methods) // Create the functions on the class foreach ($methods as $name => $fn) { - $this->{'_fn_' . $name} = $fn; + $this->{'_fn_'.$name} = $fn; } } @@ -45,7 +45,7 @@ public function __construct(array $methods) public function __get(string $name): void { throw new \BadMethodCallException(str_replace('_fn_', '', $name) - . '() is not implemented in the FnStream'); + .'() is not implemented in the FnStream'); } /** @@ -99,6 +99,7 @@ public function __toString(): string throw $e; } trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; } } @@ -169,8 +170,6 @@ public function getContents(): string } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) diff --git a/core/vendor/guzzlehttp/psr7/src/Header.php b/core/vendor/guzzlehttp/psr7/src/Header.php index 4d7005b224..6e38e00312 100644 --- a/core/vendor/guzzlehttp/psr7/src/Header.php +++ b/core/vendor/guzzlehttp/psr7/src/Header.php @@ -89,7 +89,7 @@ public static function splitList($values): array $v = ''; $isQuoted = false; $isEscaped = false; - for ($i = 0, $max = \strlen($value); $i < $max; $i++) { + for ($i = 0, $max = \strlen($value); $i < $max; ++$i) { if ($isEscaped) { $v .= $value[$i]; $isEscaped = false; diff --git a/core/vendor/guzzlehttp/psr7/src/HttpFactory.php b/core/vendor/guzzlehttp/psr7/src/HttpFactory.php index 30be222fc0..73d17e3378 100644 --- a/core/vendor/guzzlehttp/psr7/src/HttpFactory.php +++ b/core/vendor/guzzlehttp/psr7/src/HttpFactory.php @@ -23,13 +23,7 @@ * Note: in consuming code it is recommended to require the implemented interfaces * and inject the instance of this class multiple times. */ -final class HttpFactory implements - RequestFactoryInterface, - ResponseFactoryInterface, - ServerRequestFactoryInterface, - StreamFactoryInterface, - UploadedFileFactoryInterface, - UriFactoryInterface +final class HttpFactory implements RequestFactoryInterface, ResponseFactoryInterface, ServerRequestFactoryInterface, StreamFactoryInterface, UploadedFileFactoryInterface, UriFactoryInterface { public function createUploadedFile( StreamInterface $stream, diff --git a/core/vendor/guzzlehttp/psr7/src/InflateStream.php b/core/vendor/guzzlehttp/psr7/src/InflateStream.php index 8e00f1c324..599b55da3f 100644 --- a/core/vendor/guzzlehttp/psr7/src/InflateStream.php +++ b/core/vendor/guzzlehttp/psr7/src/InflateStream.php @@ -13,9 +13,9 @@ * then appends the zlib.inflate filter. The stream is then converted back * to a Guzzle stream resource to be used as a Guzzle stream. * - * @link http://tools.ietf.org/html/rfc1950 - * @link http://tools.ietf.org/html/rfc1952 - * @link http://php.net/manual/en/filters.compression.php + * @see http://tools.ietf.org/html/rfc1950 + * @see http://tools.ietf.org/html/rfc1952 + * @see http://php.net/manual/en/filters.compression.php */ final class InflateStream implements StreamInterface { diff --git a/core/vendor/guzzlehttp/psr7/src/Message.php b/core/vendor/guzzlehttp/psr7/src/Message.php index c1e15f8267..6e6c3e51be 100644 --- a/core/vendor/guzzlehttp/psr7/src/Message.php +++ b/core/vendor/guzzlehttp/psr7/src/Message.php @@ -18,31 +18,31 @@ final class Message public static function toString(MessageInterface $message): string { if ($message instanceof RequestInterface) { - $msg = trim($message->getMethod() . ' ' - . $message->getRequestTarget()) - . ' HTTP/' . $message->getProtocolVersion(); + $msg = trim($message->getMethod().' ' + .$message->getRequestTarget()) + .' HTTP/'.$message->getProtocolVersion(); if (!$message->hasHeader('host')) { - $msg .= "\r\nHost: " . $message->getUri()->getHost(); + $msg .= "\r\nHost: ".$message->getUri()->getHost(); } } elseif ($message instanceof ResponseInterface) { - $msg = 'HTTP/' . $message->getProtocolVersion() . ' ' - . $message->getStatusCode() . ' ' - . $message->getReasonPhrase(); + $msg = 'HTTP/'.$message->getProtocolVersion().' ' + .$message->getStatusCode().' ' + .$message->getReasonPhrase(); } else { throw new \InvalidArgumentException('Unknown message type'); } foreach ($message->getHeaders() as $name => $values) { - if (strtolower($name) === 'set-cookie') { + if (is_string($name) && strtolower($name) === 'set-cookie') { foreach ($values as $value) { - $msg .= "\r\n{$name}: " . $value; + $msg .= "\r\n{$name}: ".$value; } } else { - $msg .= "\r\n{$name}: " . implode(', ', $values); + $msg .= "\r\n{$name}: ".implode(', ', $values); } } - return "{$msg}\r\n\r\n" . $message->getBody(); + return "{$msg}\r\n\r\n".$message->getBody(); } /** @@ -190,7 +190,7 @@ public static function parseRequestUri(string $path, array $headers): string $host = $headers[reset($hostKey)][0]; $scheme = substr($host, -4) === ':443' ? 'https' : 'http'; - return $scheme . '://' . $host . '/' . ltrim($path, '/'); + return $scheme.'://'.$host.'/'.ltrim($path, '/'); } /** @@ -231,7 +231,7 @@ public static function parseResponse(string $message): ResponseInterface // between status-code and reason-phrase is required. But browsers accept // responses without space and reason as well. if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) { - throw new \InvalidArgumentException('Invalid response string: ' . $data['start-line']); + throw new \InvalidArgumentException('Invalid response string: '.$data['start-line']); } $parts = explode(' ', $data['start-line'], 3); diff --git a/core/vendor/guzzlehttp/psr7/src/MessageTrait.php b/core/vendor/guzzlehttp/psr7/src/MessageTrait.php index 464bdfaa40..e05ebea88f 100644 --- a/core/vendor/guzzlehttp/psr7/src/MessageTrait.php +++ b/core/vendor/guzzlehttp/psr7/src/MessageTrait.php @@ -12,11 +12,11 @@ */ trait MessageTrait { - /** @var array Map of all registered headers, as original name => array of values */ + /** @var string[][] Map of all registered headers, as original name => array of values */ private $headers = []; - /** @var array Map of lowercase header name => original name at registration */ - private $headerNames = []; + /** @var string[] Map of lowercase header name => original name at registration */ + private $headerNames = []; /** @var string */ private $protocol = '1.1'; @@ -37,6 +37,7 @@ public function withProtocolVersion($version): MessageInterface $new = clone $this; $new->protocol = $version; + return $new; } @@ -135,6 +136,7 @@ public function withBody(StreamInterface $body): MessageInterface $new = clone $this; $new->stream = $body; + return $new; } @@ -224,7 +226,7 @@ private function assertHeader($header): void )); } - if (! preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/D', $header)) { + if (!preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/D', $header)) { throw new \InvalidArgumentException( sprintf('"%s" is not valid header name.', $header) ); @@ -254,7 +256,7 @@ private function assertValue(string $value): void // Clients must not send a request with line folding and a server sending folded headers is // likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting // folding is not likely to break any legitimate use case. - if (! preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/D', $value)) { + if (!preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/D', $value)) { throw new \InvalidArgumentException( sprintf('"%s" is not valid header value.', $value) ); diff --git a/core/vendor/guzzlehttp/psr7/src/MimeType.php b/core/vendor/guzzlehttp/psr7/src/MimeType.php index 0debbd18c3..b131bdbe7a 100644 --- a/core/vendor/guzzlehttp/psr7/src/MimeType.php +++ b/core/vendor/guzzlehttp/psr7/src/MimeType.php @@ -18,7 +18,7 @@ final class MimeType '7zip' => 'application/x-7z-compressed', '123' => 'application/vnd.lotus-1-2-3', 'aab' => 'application/x-authorware-bin', - 'aac' => 'audio/x-acc', + 'aac' => 'audio/aac', 'aam' => 'application/x-authorware-map', 'aas' => 'application/x-authorware-seg', 'abw' => 'application/x-abiword', @@ -29,6 +29,7 @@ final class MimeType 'acu' => 'application/vnd.acucobol', 'acutc' => 'application/vnd.acucorp', 'adp' => 'audio/adpcm', + 'adts' => 'audio/aac', 'aep' => 'application/vnd.audiograph', 'afm' => 'application/x-font-type1', 'afp' => 'application/vnd.ibm.modcap', @@ -41,11 +42,16 @@ final class MimeType 'air' => 'application/vnd.adobe.air-application-installer-package+zip', 'ait' => 'application/vnd.dvb.ait', 'ami' => 'application/vnd.amiga.ami', + 'aml' => 'application/automationml-aml+xml', + 'amlx' => 'application/automationml-amlx+zip', 'amr' => 'audio/amr', 'apk' => 'application/vnd.android.package-archive', 'apng' => 'image/apng', 'appcache' => 'text/cache-manifest', + 'appinstaller' => 'application/appinstaller', 'application' => 'application/x-ms-application', + 'appx' => 'application/appx', + 'appxbundle' => 'application/appxbundle', 'apr' => 'application/vnd.lotus-approach', 'arc' => 'application/x-freearc', 'arj' => 'application/x-arj', @@ -90,6 +96,7 @@ final class MimeType 'bpk' => 'application/octet-stream', 'bpmn' => 'application/octet-stream', 'bsp' => 'model/vnd.valve.source.compiled-map', + 'btf' => 'image/prs.btif', 'btif' => 'image/prs.btif', 'buffer' => 'application/octet-stream', 'bz' => 'application/x-bzip', @@ -141,6 +148,7 @@ final class MimeType 'cjs' => 'application/node', 'cla' => 'application/vnd.claymore', 'class' => 'application/octet-stream', + 'cld' => 'model/vnd.cld', 'clkk' => 'application/vnd.crick.clicker.keyboard', 'clkp' => 'application/vnd.crick.clicker.palette', 'clkt' => 'application/vnd.crick.clicker.template', @@ -175,6 +183,7 @@ final class MimeType 'csv' => 'text/csv', 'cu' => 'application/cu-seeme', 'curl' => 'text/vnd.curl', + 'cwl' => 'application/cwl', 'cww' => 'application/prs.cww', 'cxt' => 'application/x-director', 'cxx' => 'text/x-c', @@ -197,6 +206,7 @@ final class MimeType 'der' => 'application/x-x509-ca-cert', 'dfac' => 'application/vnd.dreamfactory', 'dgc' => 'application/x-dgc-compressed', + 'dib' => 'image/bmp', 'dic' => 'text/x-c', 'dir' => 'application/x-director', 'dis' => 'application/vnd.mobius.dis', @@ -219,6 +229,7 @@ final class MimeType 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'dp' => 'application/vnd.osgi.dp', 'dpg' => 'application/vnd.dpgraph', + 'dpx' => 'image/dpx', 'dra' => 'audio/vnd.dra', 'drle' => 'image/dicom-rle', 'dsc' => 'text/prs.lines.tag', @@ -255,7 +266,6 @@ final class MimeType 'eot' => 'application/vnd.ms-fontobject', 'eps' => 'application/postscript', 'epub' => 'application/epub+zip', - 'es' => 'application/ecmascript', 'es3' => 'application/vnd.eszigno3+xml', 'esa' => 'application/vnd.osgi.subsystem', 'esf' => 'application/vnd.epson.esf', @@ -448,6 +458,7 @@ final class MimeType 'jsonld' => 'application/ld+json', 'jsonml' => 'application/jsonml+json', 'jsx' => 'text/jsx', + 'jt' => 'model/jt', 'jxr' => 'image/jxr', 'jxra' => 'image/jxra', 'jxrs' => 'image/jxrs', @@ -552,7 +563,7 @@ final class MimeType 'mime' => 'message/rfc822', 'mj2' => 'video/mj2', 'mjp2' => 'video/mj2', - 'mjs' => 'application/javascript', + 'mjs' => 'text/javascript', 'mk3d' => 'video/x-matroska', 'mka' => 'audio/x-matroska', 'mkd' => 'text/x-markdown', @@ -602,6 +613,8 @@ final class MimeType 'msg' => 'application/vnd.ms-outlook', 'msh' => 'model/mesh', 'msi' => 'application/x-msdownload', + 'msix' => 'application/msix', + 'msixbundle' => 'application/msixbundle', 'msl' => 'application/vnd.mobius.msl', 'msm' => 'application/octet-stream', 'msp' => 'application/octet-stream', @@ -775,6 +788,8 @@ final class MimeType 'pvb' => 'application/vnd.3gpp.pic-bw-var', 'pwn' => 'application/vnd.3m.post-it-notes', 'pya' => 'audio/vnd.ms-playready.media.pya', + 'pyo' => 'model/vnd.pytha.pyox', + 'pyox' => 'model/vnd.pytha.pyox', 'pyv' => 'video/vnd.ms-playready.media.pyv', 'qam' => 'application/vnd.epson.quickanime', 'qbo' => 'application/vnd.intu.qbo', @@ -923,10 +938,12 @@ final class MimeType 'st' => 'application/vnd.sailingtracker.track', 'stc' => 'application/vnd.sun.xml.calc.template', 'std' => 'application/vnd.sun.xml.draw.template', + 'step' => 'application/STEP', 'stf' => 'application/vnd.wt.stf', 'sti' => 'application/vnd.sun.xml.impress.template', 'stk' => 'application/hyperstudio', 'stl' => 'model/stl', + 'stp' => 'application/STEP', 'stpx' => 'model/step+xml', 'stpxz' => 'model/step-xml+zip', 'stpz' => 'model/step+zip', @@ -1013,10 +1030,12 @@ final class MimeType 'ulx' => 'application/x-glulx', 'umj' => 'application/vnd.umajin', 'unityweb' => 'application/vnd.unity', + 'uo' => 'application/vnd.uoml+xml', 'uoml' => 'application/vnd.uoml+xml', 'uri' => 'text/uri-list', 'uris' => 'text/uri-list', 'urls' => 'text/uri-list', + 'usda' => 'model/vnd.usda', 'usdz' => 'model/vnd.usdz+zip', 'ustar' => 'application/x-ustar', 'utz' => 'application/vnd.uiq.theme', @@ -1096,6 +1115,7 @@ final class MimeType 'webmanifest' => 'application/manifest+json', 'webp' => 'image/webp', 'wg' => 'application/vnd.pmi.widget', + 'wgsl' => 'text/wgsl', 'wgt' => 'application/widget', 'wif' => 'application/watcherinfo+xml', 'wks' => 'application/vnd.ms-works', @@ -1150,9 +1170,10 @@ final class MimeType 'xel' => 'application/xcap-el+xml', 'xenc' => 'application/xenc+xml', 'xer' => 'application/patch-ops-error+xml', - 'xfdf' => 'application/vnd.adobe.xfdf', + 'xfdf' => 'application/xfdf', 'xfdl' => 'application/vnd.xfdl', 'xht' => 'application/xhtml+xml', + 'xhtm' => 'application/vnd.pwg-xhtml-print+xml', 'xhtml' => 'application/xhtml+xml', 'xhvml' => 'application/xv+xml', 'xif' => 'image/vnd.xiff', @@ -1183,6 +1204,7 @@ final class MimeType 'xpw' => 'application/vnd.intercon.formnet', 'xpx' => 'application/vnd.intercon.formnet', 'xsd' => 'application/xml', + 'xsf' => 'application/prs.xsf+xml', 'xsl' => 'application/xml', 'xslt' => 'application/xslt+xml', 'xsm' => 'application/vnd.syncml+xml', @@ -1218,7 +1240,7 @@ final class MimeType /** * Determines the mimetype of a file by looking at its extension. * - * @link https://raw.githubusercontent.com/jshttp/mime-db/master/db.json + * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json */ public static function fromFilename(string $filename): ?string { @@ -1228,7 +1250,7 @@ public static function fromFilename(string $filename): ?string /** * Maps a file extensions to a mimetype. * - * @link https://raw.githubusercontent.com/jshttp/mime-db/master/db.json + * @see https://raw.githubusercontent.com/jshttp/mime-db/master/db.json */ public static function fromExtension(string $extension): ?string { diff --git a/core/vendor/guzzlehttp/psr7/src/MultipartStream.php b/core/vendor/guzzlehttp/psr7/src/MultipartStream.php index 3e12b74d15..41c48eef8a 100644 --- a/core/vendor/guzzlehttp/psr7/src/MultipartStream.php +++ b/core/vendor/guzzlehttp/psr7/src/MultipartStream.php @@ -60,7 +60,7 @@ private function getHeaders(array $headers): string $str .= "{$key}: {$value}\r\n"; } - return "--{$this->boundary}\r\n" . trim($str) . "\r\n\r\n"; + return "--{$this->boundary}\r\n".trim($str)."\r\n\r\n"; } /** @@ -72,7 +72,7 @@ protected function createStream(array $elements = []): StreamInterface foreach ($elements as $element) { if (!is_array($element)) { - throw new \UnexpectedValueException("An array is expected"); + throw new \UnexpectedValueException('An array is expected'); } $this->addElement($stream, $element); } @@ -137,9 +137,7 @@ private function createElement(string $name, StreamInterface $stream, ?string $f // Set a default Content-Type if one was not supplied $type = $this->getHeader($headers, 'content-type'); if (!$type && ($filename === '0' || $filename)) { - if ($type = MimeType::fromFilename($filename)) { - $headers['Content-Type'] = $type; - } + $headers['Content-Type'] = MimeType::fromFilename($filename) ?? 'application/octet-stream'; } return [$stream, $headers]; diff --git a/core/vendor/guzzlehttp/psr7/src/PumpStream.php b/core/vendor/guzzlehttp/psr7/src/PumpStream.php index e90389c3b7..5585190cfd 100644 --- a/core/vendor/guzzlehttp/psr7/src/PumpStream.php +++ b/core/vendor/guzzlehttp/psr7/src/PumpStream.php @@ -34,7 +34,7 @@ final class PumpStream implements StreamInterface private $buffer; /** - * @param callable(int): (string|null|false) $source Source of the stream data. The callable MAY + * @param callable(int): (string|false|null) $source Source of the stream data. The callable MAY * accept an integer argument used to control the * amount of data to return. The callable MUST * return a string when called, or false|null on error @@ -60,6 +60,7 @@ public function __toString(): string throw $e; } trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; } } @@ -149,8 +150,6 @@ public function getContents(): string } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) @@ -169,6 +168,7 @@ private function pump(int $length): void $data = call_user_func($this->source, $length); if ($data === false || $data === null) { $this->source = null; + return; } $this->buffer->write($data); diff --git a/core/vendor/guzzlehttp/psr7/src/Query.php b/core/vendor/guzzlehttp/psr7/src/Query.php index 2faab3a889..8b94927973 100644 --- a/core/vendor/guzzlehttp/psr7/src/Query.php +++ b/core/vendor/guzzlehttp/psr7/src/Query.php @@ -93,7 +93,7 @@ public static function build(array $params, $encoding = PHP_QUERY_RFC3986): stri $qs .= $k; $v = is_bool($v) ? (int) $v : $v; if ($v !== null) { - $qs .= '=' . $encoder((string) $v); + $qs .= '='.$encoder((string) $v); } $qs .= '&'; } else { @@ -101,7 +101,7 @@ public static function build(array $params, $encoding = PHP_QUERY_RFC3986): stri $qs .= $k; $vv = is_bool($vv) ? (int) $vv : $vv; if ($vv !== null) { - $qs .= '=' . $encoder((string) $vv); + $qs .= '='.$encoder((string) $vv); } $qs .= '&'; } diff --git a/core/vendor/guzzlehttp/psr7/src/Request.php b/core/vendor/guzzlehttp/psr7/src/Request.php index b17af66a2c..db29d95d38 100644 --- a/core/vendor/guzzlehttp/psr7/src/Request.php +++ b/core/vendor/guzzlehttp/psr7/src/Request.php @@ -69,7 +69,7 @@ public function getRequestTarget(): string $target = '/'; } if ($this->uri->getQuery() != '') { - $target .= '?' . $this->uri->getQuery(); + $target .= '?'.$this->uri->getQuery(); } return $target; @@ -85,6 +85,7 @@ public function withRequestTarget($requestTarget): RequestInterface $new = clone $this; $new->requestTarget = $requestTarget; + return $new; } @@ -98,6 +99,7 @@ public function withMethod($method): RequestInterface $this->assertMethod($method); $new = clone $this; $new->method = strtoupper($method); + return $new; } @@ -131,7 +133,7 @@ private function updateHostFromUri(): void } if (($port = $this->uri->getPort()) !== null) { - $host .= ':' . $port; + $host .= ':'.$port; } if (isset($this->headerNames['host'])) { diff --git a/core/vendor/guzzlehttp/psr7/src/Response.php b/core/vendor/guzzlehttp/psr7/src/Response.php index 4c6ee6f036..8fc11478be 100644 --- a/core/vendor/guzzlehttp/psr7/src/Response.php +++ b/core/vendor/guzzlehttp/psr7/src/Response.php @@ -138,6 +138,7 @@ public function withStatus($code, $reasonPhrase = ''): ResponseInterface $reasonPhrase = self::PHRASES[$new->statusCode]; } $new->reasonPhrase = (string) $reasonPhrase; + return $new; } diff --git a/core/vendor/guzzlehttp/psr7/src/Rfc7230.php b/core/vendor/guzzlehttp/psr7/src/Rfc7230.php index 30224018d3..8219dba4dc 100644 --- a/core/vendor/guzzlehttp/psr7/src/Rfc7230.php +++ b/core/vendor/guzzlehttp/psr7/src/Rfc7230.php @@ -14,7 +14,7 @@ final class Rfc7230 * * Note: header delimiter (\r\n) is modified to \r?\n to accept line feed only delimiters for BC reasons. * - * @link https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15 + * @see https://github.com/amphp/http/blob/v1.0.1/src/Rfc7230.php#L12-L15 * * @license https://github.com/amphp/http/blob/v1.0.1/LICENSE */ diff --git a/core/vendor/guzzlehttp/psr7/src/ServerRequest.php b/core/vendor/guzzlehttp/psr7/src/ServerRequest.php index b2aa382dad..c852d96f53 100644 --- a/core/vendor/guzzlehttp/psr7/src/ServerRequest.php +++ b/core/vendor/guzzlehttp/psr7/src/ServerRequest.php @@ -144,10 +144,10 @@ private static function normalizeNestedFileSpec(array $files = []): array foreach (array_keys($files['tmp_name']) as $key) { $spec = [ 'tmp_name' => $files['tmp_name'][$key], - 'size' => $files['size'][$key] ?? null, - 'error' => $files['error'][$key] ?? null, - 'name' => $files['name'][$key] ?? null, - 'type' => $files['type'][$key] ?? null, + 'size' => $files['size'][$key] ?? null, + 'error' => $files['error'][$key] ?? null, + 'name' => $files['name'][$key] ?? null, + 'type' => $files['type'][$key] ?? null, ]; $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec); } @@ -182,7 +182,7 @@ public static function fromGlobals(): ServerRequestInterface private static function extractHostAndPortFromAuthority(string $authority): array { - $uri = 'http://' . $authority; + $uri = 'http://'.$authority; $parts = parse_url($uri); if (false === $parts) { return [null, null]; @@ -286,8 +286,6 @@ public function withQueryParams(array $query): ServerRequestInterface } /** - * {@inheritdoc} - * * @return array|object|null */ public function getParsedBody() @@ -309,8 +307,6 @@ public function getAttributes(): array } /** - * {@inheritdoc} - * * @return mixed */ public function getAttribute($attribute, $default = null) diff --git a/core/vendor/guzzlehttp/psr7/src/Stream.php b/core/vendor/guzzlehttp/psr7/src/Stream.php index ecd31861e1..f730ddacf4 100644 --- a/core/vendor/guzzlehttp/psr7/src/Stream.php +++ b/core/vendor/guzzlehttp/psr7/src/Stream.php @@ -61,8 +61,8 @@ public function __construct($stream, array $options = []) $this->stream = $stream; $meta = stream_get_meta_data($this->stream); $this->seekable = $meta['seekable']; - $this->readable = (bool)preg_match(self::READABLE_MODES, $meta['mode']); - $this->writable = (bool)preg_match(self::WRITABLE_MODES, $meta['mode']); + $this->readable = (bool) preg_match(self::READABLE_MODES, $meta['mode']); + $this->writable = (bool) preg_match(self::WRITABLE_MODES, $meta['mode']); $this->uri = $this->getMetadata('uri'); } @@ -80,12 +80,14 @@ public function __toString(): string if ($this->isSeekable()) { $this->seek(0); } + return $this->getContents(); } catch (\Throwable $e) { if (\PHP_VERSION_ID >= 70400) { throw $e; } trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; } } @@ -145,6 +147,7 @@ public function getSize(): ?int $stats = fstat($this->stream); if (is_array($stats) && isset($stats['size'])) { $this->size = $stats['size']; + return $this->size; } @@ -207,7 +210,7 @@ public function seek($offset, $whence = SEEK_SET): void } if (fseek($this->stream, $offset, $whence) === -1) { throw new \RuntimeException('Unable to seek to stream position ' - . $offset . ' with whence ' . var_export($whence, true)); + .$offset.' with whence '.var_export($whence, true)); } } @@ -261,8 +264,6 @@ public function write($string): int } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) diff --git a/core/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php b/core/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php index 56d4104d45..96196a3eae 100644 --- a/core/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php +++ b/core/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php @@ -31,6 +31,7 @@ public function __get(string $name) { if ($name === 'stream') { $this->stream = $this->createStream(); + return $this->stream; } @@ -43,12 +44,14 @@ public function __toString(): string if ($this->isSeekable()) { $this->seek(0); } + return $this->getContents(); } catch (\Throwable $e) { if (\PHP_VERSION_ID >= 70400) { throw $e; } trigger_error(sprintf('%s::__toString exception: %s', self::class, (string) $e), E_USER_ERROR); + return ''; } } @@ -79,8 +82,6 @@ public function close(): void } /** - * {@inheritdoc} - * * @return mixed */ public function getMetadata($key = null) diff --git a/core/vendor/guzzlehttp/psr7/src/StreamWrapper.php b/core/vendor/guzzlehttp/psr7/src/StreamWrapper.php index 2a93464035..b3655cb3a9 100644 --- a/core/vendor/guzzlehttp/psr7/src/StreamWrapper.php +++ b/core/vendor/guzzlehttp/psr7/src/StreamWrapper.php @@ -41,7 +41,7 @@ public static function getResource(StreamInterface $stream) $mode = 'w'; } else { throw new \InvalidArgumentException('The stream must be readable, ' - . 'writable, or both.'); + .'writable, or both.'); } return fopen('guzzle://stream', $mode, false, self::createStreamContext($stream)); @@ -55,7 +55,7 @@ public static function getResource(StreamInterface $stream) public static function createStreamContext(StreamInterface $stream) { return stream_context_create([ - 'guzzle' => ['stream' => $stream] + 'guzzle' => ['stream' => $stream], ]); } @@ -115,7 +115,7 @@ public function stream_seek(int $offset, int $whence): bool */ public function stream_cast(int $cast_as) { - $stream = clone($this->stream); + $stream = clone $this->stream; $resource = $stream->detach(); return $resource ?? false; @@ -127,27 +127,27 @@ public function stream_cast(int $cast_as) public function stream_stat(): array { static $modeMap = [ - 'r' => 33060, + 'r' => 33060, 'rb' => 33060, 'r+' => 33206, - 'w' => 33188, - 'wb' => 33188 + 'w' => 33188, + 'wb' => 33188, ]; return [ - 'dev' => 0, - 'ino' => 0, - 'mode' => $modeMap[$this->mode], - 'nlink' => 0, - 'uid' => 0, - 'gid' => 0, - 'rdev' => 0, - 'size' => $this->stream->getSize() ?: 0, - 'atime' => 0, - 'mtime' => 0, - 'ctime' => 0, + 'dev' => 0, + 'ino' => 0, + 'mode' => $modeMap[$this->mode], + 'nlink' => 0, + 'uid' => 0, + 'gid' => 0, + 'rdev' => 0, + 'size' => $this->stream->getSize() ?: 0, + 'atime' => 0, + 'mtime' => 0, + 'ctime' => 0, 'blksize' => 0, - 'blocks' => 0 + 'blocks' => 0, ]; } @@ -157,19 +157,19 @@ public function stream_stat(): array public function url_stat(string $path, int $flags): array { return [ - 'dev' => 0, - 'ino' => 0, - 'mode' => 0, - 'nlink' => 0, - 'uid' => 0, - 'gid' => 0, - 'rdev' => 0, - 'size' => 0, - 'atime' => 0, - 'mtime' => 0, - 'ctime' => 0, + 'dev' => 0, + 'ino' => 0, + 'mode' => 0, + 'nlink' => 0, + 'uid' => 0, + 'gid' => 0, + 'rdev' => 0, + 'size' => 0, + 'atime' => 0, + 'mtime' => 0, + 'ctime' => 0, 'blksize' => 0, - 'blocks' => 0 + 'blocks' => 0, ]; } } diff --git a/core/vendor/guzzlehttp/psr7/src/Uri.php b/core/vendor/guzzlehttp/psr7/src/Uri.php index 09e878d3d9..fbba7f1230 100644 --- a/core/vendor/guzzlehttp/psr7/src/Uri.php +++ b/core/vendor/guzzlehttp/psr7/src/Uri.php @@ -25,7 +25,7 @@ class Uri implements UriInterface, \JsonSerializable private const HTTP_DEFAULT_HOST = 'localhost'; private const DEFAULT_PORTS = [ - 'http' => 80, + 'http' => 80, 'https' => 443, 'ftp' => 21, 'gopher' => 70, @@ -41,14 +41,14 @@ class Uri implements UriInterface, \JsonSerializable /** * Unreserved characters for use in a regex. * - * @link https://tools.ietf.org/html/rfc3986#section-2.3 + * @see https://tools.ietf.org/html/rfc3986#section-2.3 */ private const CHAR_UNRESERVED = 'a-zA-Z0-9_\-\.~'; /** * Sub-delims for use in a regex. * - * @link https://tools.ietf.org/html/rfc3986#section-2.2 + * @see https://tools.ietf.org/html/rfc3986#section-2.2 */ private const CHAR_SUB_DELIMS = '!\$&\'\(\)\*\+,;='; private const QUERY_SEPARATORS_REPLACEMENT = ['=' => '%3D', '&' => '%26']; @@ -87,6 +87,7 @@ public function __construct(string $uri = '') $this->applyParts($parts); } } + /** * UTF-8 aware \parse_url() replacement. * @@ -121,7 +122,7 @@ static function ($matches) { $url ); - $result = parse_url($prefix . $encodedUrl); + $result = parse_url($prefix.$encodedUrl); if ($result === false) { return false; @@ -161,7 +162,7 @@ public function __toString(): string * `file:///` is the more common syntax for the file scheme anyway (Chrome for example redirects to * that format). * - * @link https://tools.ietf.org/html/rfc3986#section-5.3 + * @see https://tools.ietf.org/html/rfc3986#section-5.3 */ public static function composeComponents(?string $scheme, ?string $authority, string $path, ?string $query, ?string $fragment): string { @@ -169,25 +170,25 @@ public static function composeComponents(?string $scheme, ?string $authority, st // weak type checks to also accept null until we can add scalar type hints if ($scheme != '') { - $uri .= $scheme . ':'; + $uri .= $scheme.':'; } if ($authority != '' || $scheme === 'file') { - $uri .= '//' . $authority; + $uri .= '//'.$authority; } if ($authority != '' && $path != '' && $path[0] != '/') { - $path = '/' . $path; + $path = '/'.$path; } $uri .= $path; if ($query != '') { - $uri .= '?' . $query; + $uri .= '?'.$query; } if ($fragment != '') { - $uri .= '#' . $fragment; + $uri .= '#'.$fragment; } return $uri; @@ -218,7 +219,7 @@ public static function isDefaultPort(UriInterface $uri): bool * @see Uri::isNetworkPathReference * @see Uri::isAbsolutePathReference * @see Uri::isRelativePathReference - * @link https://tools.ietf.org/html/rfc3986#section-4 + * @see https://tools.ietf.org/html/rfc3986#section-4 */ public static function isAbsolute(UriInterface $uri): bool { @@ -230,7 +231,7 @@ public static function isAbsolute(UriInterface $uri): bool * * A relative reference that begins with two slash characters is termed an network-path reference. * - * @link https://tools.ietf.org/html/rfc3986#section-4.2 + * @see https://tools.ietf.org/html/rfc3986#section-4.2 */ public static function isNetworkPathReference(UriInterface $uri): bool { @@ -242,7 +243,7 @@ public static function isNetworkPathReference(UriInterface $uri): bool * * A relative reference that begins with a single slash character is termed an absolute-path reference. * - * @link https://tools.ietf.org/html/rfc3986#section-4.2 + * @see https://tools.ietf.org/html/rfc3986#section-4.2 */ public static function isAbsolutePathReference(UriInterface $uri): bool { @@ -257,7 +258,7 @@ public static function isAbsolutePathReference(UriInterface $uri): bool * * A relative reference that does not begin with a slash character is termed a relative-path reference. * - * @link https://tools.ietf.org/html/rfc3986#section-4.2 + * @see https://tools.ietf.org/html/rfc3986#section-4.2 */ public static function isRelativePathReference(UriInterface $uri): bool { @@ -276,7 +277,7 @@ public static function isRelativePathReference(UriInterface $uri): bool * @param UriInterface $uri The URI to check * @param UriInterface|null $base An optional base URI to compare against * - * @link https://tools.ietf.org/html/rfc3986#section-4.4 + * @see https://tools.ietf.org/html/rfc3986#section-4.4 */ public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool { @@ -352,7 +353,7 @@ public static function withQueryValues(UriInterface $uri, array $keyValueArray): /** * Creates a URI from a hash of `parse_url` components. * - * @link http://php.net/manual/en/function.parse-url.php + * @see http://php.net/manual/en/function.parse-url.php * * @throws MalformedUriException If the components do not form a valid URI. */ @@ -374,11 +375,11 @@ public function getAuthority(): string { $authority = $this->host; if ($this->userInfo !== '') { - $authority = $this->userInfo . '@' . $authority; + $authority = $this->userInfo.'@'.$authority; } if ($this->port !== null) { - $authority .= ':' . $this->port; + $authority .= ':'.$this->port; } return $authority; @@ -435,7 +436,7 @@ public function withUserInfo($user, $password = null): UriInterface { $info = $this->filterUserInfoComponent($user); if ($password !== null) { - $info .= ':' . $this->filterUserInfoComponent($password); + $info .= ':'.$this->filterUserInfoComponent($password); } if ($this->userInfo === $info) { @@ -563,7 +564,7 @@ private function applyParts(array $parts): void ? $this->filterQueryAndFragment($parts['fragment']) : ''; if (isset($parts['pass'])) { - $this->userInfo .= ':' . $this->filterUserInfoComponent($parts['pass']); + $this->userInfo .= ':'.$this->filterUserInfoComponent($parts['pass']); } $this->removeDefaultPort(); @@ -595,7 +596,7 @@ private function filterUserInfoComponent($component): string } return preg_replace_callback( - '/(?:[^%' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . ']+|%(?![A-Fa-f0-9]{2}))/', + '/(?:[^%'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.']+|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $component ); @@ -627,7 +628,7 @@ private function filterPort($port): ?int } $port = (int) $port; - if (0 > $port || 0xffff < $port) { + if (0 > $port || 0xFFFF < $port) { throw new \InvalidArgumentException( sprintf('Invalid port: %d. Must be between 0 and 65535', $port) ); @@ -664,7 +665,7 @@ private static function generateQueryString(string $key, ?string $value): string $queryString = strtr($key, self::QUERY_SEPARATORS_REPLACEMENT); if ($value !== null) { - $queryString .= '=' . strtr($value, self::QUERY_SEPARATORS_REPLACEMENT); + $queryString .= '='.strtr($value, self::QUERY_SEPARATORS_REPLACEMENT); } return $queryString; @@ -691,7 +692,7 @@ private function filterPath($path): string } return preg_replace_callback( - '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\/]++|%(?![A-Fa-f0-9]{2}))/', + '/(?:[^'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.'%:@\/]++|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $path ); @@ -711,7 +712,7 @@ private function filterQueryAndFragment($str): string } return preg_replace_callback( - '/(?:[^' . self::CHAR_UNRESERVED . self::CHAR_SUB_DELIMS . '%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/', + '/(?:[^'.self::CHAR_UNRESERVED.self::CHAR_SUB_DELIMS.'%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/', [$this, 'rawurlencodeMatchZero'], $str ); diff --git a/core/vendor/guzzlehttp/psr7/src/UriNormalizer.php b/core/vendor/guzzlehttp/psr7/src/UriNormalizer.php index e12971edda..cd4c383aa1 100644 --- a/core/vendor/guzzlehttp/psr7/src/UriNormalizer.php +++ b/core/vendor/guzzlehttp/psr7/src/UriNormalizer.php @@ -11,7 +11,7 @@ * * @author Tobias Schultze * - * @link https://tools.ietf.org/html/rfc3986#section-6 + * @see https://tools.ietf.org/html/rfc3986#section-6 */ final class UriNormalizer { @@ -119,7 +119,7 @@ final class UriNormalizer * @param UriInterface $uri The URI to normalize * @param int $flags A bitmask of normalizations to apply, see constants * - * @link https://tools.ietf.org/html/rfc3986#section-6.2 + * @see https://tools.ietf.org/html/rfc3986#section-6.2 */ public static function normalize(UriInterface $uri, int $flags = self::PRESERVING_NORMALIZATIONS): UriInterface { @@ -131,8 +131,8 @@ public static function normalize(UriInterface $uri, int $flags = self::PRESERVIN $uri = self::decodeUnreservedCharacters($uri); } - if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === '' && - ($uri->getScheme() === 'http' || $uri->getScheme() === 'https') + if ($flags & self::CONVERT_EMPTY_PATH && $uri->getPath() === '' + && ($uri->getScheme() === 'http' || $uri->getScheme() === 'https') ) { $uri = $uri->withPath('/'); } @@ -174,7 +174,7 @@ public static function normalize(UriInterface $uri, int $flags = self::PRESERVIN * @param UriInterface $uri2 An URI to compare * @param int $normalizations A bitmask of normalizations to apply, see constants * - * @link https://tools.ietf.org/html/rfc3986#section-6.1 + * @see https://tools.ietf.org/html/rfc3986#section-6.1 */ public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, int $normalizations = self::PRESERVING_NORMALIZATIONS): bool { diff --git a/core/vendor/guzzlehttp/psr7/src/UriResolver.php b/core/vendor/guzzlehttp/psr7/src/UriResolver.php index 426e5c9adf..38d5793c7b 100644 --- a/core/vendor/guzzlehttp/psr7/src/UriResolver.php +++ b/core/vendor/guzzlehttp/psr7/src/UriResolver.php @@ -11,14 +11,14 @@ * * @author Tobias Schultze * - * @link https://tools.ietf.org/html/rfc3986#section-5 + * @see https://tools.ietf.org/html/rfc3986#section-5 */ final class UriResolver { /** * Removes dot segments from a path and returns the new path. * - * @link http://tools.ietf.org/html/rfc3986#section-5.2.4 + * @see http://tools.ietf.org/html/rfc3986#section-5.2.4 */ public static function removeDotSegments(string $path): string { @@ -40,7 +40,7 @@ public static function removeDotSegments(string $path): string if ($path[0] === '/' && (!isset($newPath[0]) || $newPath[0] !== '/')) { // Re-add the leading slash if necessary for cases like "/.." - $newPath = '/' . $newPath; + $newPath = '/'.$newPath; } elseif ($newPath !== '' && ($segment === '.' || $segment === '..')) { // Add the trailing slash if necessary // If newPath is not empty, then $segment must be set and is the last segment from the foreach @@ -53,7 +53,7 @@ public static function removeDotSegments(string $path): string /** * Converts the relative URI into a new URI that is resolved against the base URI. * - * @link http://tools.ietf.org/html/rfc3986#section-5.2 + * @see http://tools.ietf.org/html/rfc3986#section-5.2 */ public static function resolve(UriInterface $base, UriInterface $rel): UriInterface { @@ -80,13 +80,13 @@ public static function resolve(UriInterface $base, UriInterface $rel): UriInterf $targetPath = $rel->getPath(); } else { if ($targetAuthority != '' && $base->getPath() === '') { - $targetPath = '/' . $rel->getPath(); + $targetPath = '/'.$rel->getPath(); } else { $lastSlashPos = strrpos($base->getPath(), '/'); if ($lastSlashPos === false) { $targetPath = $rel->getPath(); } else { - $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1) . $rel->getPath(); + $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1).$rel->getPath(); } } } @@ -127,8 +127,8 @@ public static function resolve(UriInterface $base, UriInterface $rel): UriInterf */ public static function relativize(UriInterface $base, UriInterface $target): UriInterface { - if ($target->getScheme() !== '' && - ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '') + if ($target->getScheme() !== '' + && ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '') ) { return $target; } @@ -185,7 +185,7 @@ private static function getRelativePath(UriInterface $base, UriInterface $target } } $targetSegments[] = $targetLastSegment; - $relativePath = str_repeat('../', count($sourceSegments)) . implode('/', $targetSegments); + $relativePath = str_repeat('../', count($sourceSegments)).implode('/', $targetSegments); // A reference to am empty last segment or an empty first sub-segment must be prefixed with "./". // This also applies to a segment with a colon character (e.g., "file:colon") that cannot be used diff --git a/core/vendor/guzzlehttp/psr7/src/Utils.php b/core/vendor/guzzlehttp/psr7/src/Utils.php index 3a4cf39464..917c05e304 100644 --- a/core/vendor/guzzlehttp/psr7/src/Utils.php +++ b/core/vendor/guzzlehttp/psr7/src/Utils.php @@ -90,6 +90,7 @@ public static function copyToString(StreamInterface $stream, int $maxLen = -1): } $buffer .= $buf; } + return $buffer; } @@ -174,7 +175,7 @@ public static function modifyRequest(RequestInterface $request, array $changes): $standardPorts = ['http' => 80, 'https' => 443]; $scheme = $changes['uri']->getScheme(); if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) { - $changes['set_headers']['Host'] .= ':' . $port; + $changes['set_headers']['Host'] .= ':'.$port; } } } @@ -230,7 +231,7 @@ public static function modifyRequest(RequestInterface $request, array $changes): * @param StreamInterface $stream Stream to read from * @param int|null $maxLength Maximum buffer length */ - public static function readLine(StreamInterface $stream, ?int $maxLength = null): string + public static function readLine(StreamInterface $stream, int $maxLength = null): string { $buffer = ''; $size = 0; @@ -291,6 +292,7 @@ public static function streamFor($resource = '', array $options = []): StreamInt fwrite($stream, (string) $resource); fseek($stream, 0); } + return new Stream($stream, $options); } @@ -308,6 +310,7 @@ public static function streamFor($resource = '', array $options = []): StreamInt fseek($stream, 0); $resource = $stream; } + return new Stream($resource, $options); case 'object': /** @var object $resource */ @@ -320,6 +323,7 @@ public static function streamFor($resource = '', array $options = []): StreamInt } $result = $resource->current(); $resource->next(); + return $result; }, $options); } elseif (method_exists($resource, '__toString')) { @@ -334,7 +338,7 @@ public static function streamFor($resource = '', array $options = []): StreamInt return new PumpStream($resource, $options); } - throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource)); + throw new \InvalidArgumentException('Invalid resource type: '.gettype($resource)); } /** diff --git a/core/vendor/guzzlehttp/uri-template/CHANGELOG.md b/core/vendor/guzzlehttp/uri-template/CHANGELOG.md index bf89924269..1d6aa11feb 100644 --- a/core/vendor/guzzlehttp/uri-template/CHANGELOG.md +++ b/core/vendor/guzzlehttp/uri-template/CHANGELOG.md @@ -4,6 +4,14 @@ All notable changes to `uri-template` will be documented in this file. Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) principles. +## v1.0.2 - 2023-08-27 + +### Changed +- Officially support PHP 8.2 and 8.3 + +### Fixed +- Fixed using `0` as an expanded value + ## v1.0.1 - 2021-10-07 ### Changed diff --git a/core/vendor/guzzlehttp/uri-template/composer.json b/core/vendor/guzzlehttp/uri-template/composer.json index 11ffd33c94..e44d784296 100644 --- a/core/vendor/guzzlehttp/uri-template/composer.json +++ b/core/vendor/guzzlehttp/uri-template/composer.json @@ -46,6 +46,7 @@ "symfony/polyfill-php80": "^1.17" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", "phpunit/phpunit" : "^8.5.19 || ^9.5.8", "uri-template/tests": "1.0.0" }, @@ -59,12 +60,10 @@ "GuzzleHttp\\UriTemplate\\Tests\\": "tests" } }, - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "config": { + "allow-plugins": { + "bamarni/composer-bin-plugin": true + }, "preferred-install": "dist", "sort-packages": true } diff --git a/core/vendor/guzzlehttp/uri-template/src/UriTemplate.php b/core/vendor/guzzlehttp/uri-template/src/UriTemplate.php index c69916416c..1d99474fcc 100644 --- a/core/vendor/guzzlehttp/uri-template/src/UriTemplate.php +++ b/core/vendor/guzzlehttp/uri-template/src/UriTemplate.php @@ -7,7 +7,7 @@ /** * Expands URI templates. Userland implementation of PECL uri_template. * - * @link http://tools.ietf.org/html/rfc6570 + * @see http://tools.ietf.org/html/rfc6570 */ final class UriTemplate { @@ -170,7 +170,6 @@ private static function expandMatch(array $matches, array $variables): string } /** @var string $var */ - $kvp[$key] = $var; } @@ -207,7 +206,7 @@ private static function expandMatch(array $matches, array $variables): string } if ($actuallyUseQuery) { - if (!$expanded && $joiner !== '&') { + if ($expanded === '' && $joiner !== '&') { $expanded = $value['value']; } else { $expanded = \sprintf('%s=%s', $value['value'], $expanded); diff --git a/core/vendor/illuminate/bus/DatabaseBatchRepository.php b/core/vendor/illuminate/bus/DatabaseBatchRepository.php index 2c54615128..c68e5c1a5f 100644 --- a/core/vendor/illuminate/bus/DatabaseBatchRepository.php +++ b/core/vendor/illuminate/bus/DatabaseBatchRepository.php @@ -342,7 +342,7 @@ protected function unserialize($serialized) try { return unserialize($serialized); - } catch (ModelNotFoundException $e) { + } catch (ModelNotFoundException) { return []; } } diff --git a/core/vendor/illuminate/cache/CacheManager.php b/core/vendor/illuminate/cache/CacheManager.php index 0098f9e895..95a76f69ea 100644 --- a/core/vendor/illuminate/cache/CacheManager.php +++ b/core/vendor/illuminate/cache/CacheManager.php @@ -214,7 +214,8 @@ protected function createDatabaseDriver(array $config) $config['table'], $this->getPrefix($config), $config['lock_table'] ?? 'cache_locks', - $config['lock_lottery'] ?? [2, 100] + $config['lock_lottery'] ?? [2, 100], + $config['lock_timeout'] ?? 86400, ); return $this->repository($store->setLockConnection( diff --git a/core/vendor/illuminate/cache/DatabaseLock.php b/core/vendor/illuminate/cache/DatabaseLock.php index acc97f73ea..cf08dcf98c 100644 --- a/core/vendor/illuminate/cache/DatabaseLock.php +++ b/core/vendor/illuminate/cache/DatabaseLock.php @@ -4,7 +4,6 @@ use Illuminate\Database\Connection; use Illuminate\Database\QueryException; -use Illuminate\Support\Carbon; class DatabaseLock extends Lock { @@ -29,6 +28,13 @@ class DatabaseLock extends Lock */ protected $lottery; + /** + * The default number of seconds that a lock should be held. + * + * @var int + */ + protected $defaultTimeoutInSeconds; + /** * Create a new lock instance. * @@ -40,13 +46,14 @@ class DatabaseLock extends Lock * @param array $lottery * @return void */ - public function __construct(Connection $connection, $table, $name, $seconds, $owner = null, $lottery = [2, 100]) + public function __construct(Connection $connection, $table, $name, $seconds, $owner = null, $lottery = [2, 100], $defaultTimeoutInSeconds = 86400) { parent::__construct($name, $seconds, $owner); $this->connection = $connection; $this->table = $table; $this->lottery = $lottery; + $this->defaultTimeoutInSeconds = $defaultTimeoutInSeconds; } /** @@ -91,7 +98,9 @@ public function acquire() */ protected function expiresAt() { - return $this->seconds > 0 ? time() + $this->seconds : Carbon::now()->addDays(1)->getTimestamp(); + $lockTimeout = $this->seconds > 0 ? $this->seconds : $this->defaultTimeoutInSeconds; + + return time() + $lockTimeout; } /** diff --git a/core/vendor/illuminate/cache/DatabaseStore.php b/core/vendor/illuminate/cache/DatabaseStore.php index de6ae9a6c3..19c4ccefe4 100644 --- a/core/vendor/illuminate/cache/DatabaseStore.php +++ b/core/vendor/illuminate/cache/DatabaseStore.php @@ -58,6 +58,13 @@ class DatabaseStore implements LockProvider, Store */ protected $lockLottery; + /** + * The default number of seconds that a lock should be held. + * + * @var int + */ + protected $defaultLockTimeoutInSeconds; + /** * Create a new database store. * @@ -69,16 +76,18 @@ class DatabaseStore implements LockProvider, Store * @return void */ public function __construct(ConnectionInterface $connection, - $table, - $prefix = '', - $lockTable = 'cache_locks', - $lockLottery = [2, 100]) + $table, + $prefix = '', + $lockTable = 'cache_locks', + $lockLottery = [2, 100], + $defaultLockTimeoutInSeconds = 86400) { $this->table = $table; $this->prefix = $prefix; $this->connection = $connection; $this->lockTable = $lockTable; $this->lockLottery = $lockLottery; + $this->defaultLockTimeoutInSeconds = $defaultLockTimeoutInSeconds; } /** @@ -277,7 +286,8 @@ public function lock($name, $seconds = 0, $owner = null) $this->prefix.$name, $seconds, $owner, - $this->lockLottery + $this->lockLottery, + $this->defaultLockTimeoutInSeconds ); } diff --git a/core/vendor/illuminate/cache/FileStore.php b/core/vendor/illuminate/cache/FileStore.php index 424ca63d43..b18e568f64 100644 --- a/core/vendor/illuminate/cache/FileStore.php +++ b/core/vendor/illuminate/cache/FileStore.php @@ -338,7 +338,7 @@ protected function emptyPayload() * @param string $key * @return string */ - protected function path($key) + public function path($key) { $parts = array_slice(str_split($hash = sha1($key), 2), 0, 2); diff --git a/core/vendor/illuminate/cache/RedisStore.php b/core/vendor/illuminate/cache/RedisStore.php index 4d03745147..437cee7813 100644 --- a/core/vendor/illuminate/cache/RedisStore.php +++ b/core/vendor/illuminate/cache/RedisStore.php @@ -253,7 +253,7 @@ public function flush() /** * Remove all expired tag set entries. * - * @return bool + * @return void */ public function flushStaleTags() { diff --git a/core/vendor/illuminate/collections/Collection.php b/core/vendor/illuminate/collections/Collection.php index 648822fc15..7869e1ce65 100644 --- a/core/vendor/illuminate/collections/Collection.php +++ b/core/vendor/illuminate/collections/Collection.php @@ -362,6 +362,10 @@ protected function duplicateComparator($strict) */ public function except($keys) { + if (is_null($keys)) { + return new static($this->items); + } + if ($keys instanceof Enumerable) { $keys = $keys->all(); } elseif (! is_array($keys)) { @@ -374,7 +378,7 @@ public function except($keys) /** * Run a filter over each of the items. * - * @param (callable(TValue, TKey): bool)|null $callback + * @param (callable(TValue, TKey): bool)|null $callback * @return static */ public function filter(callable $callback = null) @@ -424,12 +428,13 @@ public function flip() /** * Remove an item from the collection by key. * - * @param TKey|array $keys + * \Illuminate\Contracts\Support\Arrayable|iterable|TKey $keys + * * @return $this */ public function forget($keys) { - foreach ((array) $keys as $key) { + foreach ($this->getArrayableItems($keys) as $key) { $this->offsetUnset($key); } @@ -503,6 +508,7 @@ public function groupBy($groupBy, $preserveKeys = false) foreach ($groupKeys as $groupKey) { $groupKey = match (true) { is_bool($groupKey) => (int) $groupKey, + $groupKey instanceof \BackedEnum => $groupKey->value, $groupKey instanceof \Stringable => (string) $groupKey, default => $groupKey, }; @@ -1072,7 +1078,7 @@ public function reverse() * * @param TValue|(callable(TValue,TKey): bool) $value * @param bool $strict - * @return TKey|bool + * @return TKey|false */ public function search($value, $strict = false) { diff --git a/core/vendor/illuminate/collections/LazyCollection.php b/core/vendor/illuminate/collections/LazyCollection.php index 0cbe33ad9e..3ccd32edb4 100644 --- a/core/vendor/illuminate/collections/LazyCollection.php +++ b/core/vendor/illuminate/collections/LazyCollection.php @@ -1035,7 +1035,7 @@ public function reverse() * * @param TValue|(callable(TValue,TKey): bool) $value * @param bool $strict - * @return TKey|bool + * @return TKey|false */ public function search($value, $strict = false) { diff --git a/core/vendor/illuminate/collections/Traits/EnumeratesValues.php b/core/vendor/illuminate/collections/Traits/EnumeratesValues.php index f9614963ae..f0bd10b192 100644 --- a/core/vendor/illuminate/collections/Traits/EnumeratesValues.php +++ b/core/vendor/illuminate/collections/Traits/EnumeratesValues.php @@ -312,6 +312,29 @@ public function value($key, $default = null) return value($default); } + /** + * Ensure that every item in the collection is of the expected type. + * + * @template TEnsureOfType + * + * @param class-string $type + * @return static + * + * @throws \UnexpectedValueException + */ + public function ensure($type) + { + return $this->each(function ($item) use ($type) { + $itemType = get_debug_type($item); + + if ($itemType !== $type && ! $item instanceof $type) { + throw new UnexpectedValueException( + sprintf("Collection should only include '%s' items, but '%s' found.", $type, $itemType) + ); + } + }); + } + /** * Determine if the collection is not empty. * @@ -458,6 +481,25 @@ public function partition($key, $operator = null, $value = null) return new static([new static($passed), new static($failed)]); } + /** + * Calculate the percentage of items that pass a given truth test. + * + * @param (callable(TValue, TKey): bool) $callback + * @param int $precision + * @return float|null + */ + public function percentage(callable $callback, int $precision = 2) + { + if ($this->isEmpty()) { + return null; + } + + return round( + $this->filter($callback)->count() / $this->count() * 100, + $precision + ); + } + /** * Get the sum of the given values. * @@ -972,21 +1014,17 @@ protected function getArrayableItems($items) { if (is_array($items)) { return $items; - } elseif ($items instanceof Enumerable) { - return $items->all(); - } elseif ($items instanceof Arrayable) { - return $items->toArray(); - } elseif ($items instanceof Traversable) { - return iterator_to_array($items); - } elseif ($items instanceof Jsonable) { - return json_decode($items->toJson(), true); - } elseif ($items instanceof JsonSerializable) { - return (array) $items->jsonSerialize(); - } elseif ($items instanceof UnitEnum) { - return [$items]; } - return (array) $items; + return match (true) { + $items instanceof Enumerable => $items->all(), + $items instanceof Arrayable => $items->toArray(), + $items instanceof Traversable => iterator_to_array($items), + $items instanceof Jsonable => json_decode($items->toJson(), true), + $items instanceof JsonSerializable => (array) $items->jsonSerialize(), + $items instanceof UnitEnum => [$items], + default => (array) $items, + }; } /** diff --git a/core/vendor/illuminate/collections/helpers.php b/core/vendor/illuminate/collections/helpers.php index 9babf4e0f8..235edceb15 100644 --- a/core/vendor/illuminate/collections/helpers.php +++ b/core/vendor/illuminate/collections/helpers.php @@ -149,6 +149,42 @@ function data_set(&$target, $key, $value, $overwrite = true) } } +if (! function_exists('data_forget')) { + /** + * Remove / unset an item from an array or object using "dot" notation. + * + * @param mixed $target + * @param string|array|int|null $key + * @return mixed + */ + function data_forget(&$target, $key) + { + $segments = is_array($key) ? $key : explode('.', $key); + + if (($segment = array_shift($segments)) === '*' && Arr::accessible($target)) { + if ($segments) { + foreach ($target as &$inner) { + data_forget($inner, $segments); + } + } + } elseif (Arr::accessible($target)) { + if ($segments && Arr::exists($target, $segment)) { + data_forget($target[$segment], $segments); + } else { + Arr::forget($target, $segment); + } + } elseif (is_object($target)) { + if ($segments && isset($target->{$segment})) { + data_forget($target->{$segment}, $segments); + } elseif (isset($target->{$segment})) { + unset($target->{$segment}); + } + } + + return $target; + } +} + if (! function_exists('head')) { /** * Get the first element of an array. Useful for method chaining. diff --git a/core/vendor/illuminate/console/CacheCommandMutex.php b/core/vendor/illuminate/console/CacheCommandMutex.php index 223174c340..0a896c6bc9 100644 --- a/core/vendor/illuminate/console/CacheCommandMutex.php +++ b/core/vendor/illuminate/console/CacheCommandMutex.php @@ -3,10 +3,15 @@ namespace Illuminate\Console; use Carbon\CarbonInterval; +use Illuminate\Cache\DynamoDbStore; use Illuminate\Contracts\Cache\Factory as Cache; +use Illuminate\Contracts\Cache\LockProvider; +use Illuminate\Support\InteractsWithTime; class CacheCommandMutex implements CommandMutex { + use InteractsWithTime; + /** * The cache factory implementation. * @@ -39,13 +44,20 @@ public function __construct(Cache $cache) */ public function create($command) { - return $this->cache->store($this->store)->add( - $this->commandMutexName($command), - true, - method_exists($command, 'isolationLockExpiresAt') - ? $command->isolationLockExpiresAt() - : CarbonInterval::hour(), - ); + $store = $this->cache->store($this->store); + + $expiresAt = method_exists($command, 'isolationLockExpiresAt') + ? $command->isolationLockExpiresAt() + : CarbonInterval::hour(); + + if ($this->shouldUseLocks($store->getStore())) { + return $store->getStore()->lock( + $this->commandMutexName($command), + $this->secondsUntil($expiresAt) + )->get(); + } + + return $store->add($this->commandMutexName($command), true, $expiresAt); } /** @@ -56,9 +68,19 @@ public function create($command) */ public function exists($command) { - return $this->cache->store($this->store)->has( - $this->commandMutexName($command) - ); + $store = $this->cache->store($this->store); + + if ($this->shouldUseLocks($store->getStore())) { + $lock = $store->getStore()->lock($this->commandMutexName($command)); + + return tap(! $lock->get(), function ($exists) use ($lock) { + if ($exists) { + $lock->release(); + } + }); + } + + return $this->cache->store($this->store)->has($this->commandMutexName($command)); } /** @@ -69,18 +91,28 @@ public function exists($command) */ public function forget($command) { - return $this->cache->store($this->store)->forget( - $this->commandMutexName($command) - ); + $store = $this->cache->store($this->store); + + if ($this->shouldUseLocks($store->getStore())) { + return $store->getStore()->lock($this->commandMutexName($command))->forceRelease(); + } + + return $this->cache->store($this->store)->forget($this->commandMutexName($command)); } /** + * Get the isolatable command mutex name. + * * @param \Illuminate\Console\Command $command * @return string */ protected function commandMutexName($command) { - return 'framework'.DIRECTORY_SEPARATOR.'command-'.$command->getName(); + $baseName = 'framework'.DIRECTORY_SEPARATOR.'command-'.$command->getName(); + + return method_exists($command, 'isolatableId') + ? $baseName.'-'.$command->isolatableId() + : $baseName; } /** @@ -95,4 +127,15 @@ public function useStore($store) return $this; } + + /** + * Determine if the given store should use locks for command mutexes. + * + * @param \Illuminate\Contracts\Cache\Store $store + * @return bool + */ + protected function shouldUseLocks($store) + { + return $store instanceof LockProvider && ! $store instanceof DynamoDbStore; + } } diff --git a/core/vendor/illuminate/console/Command.php b/core/vendor/illuminate/console/Command.php index 4d27527b92..7e1b3a1ff6 100644 --- a/core/vendor/illuminate/console/Command.php +++ b/core/vendor/illuminate/console/Command.php @@ -13,6 +13,7 @@ class Command extends SymfonyCommand { use Concerns\CallsCommands, + Concerns\ConfiguresPrompts, Concerns\HasParameters, Concerns\InteractsWithIO, Concerns\InteractsWithSignals, @@ -167,12 +168,14 @@ protected function configureIsolation() */ public function run(InputInterface $input, OutputInterface $output): int { - $this->output = $this->laravel->make( + $this->output = $output instanceof OutputStyle ? $output : $this->laravel->make( OutputStyle::class, ['input' => $input, 'output' => $output] ); $this->components = $this->laravel->make(Factory::class, ['output' => $this->output]); + $this->configurePrompts($input); + try { return parent::run( $this->input = $input, $this->output diff --git a/core/vendor/illuminate/console/Concerns/CallsCommands.php b/core/vendor/illuminate/console/Concerns/CallsCommands.php index 7e69b9b789..375b899f0a 100644 --- a/core/vendor/illuminate/console/Concerns/CallsCommands.php +++ b/core/vendor/illuminate/console/Concerns/CallsCommands.php @@ -64,9 +64,13 @@ protected function runCommand($command, array $arguments, OutputInterface $outpu { $arguments['command'] = $command; - return $this->resolveCommand($command)->run( + $result = $this->resolveCommand($command)->run( $this->createInputFromArguments($arguments), $output ); + + $this->restorePrompts(); + + return $result; } /** diff --git a/core/vendor/illuminate/console/Concerns/ConfiguresPrompts.php b/core/vendor/illuminate/console/Concerns/ConfiguresPrompts.php new file mode 100644 index 0000000000..6dc7dae1a1 --- /dev/null +++ b/core/vendor/illuminate/console/Concerns/ConfiguresPrompts.php @@ -0,0 +1,132 @@ +output); + + Prompt::fallbackWhen(! $input->isInteractive() || windows_os() || $this->laravel->runningUnitTests()); + + TextPrompt::fallbackUsing(fn (TextPrompt $prompt) => $this->promptUntilValid( + fn () => $this->components->ask($prompt->label, $prompt->default ?: null) ?? '', + $prompt->required, + $prompt->validate + )); + + PasswordPrompt::fallbackUsing(fn (PasswordPrompt $prompt) => $this->promptUntilValid( + fn () => $this->components->secret($prompt->label) ?? '', + $prompt->required, + $prompt->validate + )); + + ConfirmPrompt::fallbackUsing(fn (ConfirmPrompt $prompt) => $this->promptUntilValid( + fn () => $this->components->confirm($prompt->label, $prompt->default), + $prompt->required, + $prompt->validate + )); + + SelectPrompt::fallbackUsing(fn (SelectPrompt $prompt) => $this->promptUntilValid( + fn () => $this->components->choice($prompt->label, $prompt->options, $prompt->default), + false, + $prompt->validate + )); + + MultiSelectPrompt::fallbackUsing(function (MultiSelectPrompt $prompt) { + if ($prompt->default !== []) { + return $this->promptUntilValid( + fn () => $this->components->choice($prompt->label, $prompt->options, implode(',', $prompt->default), multiple: true), + $prompt->required, + $prompt->validate + ); + } + + return $this->promptUntilValid( + fn () => collect($this->components->choice($prompt->label, ['' => 'None', ...$prompt->options], 'None', multiple: true)) + ->reject('') + ->all(), + $prompt->required, + $prompt->validate + ); + }); + + SuggestPrompt::fallbackUsing(fn (SuggestPrompt $prompt) => $this->promptUntilValid( + fn () => $this->components->askWithCompletion($prompt->label, $prompt->options, $prompt->default ?: null) ?? '', + $prompt->required, + $prompt->validate + )); + + SearchPrompt::fallbackUsing(fn (SearchPrompt $prompt) => $this->promptUntilValid( + function () use ($prompt) { + $query = $this->components->ask($prompt->label); + + $options = ($prompt->options)($query); + + return $this->components->choice($prompt->label, $options); + }, + false, + $prompt->validate + )); + } + + /** + * Prompt the user until the given validation callback passes. + * + * @param \Closure $prompt + * @param bool|string $required + * @param \Closure|null $validate + * @return mixed + */ + protected function promptUntilValid($prompt, $required, $validate) + { + while (true) { + $result = $prompt(); + + if ($required && ($result === '' || $result === [] || $result === false)) { + $this->components->error(is_string($required) ? $required : 'Required.'); + + continue; + } + + if ($validate) { + $error = $validate($result); + + if (is_string($error) && strlen($error) > 0) { + $this->components->error($error); + + continue; + } + } + + return $result; + } + } + + /** + * Restore the prompts output. + * + * @return void + */ + protected function restorePrompts() + { + Prompt::setOutput($this->output); + } +} diff --git a/core/vendor/illuminate/console/Concerns/InteractsWithIO.php b/core/vendor/illuminate/console/Concerns/InteractsWithIO.php index 13f6197589..a398928f63 100644 --- a/core/vendor/illuminate/console/Concerns/InteractsWithIO.php +++ b/core/vendor/illuminate/console/Concerns/InteractsWithIO.php @@ -450,4 +450,14 @@ public function getOutput() { return $this->output; } + + /** + * Get the output component factory implementation. + * + * @return \Illuminate\Console\View\Components\Factory + */ + public function outputComponents() + { + return $this->components; + } } diff --git a/core/vendor/illuminate/console/Concerns/PromptsForMissingInput.php b/core/vendor/illuminate/console/Concerns/PromptsForMissingInput.php index ef1186eec1..59a92d162d 100644 --- a/core/vendor/illuminate/console/Concerns/PromptsForMissingInput.php +++ b/core/vendor/illuminate/console/Concerns/PromptsForMissingInput.php @@ -2,10 +2,13 @@ namespace Illuminate\Console\Concerns; +use Closure; use Illuminate\Contracts\Console\PromptsForMissingInput as PromptsForMissingInputContract; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use function Laravel\Prompts\text; + trait PromptsForMissingInput { /** @@ -36,13 +39,24 @@ protected function promptForMissingArguments(InputInterface $input, OutputInterf $prompted = collect($this->getDefinition()->getArguments()) ->filter(fn ($argument) => $argument->isRequired() && is_null($input->getArgument($argument->getName()))) ->filter(fn ($argument) => $argument->getName() !== 'command') - ->each(fn ($argument) => $input->setArgument( - $argument->getName(), - $this->askPersistently( - $this->promptForMissingArgumentsUsing()[$argument->getName()] ?? - 'What is '.lcfirst($argument->getDescription()).'?' - ) - )) + ->each(function ($argument) use ($input) { + $label = $this->promptForMissingArgumentsUsing()[$argument->getName()] ?? + 'What is '.lcfirst($argument->getDescription() ?: ('the '.$argument->getName())).'?'; + + if ($label instanceof Closure) { + return $input->setArgument($argument->getName(), $label()); + } + + if (is_array($label)) { + [$label, $placeholder] = $label; + } + + $input->setArgument($argument->getName(), text( + label: $label, + placeholder: $placeholder ?? '', + validate: fn ($value) => empty($value) ? "The {$argument->getName()} is required." : null, + )); + }) ->isNotEmpty(); if ($prompted) { @@ -84,25 +98,4 @@ protected function didReceiveOptions(InputInterface $input) ->reject(fn ($option) => $input->getOption($option->getName()) === $option->getDefault()) ->isNotEmpty(); } - - /** - * Continue asking a question until an answer is provided. - * - * @param string $question - * @return string - */ - private function askPersistently($question) - { - $answer = null; - - while ($answer === null) { - $answer = $this->components->ask($question); - - if ($answer === null) { - $this->components->error('The answer is required.'); - } - } - - return $answer; - } } diff --git a/core/vendor/illuminate/console/ConfirmableTrait.php b/core/vendor/illuminate/console/ConfirmableTrait.php index bf639706f5..8134927206 100644 --- a/core/vendor/illuminate/console/ConfirmableTrait.php +++ b/core/vendor/illuminate/console/ConfirmableTrait.php @@ -2,6 +2,8 @@ namespace Illuminate\Console; +use function Laravel\Prompts\confirm; + trait ConfirmableTrait { /** @@ -26,12 +28,10 @@ public function confirmToProceed($warning = 'Application In Production', $callba $this->components->alert($warning); - $confirmed = $this->components->confirm('Do you really wish to run this command?'); + $confirmed = confirm('Are you sure you want to run this command?', default: false); if (! $confirmed) { - $this->newLine(); - - $this->components->warn('Command canceled.'); + $this->components->warn('Command cancelled.'); return false; } diff --git a/core/vendor/illuminate/console/Contracts/NewLineAware.php b/core/vendor/illuminate/console/Contracts/NewLineAware.php index 135cecba80..0a21d27d5f 100644 --- a/core/vendor/illuminate/console/Contracts/NewLineAware.php +++ b/core/vendor/illuminate/console/Contracts/NewLineAware.php @@ -4,10 +4,19 @@ interface NewLineAware { + /** + * How many trailing newlines were written. + * + * @return int + */ + public function newLinesWritten(); + /** * Whether a newline has already been written. * * @return bool + * + * @deprecated use newLinesWritten */ public function newLineWritten(); } diff --git a/core/vendor/illuminate/console/GeneratorCommand.php b/core/vendor/illuminate/console/GeneratorCommand.php index c4b17d9bef..6e7ee24572 100644 --- a/core/vendor/illuminate/console/GeneratorCommand.php +++ b/core/vendor/illuminate/console/GeneratorCommand.php @@ -485,7 +485,35 @@ protected function getArguments() protected function promptForMissingArgumentsUsing() { return [ - 'name' => 'What should the '.strtolower($this->type).' be named?', + 'name' => [ + 'What should the '.strtolower($this->type).' be named?', + match ($this->type) { + 'Cast' => 'E.g. Json', + 'Channel' => 'E.g. OrderChannel', + 'Console command' => 'E.g. SendEmails', + 'Component' => 'E.g. Alert', + 'Controller' => 'E.g. UserController', + 'Event' => 'E.g. PodcastProcessed', + 'Exception' => 'E.g. InvalidOrderException', + 'Factory' => 'E.g. PostFactory', + 'Job' => 'E.g. ProcessPodcast', + 'Listener' => 'E.g. SendPodcastNotification', + 'Mailable' => 'E.g. OrderShipped', + 'Middleware' => 'E.g. EnsureTokenIsValid', + 'Model' => 'E.g. Flight', + 'Notification' => 'E.g. InvoicePaid', + 'Observer' => 'E.g. UserObserver', + 'Policy' => 'E.g. PostPolicy', + 'Provider' => 'E.g. ElasticServiceProvider', + 'Request' => 'E.g. StorePodcastRequest', + 'Resource' => 'E.g. UserResource', + 'Rule' => 'E.g. Uppercase', + 'Scope' => 'E.g. TrendingScope', + 'Seeder' => 'E.g. UserSeeder', + 'Test' => 'E.g. UserTest', + default => '', + }, + ], ]; } } diff --git a/core/vendor/illuminate/console/OutputStyle.php b/core/vendor/illuminate/console/OutputStyle.php index 2c159ca565..cbfc257220 100644 --- a/core/vendor/illuminate/console/OutputStyle.php +++ b/core/vendor/illuminate/console/OutputStyle.php @@ -5,6 +5,7 @@ use Illuminate\Console\Contracts\NewLineAware; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Question\Question; use Symfony\Component\Console\Style\SymfonyStyle; class OutputStyle extends SymfonyStyle implements NewLineAware @@ -16,10 +17,21 @@ class OutputStyle extends SymfonyStyle implements NewLineAware */ private $output; + /** + * The number of trailing new lines written by the last output. + * + * This is initialized as 1 to account for the new line written by the shell after executing a command. + * + * @var int + */ + protected $newLinesWritten = 1; + /** * If the last output written wrote a new line. * * @var bool + * + * @deprecated use $newLinesWritten */ protected $newLineWritten = false; @@ -39,12 +51,23 @@ public function __construct(InputInterface $input, OutputInterface $output) /** * {@inheritdoc} - * - * @return void + */ + public function askQuestion(Question $question): mixed + { + try { + return parent::askQuestion($question); + } finally { + $this->newLinesWritten++; + } + } + + /** + * {@inheritdoc} */ public function write(string|iterable $messages, bool $newline = false, int $options = 0) { - $this->newLineWritten = $newline; + $this->newLinesWritten = $this->trailingNewLineCount($messages) + (int) $newline; + $this->newLineWritten = $this->newLinesWritten > 0; parent::write($messages, $newline, $options); } @@ -56,6 +79,7 @@ public function write(string|iterable $messages, bool $newline = false, int $opt */ public function writeln(string|iterable $messages, int $type = self::OUTPUT_NORMAL) { + $this->newLinesWritten = $this->trailingNewLineCount($messages) + 1; $this->newLineWritten = true; parent::writeln($messages, $type); @@ -68,7 +92,8 @@ public function writeln(string|iterable $messages, int $type = self::OUTPUT_NORM */ public function newLine(int $count = 1) { - $this->newLineWritten = $count > 0; + $this->newLinesWritten += $count; + $this->newLineWritten = $this->newLinesWritten > 0; parent::newLine($count); } @@ -76,6 +101,20 @@ public function newLine(int $count = 1) /** * {@inheritdoc} */ + public function newLinesWritten() + { + if ($this->output instanceof static) { + return $this->output->newLinesWritten(); + } + + return $this->newLinesWritten; + } + + /** + * {@inheritdoc} + * + * @deprecated use newLinesWritten + */ public function newLineWritten() { if ($this->output instanceof static && $this->output->newLineWritten()) { @@ -85,6 +124,27 @@ public function newLineWritten() return $this->newLineWritten; } + /* + * Count the number of trailing new lines in a string. + * + * @param string|iterable $messages + * @return int + */ + protected function trailingNewLineCount($messages) + { + if (is_iterable($messages)) { + $string = ''; + + foreach ($messages as $message) { + $string .= $message.PHP_EOL; + } + } else { + $string = $messages; + } + + return strlen($string) - strlen(rtrim($string, PHP_EOL)); + } + /** * Returns whether verbosity is quiet (-q). * diff --git a/core/vendor/illuminate/console/Parser.php b/core/vendor/illuminate/console/Parser.php index 552400d764..d70088e61b 100644 --- a/core/vendor/illuminate/console/Parser.php +++ b/core/vendor/illuminate/console/Parser.php @@ -16,7 +16,7 @@ class Parser * * @throws \InvalidArgumentException */ - public static function parse($expression) + public static function parse(string $expression) { $name = static::name($expression); @@ -35,7 +35,7 @@ public static function parse($expression) * * @throws \InvalidArgumentException */ - protected static function name($expression) + protected static function name(string $expression) { if (! preg_match('/[^\s]+/', $expression, $matches)) { throw new InvalidArgumentException('Unable to determine command name from signature.'); @@ -45,7 +45,7 @@ protected static function name($expression) } /** - * Extract all of the parameters from the tokens. + * Extract all parameters from the tokens. * * @param array $tokens * @return array @@ -57,7 +57,7 @@ protected static function parameters(array $tokens) $options = []; foreach ($tokens as $token) { - if (preg_match('/-{2,}(.*)/', $token, $matches)) { + if (preg_match('/^-{2,}(.*)/', $token, $matches)) { $options[] = static::parseOption($matches[1]); } else { $arguments[] = static::parseArgument($token); @@ -73,7 +73,7 @@ protected static function parameters(array $tokens) * @param string $token * @return \Symfony\Component\Console\Input\InputArgument */ - protected static function parseArgument($token) + protected static function parseArgument(string $token) { [$token, $description] = static::extractDescription($token); @@ -99,17 +99,17 @@ protected static function parseArgument($token) * @param string $token * @return \Symfony\Component\Console\Input\InputOption */ - protected static function parseOption($token) + protected static function parseOption(string $token) { [$token, $description] = static::extractDescription($token); $matches = preg_split('/\s*\|\s*/', $token, 2); + $shortcut = null; + if (isset($matches[1])) { $shortcut = $matches[0]; $token = $matches[1]; - } else { - $shortcut = null; } switch (true) { @@ -132,7 +132,7 @@ protected static function parseOption($token) * @param string $token * @return array */ - protected static function extractDescription($token) + protected static function extractDescription(string $token) { $parts = preg_split('/\s+:\s+/', trim($token), 2); diff --git a/core/vendor/illuminate/console/Scheduling/CacheEventMutex.php b/core/vendor/illuminate/console/Scheduling/CacheEventMutex.php index 7603683531..3d1ad9247a 100644 --- a/core/vendor/illuminate/console/Scheduling/CacheEventMutex.php +++ b/core/vendor/illuminate/console/Scheduling/CacheEventMutex.php @@ -2,6 +2,7 @@ namespace Illuminate\Console\Scheduling; +use Illuminate\Cache\DynamoDbStore; use Illuminate\Contracts\Cache\Factory as Cache; use Illuminate\Contracts\Cache\LockProvider; @@ -40,7 +41,7 @@ public function __construct(Cache $cache) */ public function create(Event $event) { - if ($this->cache->store($this->store)->getStore() instanceof LockProvider) { + if ($this->shouldUseLocks($this->cache->store($this->store)->getStore())) { return $this->cache->store($this->store)->getStore() ->lock($event->mutexName(), $event->expiresAt * 60) ->acquire(); @@ -59,7 +60,7 @@ public function create(Event $event) */ public function exists(Event $event) { - if ($this->cache->store($this->store)->getStore() instanceof LockProvider) { + if ($this->shouldUseLocks($this->cache->store($this->store)->getStore())) { return ! $this->cache->store($this->store)->getStore() ->lock($event->mutexName(), $event->expiresAt * 60) ->get(fn () => true); @@ -76,7 +77,7 @@ public function exists(Event $event) */ public function forget(Event $event) { - if ($this->cache->store($this->store)->getStore() instanceof LockProvider) { + if ($this->shouldUseLocks($this->cache->store($this->store)->getStore())) { $this->cache->store($this->store)->getStore() ->lock($event->mutexName(), $event->expiresAt * 60) ->forceRelease(); @@ -87,6 +88,17 @@ public function forget(Event $event) $this->cache->store($this->store)->forget($event->mutexName()); } + /** + * Determine if the given store should use locks for cache event mutexes. + * + * @param \Illuminate\Contracts\Cache\Store $store + * @return bool + */ + protected function shouldUseLocks($store) + { + return $store instanceof LockProvider && ! $store instanceof DynamoDbStore; + } + /** * Specify the cache store that should be used. * diff --git a/core/vendor/illuminate/console/Scheduling/Event.php b/core/vendor/illuminate/console/Scheduling/Event.php index 0ff10188b2..98fff2fec1 100644 --- a/core/vendor/illuminate/console/Scheduling/Event.php +++ b/core/vendor/illuminate/console/Scheduling/Event.php @@ -37,6 +37,13 @@ class Event */ public $expression = '* * * * *'; + /** + * How often to repeat the event during a minute. + * + * @var int|null + */ + public $repeatSeconds = null; + /** * The timezone the date should be evaluated on. * @@ -156,6 +163,15 @@ class Event */ public $mutexNameResolver; + /** + * The last time the event was checked for eligibility to run. + * + * Utilized by sub-minute repeated events. + * + * @var \Illuminate\Support\Carbon|null + */ + protected $lastChecked; + /** * The exit status code of the command. * @@ -221,6 +237,27 @@ public function shouldSkipDueToOverlapping() return $this->withoutOverlapping && ! $this->mutex->create($this); } + /** + * Determine if the event has been configured to repeat multiple times per minute. + * + * @return bool + */ + public function isRepeatable() + { + return ! is_null($this->repeatSeconds); + } + + /** + * Determine if the event is ready to repeat. + * + * @return bool + */ + public function shouldRepeatNow() + { + return $this->isRepeatable() + && $this->lastChecked?->diffInSeconds() >= $this->repeatSeconds; + } + /** * Run the command process. * @@ -370,6 +407,8 @@ public function runsInEnvironment($environment) */ public function filtersPass($app) { + $this->lastChecked = Date::now(); + foreach ($this->filters as $callback) { if (! $app->call($callback)) { return false; diff --git a/core/vendor/illuminate/console/Scheduling/ManagesFrequencies.php b/core/vendor/illuminate/console/Scheduling/ManagesFrequencies.php index 020144ebea..c9016bdda2 100644 --- a/core/vendor/illuminate/console/Scheduling/ManagesFrequencies.php +++ b/core/vendor/illuminate/console/Scheduling/ManagesFrequencies.php @@ -3,6 +3,7 @@ namespace Illuminate\Console\Scheduling; use Illuminate\Support\Carbon; +use InvalidArgumentException; trait ManagesFrequencies { @@ -69,6 +70,93 @@ private function inTimeInterval($startTime, $endTime) return fn () => $now->between($startTime, $endTime); } + /** + * Schedule the event to run every second. + * + * @return $this + */ + public function everySecond() + { + return $this->repeatEvery(1); + } + + /** + * Schedule the event to run every two seconds. + * + * @return $this + */ + public function everyTwoSeconds() + { + return $this->repeatEvery(2); + } + + /** + * Schedule the event to run every five seconds. + * + * @return $this + */ + public function everyFiveSeconds() + { + return $this->repeatEvery(5); + } + + /** + * Schedule the event to run every ten seconds. + * + * @return $this + */ + public function everyTenSeconds() + { + return $this->repeatEvery(10); + } + + /** + * Schedule the event to run every fifteen seconds. + * + * @return $this + */ + public function everyFifteenSeconds() + { + return $this->repeatEvery(15); + } + + /** + * Schedule the event to run every twenty seconds. + * + * @return $this + */ + public function everyTwentySeconds() + { + return $this->repeatEvery(20); + } + + /** + * Schedule the event to run every thirty seconds. + * + * @return $this + */ + public function everyThirtySeconds() + { + return $this->repeatEvery(30); + } + + /** + * Schedule the event to run multiple times per minute. + * + * @param int $seconds + * @return $this + */ + protected function repeatEvery($seconds) + { + if (60 % $seconds !== 0) { + throw new InvalidArgumentException("The seconds [$seconds] are not evenly divisible by 60."); + } + + $this->repeatSeconds = $seconds; + + return $this->everyMinute(); + } + /** * Schedule the event to run every minute. * @@ -162,68 +250,67 @@ public function hourly() /** * Schedule the event to run hourly at a given offset in the hour. * - * @param array|int $offset + * @param array|string|int $offset * @return $this */ public function hourlyAt($offset) { - $offset = is_array($offset) ? implode(',', $offset) : $offset; - - return $this->spliceIntoPosition(1, $offset); + return $this->hourBasedSchedule($offset, '*'); } /** * Schedule the event to run every odd hour. * + * @param array|string|int $offset * @return $this */ - public function everyOddHour() + public function everyOddHour($offset = 0) { - return $this->spliceIntoPosition(1, 0)->spliceIntoPosition(2, '1-23/2'); + return $this->hourBasedSchedule($offset, '1-23/2'); } /** * Schedule the event to run every two hours. * + * @param array|string|int $offset * @return $this */ - public function everyTwoHours() + public function everyTwoHours($offset = 0) { - return $this->spliceIntoPosition(1, 0) - ->spliceIntoPosition(2, '*/2'); + return $this->hourBasedSchedule($offset, '*/2'); } /** * Schedule the event to run every three hours. * + * @param array|string|int $offset * @return $this */ - public function everyThreeHours() + public function everyThreeHours($offset = 0) { - return $this->spliceIntoPosition(1, 0) - ->spliceIntoPosition(2, '*/3'); + return $this->hourBasedSchedule($offset, '*/3'); } /** * Schedule the event to run every four hours. * + * @param array|string|int $offset * @return $this */ - public function everyFourHours() + public function everyFourHours($offset = 0) { - return $this->spliceIntoPosition(1, 0) - ->spliceIntoPosition(2, '*/4'); + return $this->hourBasedSchedule($offset, '*/4'); } /** * Schedule the event to run every six hours. * + * @param array|string|int $offset * @return $this */ - public function everySixHours() + public function everySixHours($offset = 0) { - return $this->spliceIntoPosition(1, 0) - ->spliceIntoPosition(2, '*/6'); + return $this->hourBasedSchedule($offset, '*/6'); } /** @@ -233,8 +320,7 @@ public function everySixHours() */ public function daily() { - return $this->spliceIntoPosition(1, 0) - ->spliceIntoPosition(2, 0); + return $this->hourBasedSchedule(0, 0); } /** @@ -258,8 +344,10 @@ public function dailyAt($time) { $segments = explode(':', $time); - return $this->spliceIntoPosition(2, (int) $segments[0]) - ->spliceIntoPosition(1, count($segments) === 2 ? (int) $segments[1] : '0'); + return $this->hourBasedSchedule( + count($segments) === 2 ? (int) $segments[1] : '0', + (int) $segments[0] + ); } /** @@ -286,7 +374,23 @@ public function twiceDailyAt($first = 1, $second = 13, $offset = 0) { $hours = $first.','.$second; - return $this->spliceIntoPosition(1, $offset) + return $this->hourBasedSchedule($offset, $hours); + } + + /** + * Schedule the event to run at the given minutes and hours. + * + * @param array|string|int $minutes + * @param array|string|int $hours + * @return $this + */ + protected function hourBasedSchedule($minutes, $hours) + { + $minutes = is_array($minutes) ? implode(',', $minutes) : $minutes; + + $hours = is_array($hours) ? implode(',', $hours) : $hours; + + return $this->spliceIntoPosition(1, $minutes) ->spliceIntoPosition(2, $hours); } diff --git a/core/vendor/illuminate/console/Scheduling/Schedule.php b/core/vendor/illuminate/console/Scheduling/Schedule.php index 2f62bf9e81..684aec58fc 100644 --- a/core/vendor/illuminate/console/Scheduling/Schedule.php +++ b/core/vendor/illuminate/console/Scheduling/Schedule.php @@ -70,6 +70,13 @@ class Schedule */ protected $dispatcher; + /** + * The cache of mutex results. + * + * @var array + */ + protected $mutexCache = []; + /** * Create a new schedule instance. * @@ -299,7 +306,7 @@ public function compileArrayInput($key, $value) */ public function serverShouldRun(Event $event, DateTimeInterface $time) { - return $this->schedulingMutex->create($event, $time); + return $this->mutexCache[$event->mutexName()] ??= $this->schedulingMutex->create($event, $time); } /** diff --git a/core/vendor/illuminate/console/Scheduling/ScheduleInterruptCommand.php b/core/vendor/illuminate/console/Scheduling/ScheduleInterruptCommand.php new file mode 100644 index 0000000000..662606a2ae --- /dev/null +++ b/core/vendor/illuminate/console/Scheduling/ScheduleInterruptCommand.php @@ -0,0 +1,58 @@ +cache = $cache; + } + + /** + * Execute the console command. + * + * @return void + */ + public function handle() + { + $this->cache->put('illuminate:schedule:interrupt', true, Date::now()->endOfMinute()); + + $this->components->info('Broadcasting schedule interrupt signal.'); + } +} diff --git a/core/vendor/illuminate/console/Scheduling/ScheduleListCommand.php b/core/vendor/illuminate/console/Scheduling/ScheduleListCommand.php index 5f80e1b0a6..831b595aa2 100644 --- a/core/vendor/illuminate/console/Scheduling/ScheduleListCommand.php +++ b/core/vendor/illuminate/console/Scheduling/ScheduleListCommand.php @@ -62,88 +62,130 @@ public function handle(Schedule $schedule) $expressionSpacing = $this->getCronExpressionSpacing($events); + $repeatExpressionSpacing = $this->getRepeatExpressionSpacing($events); + $timezone = new DateTimeZone($this->option('timezone') ?? config('app.timezone')); $events = $this->sortEvents($events, $timezone); - $events = $events->map(function ($event) use ($terminalWidth, $expressionSpacing, $timezone) { - $expression = $this->formatCronExpression($event->expression, $expressionSpacing); + $events = $events->map(function ($event) use ($terminalWidth, $expressionSpacing, $repeatExpressionSpacing, $timezone) { + return $this->listEvent($event, $terminalWidth, $expressionSpacing, $repeatExpressionSpacing, $timezone); + }); - $command = $event->command ?? ''; + $this->line( + $events->flatten()->filter()->prepend('')->push('')->toArray() + ); + } - $description = $event->description ?? ''; + /** + * Get the spacing to be used on each event row. + * + * @param \Illuminate\Support\Collection $events + * @return array + */ + private function getCronExpressionSpacing($events) + { + $rows = $events->map(fn ($event) => array_map('mb_strlen', preg_split("/\s+/", $event->expression))); - if (! $this->output->isVerbose()) { - $command = str_replace([Application::phpBinary(), Application::artisanBinary()], [ - 'php', - preg_replace("#['\"]#", '', Application::artisanBinary()), - ], $command); - } + return collect($rows[0] ?? [])->keys()->map(fn ($key) => $rows->max($key))->all(); + } - if ($event instanceof CallbackEvent) { - if (class_exists($description)) { - $command = $description; - $description = ''; - } else { - $command = 'Closure at: '.$this->getClosureLocation($event); - } - } + /** + * Get the spacing to be used on each event row. + * + * @param \Illuminate\Support\Collection $events + * @return int + */ + private function getRepeatExpressionSpacing($events) + { + return $events->map(fn ($event) => mb_strlen($this->getRepeatExpression($event)))->max(); + } - $command = mb_strlen($command) > 1 ? "{$command} " : ''; + /** + * List the given even in the console. + * + * @param \Illuminate\Console\Scheduling\Event + * @param int $terminalWidth + * @param array $expressionSpacing + * @param int $repeatExpressionSpacing + * @param array $repeatExpressionSpacing + * @param \DateTimeZone $timezone + * @return \Illuminate\Support\DateTimeZone + */ + private function listEvent($event, $terminalWidth, $expressionSpacing, $repeatExpressionSpacing, $timezone) + { + $expression = $this->formatCronExpression($event->expression, $expressionSpacing); - $nextDueDateLabel = 'Next Due:'; + $repeatExpression = str_pad($this->getRepeatExpression($event), $repeatExpressionSpacing); - $nextDueDate = $this->getNextDueDateForEvent($event, $timezone); + $command = $event->command ?? ''; - $nextDueDate = $this->output->isVerbose() - ? $nextDueDate->format('Y-m-d H:i:s P') - : $nextDueDate->diffForHumans(); + $description = $event->description ?? ''; - $hasMutex = $event->mutex->exists($event) ? 'Has Mutex › ' : ''; + if (! $this->output->isVerbose()) { + $command = str_replace([Application::phpBinary(), Application::artisanBinary()], [ + 'php', + preg_replace("#['\"]#", '', Application::artisanBinary()), + ], $command); + } - $dots = str_repeat('.', max( - $terminalWidth - mb_strlen($expression.$command.$nextDueDateLabel.$nextDueDate.$hasMutex) - 8, 0 - )); + if ($event instanceof CallbackEvent) { + $command = $event->getSummaryForDisplay(); - // Highlight the parameters... - $command = preg_replace("#(php artisan [\w\-:]+) (.+)#", '$1 $2', $command); + if (in_array($command, ['Closure', 'Callback'])) { + $command = 'Closure at: '.$this->getClosureLocation($event); + } + } - return [sprintf( - ' %s %s%s %s%s %s', - $expression, - $command, - $dots, - $hasMutex, - $nextDueDateLabel, - $nextDueDate - ), $this->output->isVerbose() && mb_strlen($description) > 1 ? sprintf( - ' %s%s %s', - str_repeat(' ', mb_strlen($expression) + 2), - '⇁', - $description - ) : '']; - }); + $command = mb_strlen($command) > 1 ? "{$command} " : ''; - $this->line( - $events->flatten()->filter()->prepend('')->push('')->toArray() - ); + $nextDueDateLabel = 'Next Due:'; + + $nextDueDate = $this->getNextDueDateForEvent($event, $timezone); + + $nextDueDate = $this->output->isVerbose() + ? $nextDueDate->format('Y-m-d H:i:s P') + : $nextDueDate->diffForHumans(); + + $hasMutex = $event->mutex->exists($event) ? 'Has Mutex › ' : ''; + + $dots = str_repeat('.', max( + $terminalWidth - mb_strlen($expression.$repeatExpression.$command.$nextDueDateLabel.$nextDueDate.$hasMutex) - 8, 0 + )); + + // Highlight the parameters... + $command = preg_replace("#(php artisan [\w\-:]+) (.+)#", '$1 $2', $command); + + return [sprintf( + ' %s %s %s%s %s%s %s', + $expression, + $repeatExpression, + $command, + $dots, + $hasMutex, + $nextDueDateLabel, + $nextDueDate + ), $this->output->isVerbose() && mb_strlen($description) > 1 ? sprintf( + ' %s%s %s', + str_repeat(' ', mb_strlen($expression) + 2), + '⇁', + $description + ) : '']; } /** - * Gets the spacing to be used on each event row. + * Get the repeat expression for an event. * - * @param \Illuminate\Support\Collection $events - * @return array + * @param \Illuminate\Console\Scheduling\Event $event + * @return string */ - private function getCronExpressionSpacing($events) + private function getRepeatExpression($event) { - $rows = $events->map(fn ($event) => array_map('mb_strlen', preg_split("/\s+/", $event->expression))); - - return collect($rows[0] ?? [])->keys()->map(fn ($key) => $rows->max($key))->all(); + return $event->isRepeatable() ? "{$event->repeatSeconds}s " : ''; } /** - * Sorts the events by due date if option set. + * Sort the events by due date if option set. * * @param \Illuminate\Support\Collection $events * @param \DateTimeZone $timezone @@ -165,15 +207,35 @@ private function sortEvents(\Illuminate\Support\Collection $events, DateTimeZone */ private function getNextDueDateForEvent($event, DateTimeZone $timezone) { - return Carbon::instance( + $nextDueDate = Carbon::instance( (new CronExpression($event->expression)) ->getNextRunDate(Carbon::now()->setTimezone($event->timezone)) ->setTimezone($timezone) ); + + if (! $event->isRepeatable()) { + return $nextDueDate; + } + + $previousDueDate = Carbon::instance( + (new CronExpression($event->expression)) + ->getPreviousRunDate(Carbon::now()->setTimezone($event->timezone), allowCurrentDate: true) + ->setTimezone($timezone) + ); + + $now = Carbon::now()->setTimezone($event->timezone); + + if (! $now->copy()->startOfMinute()->eq($previousDueDate)) { + return $nextDueDate; + } + + return $now + ->endOfSecond() + ->ceilSeconds($event->repeatSeconds); } /** - * Formats the cron expression based on the spacing provided. + * Format the cron expression based on the spacing provided. * * @param string $expression * @param array $spacing @@ -196,9 +258,7 @@ private function formatCronExpression($expression, $spacing) */ private function getClosureLocation(CallbackEvent $event) { - $callback = tap((new ReflectionClass($event))->getProperty('callback')) - ->setAccessible(true) - ->getValue($event); + $callback = (new ReflectionClass($event))->getProperty('callback')->getValue($event); if ($callback instanceof Closure) { $function = new ReflectionFunction($callback); diff --git a/core/vendor/illuminate/console/Scheduling/ScheduleRunCommand.php b/core/vendor/illuminate/console/Scheduling/ScheduleRunCommand.php index 92c32ec8f0..f6386b89d4 100644 --- a/core/vendor/illuminate/console/Scheduling/ScheduleRunCommand.php +++ b/core/vendor/illuminate/console/Scheduling/ScheduleRunCommand.php @@ -8,10 +8,12 @@ use Illuminate\Console\Events\ScheduledTaskFinished; use Illuminate\Console\Events\ScheduledTaskSkipped; use Illuminate\Console\Events\ScheduledTaskStarting; +use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Contracts\Debug\ExceptionHandler; use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Date; +use Illuminate\Support\Sleep; use Symfony\Component\Console\Attribute\AsCommand; use Throwable; @@ -67,6 +69,13 @@ class ScheduleRunCommand extends Command */ protected $handler; + /** + * The cache store implementation. + * + * @var \Illuminate\Contracts\Cache\Repository + */ + protected $cache; + /** * The PHP binary used by the command. * @@ -91,19 +100,25 @@ public function __construct() * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @param \Illuminate\Contracts\Events\Dispatcher $dispatcher + * @param \Illuminate\Contracts\Cache\Repository $cache * @param \Illuminate\Contracts\Debug\ExceptionHandler $handler * @return void */ - public function handle(Schedule $schedule, Dispatcher $dispatcher, ExceptionHandler $handler) + public function handle(Schedule $schedule, Dispatcher $dispatcher, Cache $cache, ExceptionHandler $handler) { $this->schedule = $schedule; $this->dispatcher = $dispatcher; + $this->cache = $cache; $this->handler = $handler; $this->phpBinary = Application::phpBinary(); + $this->clearInterruptSignal(); + $this->newLine(); - foreach ($this->schedule->dueEvents($this->laravel) as $event) { + $events = $this->schedule->dueEvents($this->laravel); + + foreach ($events as $event) { if (! $event->filtersPass($this->laravel)) { $this->dispatcher->dispatch(new ScheduledTaskSkipped($event)); @@ -119,6 +134,10 @@ public function handle(Schedule $schedule, Dispatcher $dispatcher, ExceptionHand $this->eventsRan = true; } + if ($events->contains->isRepeatable()) { + $this->repeatEvents($events->filter->isRepeatable()); + } + if (! $this->eventsRan) { $this->components->info('No scheduled commands are ready to run.'); } else { @@ -193,4 +212,69 @@ protected function runEvent($event) ]); } } + + /** + * Run the given repeating events. + * + * @param \Illuminate\Support\Collection<\Illuminate\Console\Scheduling\Event> $events + * @return void + */ + protected function repeatEvents($events) + { + $hasEnteredMaintenanceMode = false; + + while (Date::now()->lte($this->startedAt->endOfMinute())) { + foreach ($events as $event) { + if ($this->shouldInterrupt()) { + return; + } + + if (! $event->shouldRepeatNow()) { + continue; + } + + $hasEnteredMaintenanceMode = $hasEnteredMaintenanceMode || $this->laravel->isDownForMaintenance(); + + if ($hasEnteredMaintenanceMode && ! $event->runsInMaintenanceMode()) { + continue; + } + + if (! $event->filtersPass($this->laravel)) { + $this->dispatcher->dispatch(new ScheduledTaskSkipped($event)); + + continue; + } + + if ($event->onOneServer) { + $this->runSingleServerEvent($event); + } else { + $this->runEvent($event); + } + + $this->eventsRan = true; + } + + Sleep::usleep(100000); + } + } + + /** + * Determine if the schedule run should be interrupted. + * + * @return bool + */ + protected function shouldInterrupt() + { + return $this->cache->get('illuminate:schedule:interrupt', false); + } + + /** + * Ensure the interrupt signal is cleared. + * + * @return bool + */ + protected function clearInterruptSignal() + { + $this->cache->forget('illuminate:schedule:interrupt'); + } } diff --git a/core/vendor/illuminate/console/Scheduling/ScheduleTestCommand.php b/core/vendor/illuminate/console/Scheduling/ScheduleTestCommand.php index b294987b43..5e902a05b1 100644 --- a/core/vendor/illuminate/console/Scheduling/ScheduleTestCommand.php +++ b/core/vendor/illuminate/console/Scheduling/ScheduleTestCommand.php @@ -6,6 +6,8 @@ use Illuminate\Console\Command; use Symfony\Component\Console\Attribute\AsCommand; +use function Laravel\Prompts\select; + #[AsCommand(name: 'schedule:test')] class ScheduleTestCommand extends Command { @@ -60,7 +62,7 @@ public function handle(Schedule $schedule) $index = key($matches); } else { - $index = array_search($this->components->choice('Which command would you like to run?', $commandNames), $commandNames); + $index = $this->getSelectedCommandByIndex($commandNames); } $event = $commands[$index]; @@ -85,4 +87,31 @@ public function handle(Schedule $schedule) $this->newLine(); } + + /** + * Get the selected command name by index. + * + * @param array $commandNames + * @return int + */ + protected function getSelectedCommandByIndex(array $commandNames) + { + if (count($commandNames) !== count(array_unique($commandNames))) { + // Some commands (likely closures) have the same name, append unique indexes to each one... + $uniqueCommandNames = array_map(function ($index, $value) { + return "$value [$index]"; + }, array_keys($commandNames), $commandNames); + + $selectedCommand = select('Which command would you like to run?', $uniqueCommandNames); + + preg_match('/\[(\d+)\]/', $selectedCommand, $choice); + + return (int) $choice[1]; + } else { + return array_search( + select('Which command would you like to run?', $commandNames), + $commandNames + ); + } + } } diff --git a/core/vendor/illuminate/console/Signals.php b/core/vendor/illuminate/console/Signals.php index 92a5c87098..106b54d143 100644 --- a/core/vendor/illuminate/console/Signals.php +++ b/core/vendor/illuminate/console/Signals.php @@ -84,7 +84,7 @@ protected function initializeSignal($signal) /** * Unregister the current signal handlers. * - * @return array> + * @return void */ public function unregister() { diff --git a/core/vendor/illuminate/console/View/Components/Component.php b/core/vendor/illuminate/console/View/Components/Component.php index e0dabbb2d1..913c8b9bbe 100644 --- a/core/vendor/illuminate/console/View/Components/Component.php +++ b/core/vendor/illuminate/console/View/Components/Component.php @@ -108,8 +108,6 @@ protected function usingQuestionHelper($callable) ->getParentClass() ->getProperty('questionHelper'); - $property->setAccessible(true); - $currentHelper = $property->isInitialized($this->output) ? $property->getValue($this->output) : new SymfonyQuestionHelper(); diff --git a/core/vendor/illuminate/console/View/Components/Line.php b/core/vendor/illuminate/console/View/Components/Line.php index 5c701ee5aa..0153d1f675 100644 --- a/core/vendor/illuminate/console/View/Components/Line.php +++ b/core/vendor/illuminate/console/View/Components/Line.php @@ -47,7 +47,7 @@ public function render($style, $string, $verbosity = OutputInterface::VERBOSITY_ ]); $this->renderView('line', array_merge(static::$styles[$style], [ - 'marginTop' => ($this->output instanceof NewLineAware && $this->output->newLineWritten()) ? 0 : 1, + 'marginTop' => $this->output instanceof NewLineAware ? max(0, 2 - $this->output->newLinesWritten()) : 1, 'content' => $string, ]), $verbosity); } diff --git a/core/vendor/illuminate/console/View/Components/Secret.php b/core/vendor/illuminate/console/View/Components/Secret.php new file mode 100644 index 0000000000..824afd350b --- /dev/null +++ b/core/vendor/illuminate/console/View/Components/Secret.php @@ -0,0 +1,24 @@ +setHidden(true)->setHiddenFallback($fallback); + + return $this->usingQuestionHelper(fn () => $this->output->askQuestion($question)); + } +} diff --git a/core/vendor/illuminate/console/composer.json b/core/vendor/illuminate/console/composer.json index 727510f11c..99db9467c6 100644 --- a/core/vendor/illuminate/console/composer.json +++ b/core/vendor/illuminate/console/composer.json @@ -19,6 +19,7 @@ "illuminate/collections": "^10.0", "illuminate/contracts": "^10.0", "illuminate/macroable": "^10.0", + "laravel/prompts": "^0.1", "illuminate/support": "^10.0", "illuminate/view": "^10.0", "nunomaduro/termwind": "^1.13", diff --git a/core/vendor/illuminate/container/Container.php b/core/vendor/illuminate/container/Container.php index 71535fe83f..adb73bb51f 100644 --- a/core/vendor/illuminate/container/Container.php +++ b/core/vendor/illuminate/container/Container.php @@ -791,11 +791,9 @@ protected function resolve($abstract, $parameters = [], $raiseEvents = true) // We're ready to instantiate an instance of the concrete type registered for // the binding. This will instantiate the types, as well as resolve any of // its "nested" dependencies recursively until all have gotten resolved. - if ($this->isBuildable($concrete, $abstract)) { - $object = $this->build($concrete); - } else { - $object = $this->make($concrete); - } + $object = $this->isBuildable($concrete, $abstract) + ? $this->build($concrete) + : $this->make($concrete); // If we defined any extenders for this type, we'll need to spin through them // and apply them to the object being built. This allows for the extension diff --git a/core/vendor/illuminate/contracts/Database/Eloquent/CastsAttributes.php b/core/vendor/illuminate/contracts/Database/Eloquent/CastsAttributes.php index 5a81d2b2c5..89cec66a7a 100644 --- a/core/vendor/illuminate/contracts/Database/Eloquent/CastsAttributes.php +++ b/core/vendor/illuminate/contracts/Database/Eloquent/CastsAttributes.php @@ -16,7 +16,7 @@ interface CastsAttributes * @param \Illuminate\Database\Eloquent\Model $model * @param string $key * @param mixed $value - * @param array $attributes + * @param array $attributes * @return TGet|null */ public function get(Model $model, string $key, mixed $value, array $attributes); @@ -27,7 +27,7 @@ public function get(Model $model, string $key, mixed $value, array $attributes); * @param \Illuminate\Database\Eloquent\Model $model * @param string $key * @param TSet|null $value - * @param array $attributes + * @param array $attributes * @return mixed */ public function set(Model $model, string $key, mixed $value, array $attributes); diff --git a/core/vendor/illuminate/contracts/Database/Query/ConditionExpression.php b/core/vendor/illuminate/contracts/Database/Query/ConditionExpression.php new file mode 100644 index 0000000000..b2e97a6e83 --- /dev/null +++ b/core/vendor/illuminate/contracts/Database/Query/ConditionExpression.php @@ -0,0 +1,7 @@ +isUniqueConstraintError($e)) { + throw new UniqueConstraintViolationException( + $this->getName(), $query, $this->prepareBindings($bindings), $e + ); + } + throw new QueryException( $this->getName(), $query, $this->prepareBindings($bindings), $e ); } } + /** + * Determine if the given database exception was caused by a unique constraint violation. + * + * @param \Exception $exception + * @return bool + */ + protected function isUniqueConstraintError(Exception $exception) + { + return false; + } + /** * Log a query in the connection's query log. * @@ -1080,7 +1097,7 @@ public function escape($value, $binary = false) */ protected function escapeString($value) { - return $this->getPdo()->quote($value); + return $this->getReadPdo()->quote($value); } /** @@ -1548,6 +1565,22 @@ public function getQueryLog() return $this->queryLog; } + /** + * Get the connection query log with embedded bindings. + * + * @return array + */ + public function getRawQueryLog() + { + return array_map(fn (array $log) => [ + 'raw_query' => $this->queryGrammar->substituteBindingsIntoRawSql( + $log['query'], + $this->prepareBindings($log['bindings']) + ), + 'time' => $log['time'], + ], $this->getQueryLog()); + } + /** * Clear the query log. * diff --git a/core/vendor/illuminate/database/Console/DatabaseInspectionCommand.php b/core/vendor/illuminate/database/Console/DatabaseInspectionCommand.php index 2411a55126..3cad6c2f69 100644 --- a/core/vendor/illuminate/database/Console/DatabaseInspectionCommand.php +++ b/core/vendor/illuminate/database/Console/DatabaseInspectionCommand.php @@ -16,6 +16,8 @@ use Symfony\Component\Process\Exception\RuntimeException; use Symfony\Component\Process\Process; +use function Laravel\Prompts\confirm; + abstract class DatabaseInspectionCommand extends Command { /** @@ -206,7 +208,7 @@ protected function getConfigFromDatabase($database) protected function ensureDependenciesExist() { return tap(interface_exists('Doctrine\DBAL\Driver'), function ($dependenciesExist) { - if (! $dependenciesExist && $this->components->confirm('Inspecting database information requires the Doctrine DBAL (doctrine/dbal) package. Would you like to install it?')) { + if (! $dependenciesExist && confirm('Inspecting database information requires the Doctrine DBAL (doctrine/dbal) package. Would you like to install it?', default: false)) { $this->installDependencies(); } }); diff --git a/core/vendor/illuminate/database/Console/DumpCommand.php b/core/vendor/illuminate/database/Console/DumpCommand.php index 5e839b1d42..27121281a3 100644 --- a/core/vendor/illuminate/database/Console/DumpCommand.php +++ b/core/vendor/illuminate/database/Console/DumpCommand.php @@ -36,7 +36,7 @@ class DumpCommand extends Command * * @param \Illuminate\Database\ConnectionResolverInterface $connections * @param \Illuminate\Contracts\Events\Dispatcher $dispatcher - * @return int + * @return void */ public function handle(ConnectionResolverInterface $connections, Dispatcher $dispatcher) { diff --git a/core/vendor/illuminate/database/Console/Migrations/FreshCommand.php b/core/vendor/illuminate/database/Console/Migrations/FreshCommand.php index e319e74bc0..f18036f72a 100644 --- a/core/vendor/illuminate/database/Console/Migrations/FreshCommand.php +++ b/core/vendor/illuminate/database/Console/Migrations/FreshCommand.php @@ -61,7 +61,7 @@ public function handle() if ($this->laravel->bound(Dispatcher::class)) { $this->laravel[Dispatcher::class]->dispatch( - new DatabaseRefreshed + new DatabaseRefreshed($database, $this->needsSeeding()) ); } diff --git a/core/vendor/illuminate/database/Console/Migrations/MigrateCommand.php b/core/vendor/illuminate/database/Console/Migrations/MigrateCommand.php index 66a556186b..d7a8c9e35a 100644 --- a/core/vendor/illuminate/database/Console/Migrations/MigrateCommand.php +++ b/core/vendor/illuminate/database/Console/Migrations/MigrateCommand.php @@ -12,6 +12,8 @@ use PDOException; use Throwable; +use function Laravel\Prompts\confirm; + class MigrateCommand extends BaseCommand implements Isolatable { use ConfirmableTrait; @@ -84,11 +86,11 @@ public function handle() // Next, we will check to see if a path option has been defined. If it has // we will use the path relative to the root of this installation folder // so that migrations may be run for any path within the applications. - $migrations = $this->migrator->setOutput($this->output) - ->run($this->getMigrationPaths(), [ - 'pretend' => $this->option('pretend'), - 'step' => $this->option('step'), - ]); + $this->migrator->setOutput($this->output) + ->run($this->getMigrationPaths(), [ + 'pretend' => $this->option('pretend'), + 'step' => $this->option('step'), + ]); // Finally, if the "seed" option has been given, we will re-run the database // seed task to re-populate the database, which is convenient when adding @@ -175,7 +177,7 @@ protected function createMissingSqliteDatabase($path) $this->components->warn('The SQLite database does not exist: '.$path); - if (! $this->components->confirm('Would you like to create it?')) { + if (! confirm('Would you like to create it?', default: false)) { return false; } @@ -200,7 +202,7 @@ protected function createMissingMysqlDatabase($connection) if (! $this->option('force') && ! $this->option('no-interaction')) { $this->components->warn("The database '{$connection->getDatabaseName()}' does not exist on the '{$connection->getName()}' connection."); - if (! $this->components->confirm('Would you like to create it?')) { + if (! confirm('Would you like to create it?', default: false)) { return false; } } diff --git a/core/vendor/illuminate/database/Console/Migrations/MigrateMakeCommand.php b/core/vendor/illuminate/database/Console/Migrations/MigrateMakeCommand.php index ea6b340ffb..5983348361 100644 --- a/core/vendor/illuminate/database/Console/Migrations/MigrateMakeCommand.php +++ b/core/vendor/illuminate/database/Console/Migrations/MigrateMakeCommand.php @@ -103,7 +103,7 @@ public function handle() * @param string $name * @param string $table * @param bool $create - * @return string + * @return void */ protected function writeMigration($name, $table, $create) { @@ -138,7 +138,7 @@ protected function getMigrationPath() protected function promptForMissingArgumentsUsing() { return [ - 'name' => 'What should the migration be named?', + 'name' => ['What should the migration be named?', 'E.g. create_flights_table'], ]; } } diff --git a/core/vendor/illuminate/database/Console/Migrations/RefreshCommand.php b/core/vendor/illuminate/database/Console/Migrations/RefreshCommand.php index 2073cd9977..5dff6467ac 100644 --- a/core/vendor/illuminate/database/Console/Migrations/RefreshCommand.php +++ b/core/vendor/illuminate/database/Console/Migrations/RefreshCommand.php @@ -67,7 +67,7 @@ public function handle() if ($this->laravel->bound(Dispatcher::class)) { $this->laravel[Dispatcher::class]->dispatch( - new DatabaseRefreshed + new DatabaseRefreshed($database, $this->needsSeeding()) ); } diff --git a/core/vendor/illuminate/database/Console/Migrations/StatusCommand.php b/core/vendor/illuminate/database/Console/Migrations/StatusCommand.php index aa01f07823..2dc1241bf9 100644 --- a/core/vendor/illuminate/database/Console/Migrations/StatusCommand.php +++ b/core/vendor/illuminate/database/Console/Migrations/StatusCommand.php @@ -60,20 +60,24 @@ public function handle() $batches = $this->migrator->getRepository()->getMigrationBatches(); - if (count($migrations = $this->getStatusFor($ran, $batches)) > 0) { + $migrations = $this->getStatusFor($ran, $batches) + ->when($this->option('pending'), fn ($collection) => $collection->filter(function ($migration) { + return str($migration[1])->contains('Pending'); + })); + + if (count($migrations) > 0) { $this->newLine(); $this->components->twoColumnDetail('Migration name', 'Batch / Status'); $migrations - ->when($this->option('pending'), fn ($collection) => $collection->filter(function ($migration) { - return str($migration[1])->contains('Pending'); - })) ->each( fn ($migration) => $this->components->twoColumnDetail($migration[0], $migration[1]) ); $this->newLine(); + } elseif ($this->option('pending')) { + $this->components->info('No pending migrations'); } else { $this->components->info('No migrations found'); } diff --git a/core/vendor/illuminate/database/Console/PruneCommand.php b/core/vendor/illuminate/database/Console/PruneCommand.php index 7ea6cecdd3..5144247eef 100644 --- a/core/vendor/illuminate/database/Console/PruneCommand.php +++ b/core/vendor/illuminate/database/Console/PruneCommand.php @@ -7,6 +7,8 @@ use Illuminate\Database\Eloquent\MassPrunable; use Illuminate\Database\Eloquent\Prunable; use Illuminate\Database\Eloquent\SoftDeletes; +use Illuminate\Database\Events\ModelPruningFinished; +use Illuminate\Database\Events\ModelPruningStarting; use Illuminate\Database\Events\ModelsPruned; use Illuminate\Support\Str; use InvalidArgumentException; @@ -70,10 +72,14 @@ public function handle(Dispatcher $events) $this->components->twoColumnDetail($event->model, "{$event->count} records"); }); + $events->dispatch(new ModelPruningStarting($models->all())); + $models->each(function ($model) { $this->pruneModel($model); }); + $events->dispatch(new ModelPruningFinished($models->all())); + $events->forget(ModelsPruned::class); } diff --git a/core/vendor/illuminate/database/Console/TableCommand.php b/core/vendor/illuminate/database/Console/TableCommand.php index cae3db59b3..1a7407d579 100644 --- a/core/vendor/illuminate/database/Console/TableCommand.php +++ b/core/vendor/illuminate/database/Console/TableCommand.php @@ -10,6 +10,8 @@ use Illuminate\Support\Str; use Symfony\Component\Console\Attribute\AsCommand; +use function Laravel\Prompts\select; + #[AsCommand(name: 'db:table')] class TableCommand extends DatabaseInspectionCommand { @@ -47,7 +49,7 @@ public function handle(ConnectionResolverInterface $connections) $this->registerTypeMappings($connection->getDoctrineConnection()->getDatabasePlatform()); - $table = $this->argument('table') ?: $this->components->choice( + $table = $this->argument('table') ?: select( 'Which table would you like to inspect?', collect($schema->listTables())->flatMap(fn (Table $table) => [$table->getName()])->toArray() ); diff --git a/core/vendor/illuminate/database/DetectsLostConnections.php b/core/vendor/illuminate/database/DetectsLostConnections.php index a0af5f3c76..e63d2deb22 100644 --- a/core/vendor/illuminate/database/DetectsLostConnections.php +++ b/core/vendor/illuminate/database/DetectsLostConnections.php @@ -62,6 +62,10 @@ protected function causedByLostConnection(Throwable $e) 'SSL: Operation timed out', 'Reason: Server is in script upgrade mode. Only administrator can connect at this time.', 'Unknown $curl_error_code: 77', + 'SSL: Handshake timed out', + 'SQLSTATE[08006] [7] SSL error: sslv3 alert unexpected message', + 'SQLSTATE[08006] [7] unrecognized SSL error code:', + 'SQLSTATE[HY000] [2002] No connection could be made because the target machine actively refused it', ]); } } diff --git a/core/vendor/illuminate/database/Eloquent/Builder.php b/core/vendor/illuminate/database/Eloquent/Builder.php index 3f32ae5cae..02a5d60eef 100644 --- a/core/vendor/illuminate/database/Eloquent/Builder.php +++ b/core/vendor/illuminate/database/Eloquent/Builder.php @@ -14,6 +14,7 @@ use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Query\Builder as QueryBuilder; use Illuminate\Database\RecordsNotFoundException; +use Illuminate\Database\UniqueConstraintViolationException; use Illuminate\Pagination\Paginator; use Illuminate\Support\Arr; use Illuminate\Support\Str; @@ -96,9 +97,11 @@ class Builder implements BuilderContract 'avg', 'count', 'dd', + 'ddRawSql', 'doesntExist', 'doesntExistOr', 'dump', + 'dumpRawSql', 'exists', 'existsOr', 'explain', @@ -116,6 +119,7 @@ class Builder implements BuilderContract 'rawValue', 'sum', 'toSql', + 'toRawSql', ]; /** @@ -551,7 +555,7 @@ public function firstOrNew(array $attributes = [], array $values = []) } /** - * Get the first record matching the attributes or create it. + * Get the first record matching the attributes. If the record is not found, create it. * * @param array $attributes * @param array $values @@ -563,9 +567,23 @@ public function firstOrCreate(array $attributes = [], array $values = []) return $instance; } - return tap($this->newModelInstance(array_merge($attributes, $values)), function ($instance) { - $instance->save(); - }); + return $this->createOrFirst($attributes, $values); + } + + /** + * Attempt to create the record. If a unique constraint violation occurs, attempt to find the matching record. + * + * @param array $attributes + * @param array $values + * @return \Illuminate\Database\Eloquent\Model|static + */ + public function createOrFirst(array $attributes = [], array $values = []) + { + try { + return $this->withSavepointIfNeeded(fn () => $this->create(array_merge($attributes, $values))); + } catch (UniqueConstraintViolationException) { + return $this->useWritePdo()->where($attributes)->first(); + } } /** @@ -577,8 +595,10 @@ public function firstOrCreate(array $attributes = [], array $values = []) */ public function updateOrCreate(array $attributes, array $values = []) { - return tap($this->firstOrNew($attributes), function ($instance) use ($values) { - $instance->fill($values)->save(); + return tap($this->firstOrCreate($attributes, $values), function ($instance) use ($values) { + if (! $instance->wasRecentlyCreated) { + $instance->fill($values)->save(); + } }); } @@ -1136,10 +1156,21 @@ protected function addUpdatedAtColumn(array $values) $column = $this->model->getUpdatedAtColumn(); - $values = array_merge( - [$column => $this->model->freshTimestampString()], - $values - ); + if (! array_key_exists($column, $values)) { + $timestamp = $this->model->freshTimestampString(); + + if ( + $this->model->hasSetMutator($column) + || $this->model->hasAttributeSetMutator($column) + || $this->model->hasCast($column) + ) { + $timestamp = $this->model->newInstance() + ->forceFill([$column => $timestamp]) + ->getAttributes()[$column]; + } + + $values = array_merge([$column => $timestamp], $values); + } $segments = preg_split('/\s+as\s+/i', $this->query->from); @@ -1680,6 +1711,21 @@ public function withCasts($casts) return $this; } + /** + * Execute the given Closure within a transaction savepoint if needed. + * + * @template TModelValue + * + * @param \Closure(): TModelValue $scope + * @return TModelValue + */ + public function withSavepointIfNeeded(Closure $scope): mixed + { + return $this->getQuery()->getConnection()->transactionLevel() > 0 + ? $this->getQuery()->getConnection()->transaction($scope) + : $scope(); + } + /** * Get the underlying query builder instance. * @@ -1976,8 +2022,6 @@ protected static function registerMixin($mixin, $replace) foreach ($methods as $method) { if ($replace || ! static::hasGlobalMacro($method->name)) { - $method->setAccessible(true); - static::macro($method->name, $method->invoke($mixin)); } } diff --git a/core/vendor/illuminate/database/Eloquent/Collection.php b/core/vendor/illuminate/database/Eloquent/Collection.php index 04cfbb0f27..f18b79c790 100644 --- a/core/vendor/illuminate/database/Eloquent/Collection.php +++ b/core/vendor/illuminate/database/Eloquent/Collection.php @@ -253,7 +253,7 @@ protected function loadMissingRelation(self $models, array $path) * Load a set of relationships onto the mixed relationship collection. * * @param string $relation - * @param array $relations + * @param array $relations * @return $this */ public function loadMorph($relation, $relations) @@ -270,7 +270,7 @@ public function loadMorph($relation, $relations) * Load a set of relationship counts onto the mixed relationship collection. * * @param string $relation - * @param array $relations + * @param array $relations * @return $this */ public function loadMorphCount($relation, $relations) @@ -475,6 +475,10 @@ public function only($keys) */ public function except($keys) { + if (is_null($keys)) { + return new static($this->items); + } + $dictionary = Arr::except($this->getDictionary(), array_map($this->getDictionaryKey(...), (array) $keys)); return new static(array_values($dictionary)); diff --git a/core/vendor/illuminate/database/Eloquent/Concerns/GuardsAttributes.php b/core/vendor/illuminate/database/Eloquent/Concerns/GuardsAttributes.php index bfb67754be..b7e0d7dea8 100644 --- a/core/vendor/illuminate/database/Eloquent/Concerns/GuardsAttributes.php +++ b/core/vendor/illuminate/database/Eloquent/Concerns/GuardsAttributes.php @@ -63,7 +63,7 @@ public function fillable(array $fillable) */ public function mergeFillable(array $fillable) { - $this->fillable = array_merge($this->fillable, $fillable); + $this->fillable = array_values(array_unique(array_merge($this->fillable, $fillable))); return $this; } @@ -101,7 +101,7 @@ public function guard(array $guarded) */ public function mergeGuarded(array $guarded) { - $this->guarded = array_merge($this->guarded, $guarded); + $this->guarded = array_values(array_unique(array_merge($this->guarded, $guarded))); return $this; } diff --git a/core/vendor/illuminate/database/Eloquent/Concerns/HasAttributes.php b/core/vendor/illuminate/database/Eloquent/Concerns/HasAttributes.php index 69d0e343de..4ef0f53140 100644 --- a/core/vendor/illuminate/database/Eloquent/Concerns/HasAttributes.php +++ b/core/vendor/illuminate/database/Eloquent/Concerns/HasAttributes.php @@ -803,16 +803,20 @@ protected function castAttribute($key, $value) */ protected function getClassCastableAttributeValue($key, $value) { - if (isset($this->classCastCache[$key])) { + $caster = $this->resolveCasterClass($key); + + $objectCachingDisabled = $caster->withoutObjectCaching ?? false; + + if (isset($this->classCastCache[$key]) && ! $objectCachingDisabled) { return $this->classCastCache[$key]; } else { - $caster = $this->resolveCasterClass($key); - $value = $caster instanceof CastsInboundAttributes ? $value : $caster->get($this, $key, $value, $this->attributes); - if ($caster instanceof CastsInboundAttributes || ! is_object($value)) { + if ($caster instanceof CastsInboundAttributes || + ! is_object($value) || + $objectCachingDisabled) { unset($this->classCastCache[$key]); } else { $this->classCastCache[$key] = $value; @@ -1134,7 +1138,9 @@ protected function setClassCastableAttribute($key, $value) )) ); - if ($caster instanceof CastsInboundAttributes || ! is_object($value)) { + if ($caster instanceof CastsInboundAttributes || + ! is_object($value) || + ($caster->withoutObjectCaching ?? false)) { unset($this->classCastCache[$key]); } else { $this->classCastCache[$key] = $value; @@ -2119,9 +2125,9 @@ protected function transformModelValue($key, $value) */ public function append($attributes) { - $this->appends = array_unique( + $this->appends = array_values(array_unique( array_merge($this->appends, is_string($attributes) ? func_get_args() : $attributes) - ); + )); return $this; } @@ -2227,8 +2233,6 @@ protected static function getAttributeMarkedMutatorMethods($class) if ($returnType instanceof ReflectionNamedType && $returnType->getName() === Attribute::class) { - $method->setAccessible(true); - if (is_callable($method->invoke($instance)->get)) { return true; } diff --git a/core/vendor/illuminate/database/Eloquent/Concerns/HasUniqueIds.php b/core/vendor/illuminate/database/Eloquent/Concerns/HasUniqueIds.php index 8d769b2829..5392ca0958 100644 --- a/core/vendor/illuminate/database/Eloquent/Concerns/HasUniqueIds.php +++ b/core/vendor/illuminate/database/Eloquent/Concerns/HasUniqueIds.php @@ -22,7 +22,7 @@ public function usesUniqueIds() } /** - * Generate a unique keys for model. + * Generate unique keys for the model. * * @return void */ diff --git a/core/vendor/illuminate/database/Eloquent/Factories/Factory.php b/core/vendor/illuminate/database/Eloquent/Factories/Factory.php index 191e8d3d11..d9a453359d 100644 --- a/core/vendor/illuminate/database/Eloquent/Factories/Factory.php +++ b/core/vendor/illuminate/database/Eloquent/Factories/Factory.php @@ -104,7 +104,7 @@ abstract class Factory * * @var string */ - protected static $namespace = 'Database\\Factories\\'; + public static $namespace = 'Database\\Factories\\'; /** * The default model name resolver. @@ -185,7 +185,7 @@ public static function times(int $count) /** * Configure the factory. * - * @return $this + * @return static */ public function configure() { @@ -235,11 +235,19 @@ public function createOneQuietly($attributes = []) /** * Create a collection of models and persist them to the database. * - * @param iterable> $records + * @param int|null|iterable> $records * @return \Illuminate\Database\Eloquent\Collection */ - public function createMany(iterable $records) + public function createMany(int|iterable|null $records = null) { + if (is_null($records)) { + $records = $this->count ?? 1; + } + + if (is_numeric($records)) { + $records = array_fill(0, $records, []); + } + return new EloquentCollection( collect($records)->map(function ($record) { return $this->state($record)->create(); @@ -250,10 +258,10 @@ public function createMany(iterable $records) /** * Create a collection of models and persist them to the database without dispatching any model events. * - * @param iterable> $records + * @param int|null|iterable> $records * @return \Illuminate\Database\Eloquent\Collection */ - public function createManyQuietly(iterable $records) + public function createManyQuietly(int|iterable|null $records = null) { return Model::withoutEvents(function () use ($records) { return $this->createMany($records); diff --git a/core/vendor/illuminate/database/Eloquent/Model.php b/core/vendor/illuminate/database/Eloquent/Model.php index ef5e1faabc..393e49a515 100644 --- a/core/vendor/illuminate/database/Eloquent/Model.php +++ b/core/vendor/illuminate/database/Eloquent/Model.php @@ -746,7 +746,7 @@ public function loadMissing($relations) * * @param array|string $relations * @param string $column - * @param string $function + * @param string|null $function * @return $this */ public function loadAggregate($relations, $column, $function = null) @@ -834,7 +834,7 @@ public function loadExists($relations) * @param string $relation * @param array $relations * @param string $column - * @param string $function + * @param string|null $function * @return $this */ public function loadMorphAggregate($relation, $relations, $column, $function = null) @@ -951,10 +951,8 @@ protected function decrement($column, $amount = 1, array $extra = []) */ protected function incrementOrDecrement($column, $amount, $extra, $method) { - $query = $this->newQueryWithoutRelationships(); - if (! $this->exists) { - return $query->{$method}($column, $amount, $extra); + return $this->newQueryWithoutRelationships()->{$method}($column, $amount, $extra); } $this->{$column} = $this->isClassDeviable($column) @@ -967,7 +965,7 @@ protected function incrementOrDecrement($column, $amount, $extra, $method) return false; } - return tap($this->setKeysForSaveQuery($query)->{$method}($column, $amount, $extra), function () use ($column) { + return tap($this->setKeysForSaveQuery($this->newQueryWithoutScopes())->{$method}($column, $amount, $extra), function () use ($column) { $this->syncChanges(); $this->fireModelEvent('updated', false); @@ -1823,7 +1821,7 @@ public static function resolveConnection($connection = null) /** * Get the connection resolver instance. * - * @return \Illuminate\Database\ConnectionResolverInterface + * @return \Illuminate\Database\ConnectionResolverInterface|null */ public static function getConnectionResolver() { @@ -2319,7 +2317,7 @@ public function __unset($key) */ public function __call($method, $parameters) { - if (in_array($method, ['increment', 'decrement'])) { + if (in_array($method, ['increment', 'decrement', 'incrementQuietly', 'decrementQuietly'])) { return $this->$method(...$parameters); } diff --git a/core/vendor/illuminate/database/Eloquent/Relations/BelongsTo.php b/core/vendor/illuminate/database/Eloquent/Relations/BelongsTo.php index d7bfa0f60a..f2ecbb3bf0 100644 --- a/core/vendor/illuminate/database/Eloquent/Relations/BelongsTo.php +++ b/core/vendor/illuminate/database/Eloquent/Relations/BelongsTo.php @@ -74,7 +74,7 @@ public function __construct(Builder $query, Model $child, $foreignKey, $ownerKey */ public function getResults() { - if (is_null($this->child->{$this->foreignKey})) { + if (is_null($this->getForeignKeyFrom($this->child))) { return $this->getDefaultFor($this->parent); } @@ -94,7 +94,7 @@ public function addConstraints() // of the related models matching on the foreign key that's on a parent. $table = $this->related->getTable(); - $this->query->where($table.'.'.$this->ownerKey, '=', $this->child->{$this->foreignKey}); + $this->query->where($table.'.'.$this->ownerKey, '=', $this->getForeignKeyFrom($this->child)); } } @@ -130,7 +130,7 @@ protected function getEagerModelKeys(array $models) // to query for via the eager loading query. We will add them to an array then // execute a "where in" statement to gather up all of those related records. foreach ($models as $model) { - if (! is_null($value = $model->{$this->foreignKey})) { + if (! is_null($value = $this->getForeignKeyFrom($model))) { $keys[] = $value; } } @@ -337,7 +337,7 @@ public function getQualifiedForeignKeyName() */ public function getParentKey() { - return $this->child->{$this->foreignKey}; + return $this->getForeignKeyFrom($this->child); } /** @@ -371,6 +371,17 @@ protected function getRelatedKeyFrom(Model $model) return $model->{$this->ownerKey}; } + /** + * Get the value of the model's foreign key. + * + * @param \Illuminate\Database\Eloquent\Model $model + * @return mixed + */ + protected function getForeignKeyFrom(Model $model) + { + return $model->{$this->foreignKey}; + } + /** * Get the name of the relationship. * diff --git a/core/vendor/illuminate/database/Eloquent/Relations/BelongsToMany.php b/core/vendor/illuminate/database/Eloquent/Relations/BelongsToMany.php index a6422b6855..b2e4944782 100644 --- a/core/vendor/illuminate/database/Eloquent/Relations/BelongsToMany.php +++ b/core/vendor/illuminate/database/Eloquent/Relations/BelongsToMany.php @@ -11,6 +11,7 @@ use Illuminate\Database\Eloquent\Relations\Concerns\AsPivot; use Illuminate\Database\Eloquent\Relations\Concerns\InteractsWithDictionary; use Illuminate\Database\Eloquent\Relations\Concerns\InteractsWithPivotTable; +use Illuminate\Database\UniqueConstraintViolationException; use Illuminate\Support\Str; use InvalidArgumentException; @@ -609,7 +610,7 @@ public function firstOrNew(array $attributes = [], array $values = []) } /** - * Get the first related record matching the attributes or create it. + * Get the first record matching the attributes. If the record is not found, create it. * * @param array $attributes * @param array $values @@ -621,15 +622,45 @@ public function firstOrCreate(array $attributes = [], array $values = [], array { if (is_null($instance = (clone $this)->where($attributes)->first())) { if (is_null($instance = $this->related->where($attributes)->first())) { - $instance = $this->create(array_merge($attributes, $values), $joining, $touch); + $instance = $this->createOrFirst($attributes, $values, $joining, $touch); } else { - $this->attach($instance, $joining, $touch); + try { + $this->getQuery()->withSavepointIfNeeded(fn () => $this->attach($instance, $joining, $touch)); + } catch (UniqueConstraintViolationException) { + // Nothing to do, the model was already attached... + } } } return $instance; } + /** + * Attempt to create the record. If a unique constraint violation occurs, attempt to find the matching record. + * + * @param array $attributes + * @param array $values + * @param array $joining + * @param bool $touch + * @return \Illuminate\Database\Eloquent\Model + */ + public function createOrFirst(array $attributes = [], array $values = [], array $joining = [], $touch = true) + { + try { + return $this->getQuery()->withSavePointIfNeeded(fn () => $this->create(array_merge($attributes, $values), $joining, $touch)); + } catch (UniqueConstraintViolationException $exception) { + // ... + } + + try { + return tap($this->related->where($attributes)->first(), function ($instance) use ($joining, $touch) { + $this->getQuery()->withSavepointIfNeeded(fn () => $this->attach($instance, $joining, $touch)); + }); + } catch (UniqueConstraintViolationException) { + return (clone $this)->useWritePdo()->where($attributes)->first(); + } + } + /** * Create or update a related record matching the attributes, and fill it with values. * diff --git a/core/vendor/illuminate/database/Eloquent/Relations/HasManyThrough.php b/core/vendor/illuminate/database/Eloquent/Relations/HasManyThrough.php index 1514274ce3..ac50371857 100644 --- a/core/vendor/illuminate/database/Eloquent/Relations/HasManyThrough.php +++ b/core/vendor/illuminate/database/Eloquent/Relations/HasManyThrough.php @@ -566,6 +566,24 @@ public function chunkById($count, callable $callback, $column = null, $alias = n return $this->prepareQueryBuilder()->chunkById($count, $callback, $column, $alias); } + /** + * Execute a callback over each item while chunking by ID. + * + * @param callable $callback + * @param int $count + * @param string|null $column + * @param string|null $alias + * @return bool + */ + public function eachById(callable $callback, $count = 1000, $column = null, $alias = null) + { + $column = $column ?? $this->getRelated()->getQualifiedKeyName(); + + $alias = $alias ?? $this->getRelated()->getKeyName(); + + return $this->prepareQueryBuilder()->eachById($callback, $count, $column, $alias); + } + /** * Get a generator for the given query. * diff --git a/core/vendor/illuminate/database/Eloquent/Relations/HasOneOrMany.php b/core/vendor/illuminate/database/Eloquent/Relations/HasOneOrMany.php index 488d966ef1..c748dd7c64 100644 --- a/core/vendor/illuminate/database/Eloquent/Relations/HasOneOrMany.php +++ b/core/vendor/illuminate/database/Eloquent/Relations/HasOneOrMany.php @@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Collection; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\Concerns\InteractsWithDictionary; +use Illuminate\Database\UniqueConstraintViolationException; abstract class HasOneOrMany extends Relation { @@ -226,7 +227,7 @@ public function firstOrNew(array $attributes = [], array $values = []) } /** - * Get the first related record matching the attributes or create it. + * Get the first record matching the attributes. If the record is not found, create it. * * @param array $attributes * @param array $values @@ -235,12 +236,28 @@ public function firstOrNew(array $attributes = [], array $values = []) public function firstOrCreate(array $attributes = [], array $values = []) { if (is_null($instance = $this->where($attributes)->first())) { - $instance = $this->create(array_merge($attributes, $values)); + $instance = $this->createOrFirst($attributes, $values); } return $instance; } + /** + * Attempt to create the record. If a unique constraint violation occurs, attempt to find the matching record. + * + * @param array $attributes + * @param array $values + * @return \Illuminate\Database\Eloquent\Model + */ + public function createOrFirst(array $attributes = [], array $values = []) + { + try { + return $this->getQuery()->withSavepointIfNeeded(fn () => $this->create(array_merge($attributes, $values))); + } catch (UniqueConstraintViolationException) { + return $this->useWritePdo()->where($attributes)->first(); + } + } + /** * Create or update a related record matching the attributes, and fill it with values. * diff --git a/core/vendor/illuminate/database/Eloquent/Relations/MorphOneOrMany.php b/core/vendor/illuminate/database/Eloquent/Relations/MorphOneOrMany.php index 6e2297fcc8..3cfec89554 100644 --- a/core/vendor/illuminate/database/Eloquent/Relations/MorphOneOrMany.php +++ b/core/vendor/illuminate/database/Eloquent/Relations/MorphOneOrMany.php @@ -67,6 +67,20 @@ public function addEagerConstraints(array $models) $this->getRelationQuery()->where($this->morphType, $this->morphClass); } + /** + * Create a new instance of the related model. Allow mass-assignment. + * + * @param array $attributes + * @return \Illuminate\Database\Eloquent\Model + */ + public function forceCreate(array $attributes = []) + { + $attributes[$this->getForeignKeyName()] = $this->getParentKey(); + $attributes[$this->getMorphType()] = $this->morphClass; + + return $this->related->forceCreate($attributes); + } + /** * Set the foreign ID and type for creating a related model. * diff --git a/core/vendor/illuminate/database/Eloquent/Relations/MorphTo.php b/core/vendor/illuminate/database/Eloquent/Relations/MorphTo.php index 4dd8059d07..15de0bfe56 100644 --- a/core/vendor/illuminate/database/Eloquent/Relations/MorphTo.php +++ b/core/vendor/illuminate/database/Eloquent/Relations/MorphTo.php @@ -350,6 +350,57 @@ public function constrain(array $callbacks) return $this; } + /** + * Indicate that soft deleted models should be included in the results. + * + * @return $this + */ + public function withTrashed() + { + $callback = fn ($query) => $query->hasMacro('withTrashed') ? $query->withTrashed() : $query; + + $this->macroBuffer[] = [ + 'method' => 'when', + 'parameters' => [true, $callback], + ]; + + return $this->when(true, $callback); + } + + /** + * Indicate that soft deleted models should not be included in the results. + * + * @return $this + */ + public function withoutTrashed() + { + $callback = fn ($query) => $query->hasMacro('withoutTrashed') ? $query->withoutTrashed() : $query; + + $this->macroBuffer[] = [ + 'method' => 'when', + 'parameters' => [true, $callback], + ]; + + return $this->when(true, $callback); + } + + /** + * Indicate that only soft deleted models should be included in the results. + * + * @return $this + */ + public function onlyTrashed() + { + $callback = fn ($query) => $query->hasMacro('onlyTrashed') ? $query->onlyTrashed() : $query; + + $this->macroBuffer[] = [ + 'method' => 'when', + 'parameters' => [true, $callback], + ]; + + return $this->when(true, $callback); + } + /** * Replay stored macro calls on the actual related instance. * diff --git a/core/vendor/illuminate/database/Eloquent/SoftDeletingScope.php b/core/vendor/illuminate/database/Eloquent/SoftDeletingScope.php index e6d91d9178..f0b0bd4179 100644 --- a/core/vendor/illuminate/database/Eloquent/SoftDeletingScope.php +++ b/core/vendor/illuminate/database/Eloquent/SoftDeletingScope.php @@ -9,7 +9,7 @@ class SoftDeletingScope implements Scope * * @var string[] */ - protected $extensions = ['Restore', 'RestoreOrCreate', 'WithTrashed', 'WithoutTrashed', 'OnlyTrashed']; + protected $extensions = ['Restore', 'RestoreOrCreate', 'CreateOrRestore', 'WithTrashed', 'WithoutTrashed', 'OnlyTrashed']; /** * Apply the scope to a given Eloquent query builder. @@ -91,6 +91,23 @@ protected function addRestoreOrCreate(Builder $builder) }); } + /** + * Add the create-or-restore extension to the builder. + * + * @param \Illuminate\Database\Eloquent\Builder $builder + * @return void + */ + protected function addCreateOrRestore(Builder $builder) + { + $builder->macro('createOrRestore', function (Builder $builder, array $attributes = [], array $values = []) { + $builder->withTrashed(); + + return tap($builder->createOrFirst($attributes, $values), function ($instance) { + $instance->restore(); + }); + }); + } + /** * Add the with-trashed extension to the builder. * diff --git a/core/vendor/illuminate/database/Events/DatabaseRefreshed.php b/core/vendor/illuminate/database/Events/DatabaseRefreshed.php index 5b1fb45856..f476c39e43 100644 --- a/core/vendor/illuminate/database/Events/DatabaseRefreshed.php +++ b/core/vendor/illuminate/database/Events/DatabaseRefreshed.php @@ -6,5 +6,17 @@ class DatabaseRefreshed implements MigrationEventContract { - // + /** + * Create a new event instance. + * + * @param string|null $database + * @param bool seeding + * @return void + */ + public function __construct( + public ?string $database = null, + public bool $seeding = false + ) { + // + } } diff --git a/core/vendor/illuminate/database/Events/ModelPruningFinished.php b/core/vendor/illuminate/database/Events/ModelPruningFinished.php new file mode 100644 index 0000000000..d2701c4743 --- /dev/null +++ b/core/vendor/illuminate/database/Events/ModelPruningFinished.php @@ -0,0 +1,24 @@ + + */ + public $models; + + /** + * Create a new event instance. + * + * @param array $models + * @return void + */ + public function __construct($models) + { + $this->models = $models; + } +} diff --git a/core/vendor/illuminate/database/Events/ModelPruningStarting.php b/core/vendor/illuminate/database/Events/ModelPruningStarting.php new file mode 100644 index 0000000000..e6cc4d8426 --- /dev/null +++ b/core/vendor/illuminate/database/Events/ModelPruningStarting.php @@ -0,0 +1,24 @@ + + */ + public $models; + + /** + * Create a new event instance. + * + * @param array $models + * @return void + */ + public function __construct($models) + { + $this->models = $models; + } +} diff --git a/core/vendor/illuminate/database/MySqlConnection.php b/core/vendor/illuminate/database/MySqlConnection.php index 2f87b16f5a..460a4fd375 100644 --- a/core/vendor/illuminate/database/MySqlConnection.php +++ b/core/vendor/illuminate/database/MySqlConnection.php @@ -2,6 +2,7 @@ namespace Illuminate\Database; +use Exception; use Illuminate\Database\PDO\MySqlDriver; use Illuminate\Database\Query\Grammars\MySqlGrammar as QueryGrammar; use Illuminate\Database\Query\Processors\MySqlProcessor; @@ -26,6 +27,17 @@ protected function escapeBinary($value) return "x'{$hex}'"; } + /** + * Determine if the given database exception was caused by a unique constraint violation. + * + * @param \Exception $exception + * @return bool + */ + protected function isUniqueConstraintError(Exception $exception) + { + return boolval(preg_match('#Integrity constraint violation: 1062#i', $exception->getMessage())); + } + /** * Determine if the connected database is a MariaDB database. * diff --git a/core/vendor/illuminate/database/PostgresConnection.php b/core/vendor/illuminate/database/PostgresConnection.php index a03b29e3be..c3e22a9288 100644 --- a/core/vendor/illuminate/database/PostgresConnection.php +++ b/core/vendor/illuminate/database/PostgresConnection.php @@ -2,6 +2,7 @@ namespace Illuminate\Database; +use Exception; use Illuminate\Database\PDO\PostgresDriver; use Illuminate\Database\Query\Grammars\PostgresGrammar as QueryGrammar; use Illuminate\Database\Query\Processors\PostgresProcessor; @@ -36,6 +37,17 @@ protected function escapeBool($value) return $value ? 'true' : 'false'; } + /** + * Determine if the given database exception was caused by a unique constraint violation. + * + * @param \Exception $exception + * @return bool + */ + protected function isUniqueConstraintError(Exception $exception) + { + return '23505' === $exception->getCode(); + } + /** * Get the default query grammar instance. * diff --git a/core/vendor/illuminate/database/Query/Builder.php b/core/vendor/illuminate/database/Query/Builder.php index 0d05df42d8..9f756c4811 100644 --- a/core/vendor/illuminate/database/Query/Builder.php +++ b/core/vendor/illuminate/database/Query/Builder.php @@ -7,6 +7,7 @@ use Closure; use DateTimeInterface; use Illuminate\Contracts\Database\Query\Builder as BuilderContract; +use Illuminate\Contracts\Database\Query\ConditionExpression; use Illuminate\Contracts\Database\Query\Expression as ExpressionContract; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Database\Concerns\BuildsQueries; @@ -753,6 +754,14 @@ public function mergeWheres($wheres, $bindings) */ public function where($column, $operator = null, $value = null, $boolean = 'and') { + if ($column instanceof ConditionExpression) { + $type = 'Expression'; + + $this->wheres[] = compact('type', 'column', 'boolean'); + + return $this; + } + // If the column is an array, we will assume it is an array of key-value pairs // and can add them each as a where clause. We will maintain the boolean we // received when the method was called and pass it into the nested where. @@ -794,7 +803,7 @@ public function where($column, $operator = null, $value = null, $boolean = 'and' // If the value is a Closure, it means the developer is performing an entire // sub-select within the query and we will need to compile the sub-select // within the where clause to get the appropriate query record results. - if ($value instanceof Closure) { + if ($this->isQueryable($value)) { return $this->whereSub($column, $operator, $value, $boolean); } @@ -1649,18 +1658,22 @@ public function addNestedWhereQuery($query, $boolean = 'and') * * @param \Illuminate\Contracts\Database\Query\Expression|string $column * @param string $operator - * @param \Closure $callback + * @param \Closure||\Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder $callback * @param string $boolean * @return $this */ - protected function whereSub($column, $operator, Closure $callback, $boolean) + protected function whereSub($column, $operator, $callback, $boolean) { $type = 'Sub'; - // Once we have the query instance we can simply execute it so it can add all - // of the sub-select's conditions to itself, and then we can cache it off - // in the array of where clauses for the "main" parent query instance. - $callback($query = $this->forSubQuery()); + if ($callback instanceof Closure) { + // Once we have the query instance we can simply execute it so it can add all + // of the sub-select's conditions to itself, and then we can cache it off + // in the array of where clauses for the "main" parent query instance. + $callback($query = $this->forSubQuery()); + } else { + $query = $callback instanceof EloquentBuilder ? $callback->toBase() : $callback; + } $this->wheres[] = compact( 'type', 'column', 'operator', 'query', 'boolean' @@ -2073,7 +2086,7 @@ public function groupByRaw($sql, array $bindings = []) /** * Add a "having" clause to the query. * - * @param \Closure|string $column + * @param \Illuminate\Contracts\Database\Query\Expression|\Closure|string $column * @param string|int|float|null $operator * @param string|int|float|null $value * @param string $boolean @@ -2083,6 +2096,14 @@ public function having($column, $operator = null, $value = null, $boolean = 'and { $type = 'Basic'; + if ($column instanceof ConditionExpression) { + $type = 'Expression'; + + $this->havings[] = compact('type', 'column', 'boolean'); + + return $this; + } + // Here we will make some assumptions about the operator. If only 2 values are // passed to the method, we will assume that the operator is an equals sign // and keep going. Otherwise, we'll require the operator to be passed in. @@ -2117,7 +2138,7 @@ public function having($column, $operator = null, $value = null, $boolean = 'and /** * Add an "or having" clause to the query. * - * @param \Closure|string $column + * @param \Illuminate\Contracts\Database\Query\Expression|\Closure|string $column * @param string|int|float|null $operator * @param string|int|float|null $value * @return $this @@ -2617,6 +2638,18 @@ public function toSql() return $this->grammar->compileSelect($this); } + /** + * Get the raw SQL representation of the query with embedded bindings. + * + * @return string + */ + public function toRawSql() + { + return $this->grammar->substituteBindingsIntoRawSql( + $this->toSql(), $this->connection->prepareBindings($this->getBindings()) + ); + } + /** * Execute a query for a single record by ID. * @@ -3880,6 +3913,18 @@ public function dump() return $this; } + /** + * Dump the raw current SQL with embedded bindings. + * + * @return $this + */ + public function dumpRawSql() + { + dump($this->toRawSql()); + + return $this; + } + /** * Die and dump the current SQL and bindings. * @@ -3890,6 +3935,16 @@ public function dd() dd($this->toSql(), $this->getBindings()); } + /** + * Die and dump the current SQL with embedded bindings. + * + * @return never + */ + public function ddRawSql() + { + dd($this->toRawSql()); + } + /** * Handle dynamic method calls into the method. * diff --git a/core/vendor/illuminate/database/Query/Grammars/Grammar.php b/core/vendor/illuminate/database/Query/Grammars/Grammar.php index 1eb994a0d7..5419ad07fb 100644 --- a/core/vendor/illuminate/database/Query/Grammars/Grammar.php +++ b/core/vendor/illuminate/database/Query/Grammars/Grammar.php @@ -706,6 +706,18 @@ public function whereFullText(Builder $query, $where) throw new RuntimeException('This database engine does not support fulltext search operations.'); } + /** + * Compile a clause based on an expression. + * + * @param \Illuminate\Database\Query\Builder $query + * @param array $where + * @return string + */ + public function whereExpression(Builder $query, $where) + { + return $where['column']->getValue($this); + } + /** * Compile the "group by" portions of the query. * @@ -742,21 +754,16 @@ protected function compileHaving(array $having) // If the having clause is "raw", we can just return the clause straight away // without doing any more processing on it. Otherwise, we will compile the // clause into SQL based on the components that make it up from builder. - if ($having['type'] === 'Raw') { - return $having['sql']; - } elseif ($having['type'] === 'between') { - return $this->compileHavingBetween($having); - } elseif ($having['type'] === 'Null') { - return $this->compileHavingNull($having); - } elseif ($having['type'] === 'NotNull') { - return $this->compileHavingNotNull($having); - } elseif ($having['type'] === 'bit') { - return $this->compileHavingBit($having); - } elseif ($having['type'] === 'Nested') { - return $this->compileNestedHavings($having); - } - - return $this->compileBasicHaving($having); + return match ($having['type']) { + 'Raw' => $having['sql'], + 'between' => $this->compileHavingBetween($having), + 'Null' => $this->compileHavingNull($having), + 'NotNull' => $this->compileHavingNotNull($having), + 'bit' => $this->compileHavingBit($having), + 'Expression' => $this->compileHavingExpression($having), + 'Nested' => $this->compileNestedHavings($having), + default => $this->compileBasicHaving($having), + }; } /** @@ -834,6 +841,17 @@ protected function compileHavingBit($having) return '('.$column.' '.$having['operator'].' '.$parameter.') != 0'; } + /** + * Compile a having clause involving an expression. + * + * @param array $having + * @return string + */ + protected function compileHavingExpression($having) + { + return $having['column']->getValue($this); + } + /** * Compile a nested having clause. * @@ -1332,6 +1350,44 @@ protected function removeLeadingBoolean($value) return preg_replace('/and |or /i', '', $value, 1); } + /** + * Substitute the given bindings into the given raw SQL query. + * + * @param string $sql + * @param array $bindings + * @return string + */ + public function substituteBindingsIntoRawSql($sql, $bindings) + { + $bindings = array_map(fn ($value) => $this->escape($value), $bindings); + + $query = ''; + + $isStringLiteral = false; + + for ($i = 0; $i < strlen($sql); $i++) { + $char = $sql[$i]; + $nextChar = $sql[$i + 1] ?? null; + + // Single quotes can be escaped as '' according to the SQL standard while + // MySQL uses \'. Postgres has operators like ?| that must get encoded + // in PHP like ??|. We should skip over the escaped characters here. + if (in_array($char.$nextChar, ["\'", "''", '??'])) { + $query .= $char.$nextChar; + $i += 1; + } elseif ($char === "'") { // Starting / leaving string literal... + $query .= $char; + $isStringLiteral = ! $isStringLiteral; + } elseif ($char === '?' && ! $isStringLiteral) { // Substitutable binding... + $query .= array_shift($bindings) ?? '?'; + } else { // Normal character... + $query .= $char; + } + } + + return $query; + } + /** * Get the grammar specific operators. * diff --git a/core/vendor/illuminate/database/Query/Grammars/PostgresGrammar.php b/core/vendor/illuminate/database/Query/Grammars/PostgresGrammar.php index ad4678b0c9..b1786e5111 100644 --- a/core/vendor/illuminate/database/Query/Grammars/PostgresGrammar.php +++ b/core/vendor/illuminate/database/Query/Grammars/PostgresGrammar.php @@ -698,4 +698,26 @@ protected function parseJsonPathArrayKeys($attribute) return [$attribute]; } + + /** + * Substitute the given bindings into the given raw SQL query. + * + * @param string $sql + * @param array $bindings + * @return string + */ + public function substituteBindingsIntoRawSql($sql, $bindings) + { + $query = parent::substituteBindingsIntoRawSql($sql, $bindings); + + foreach ($this->operators as $operator) { + if (! str_contains($operator, '?')) { + continue; + } + + $query = str_replace(str_replace('?', '??', $operator), $operator, $query); + } + + return $query; + } } diff --git a/core/vendor/illuminate/database/Query/Grammars/SqlServerGrammar.php b/core/vendor/illuminate/database/Query/Grammars/SqlServerGrammar.php index 9de923e091..f68722a64b 100644 --- a/core/vendor/illuminate/database/Query/Grammars/SqlServerGrammar.php +++ b/core/vendor/illuminate/database/Query/Grammars/SqlServerGrammar.php @@ -266,38 +266,6 @@ protected function compileHavingBitwise($having) return '('.$column.' '.$having['operator'].' '.$parameter.') != 0'; } - /** - * Move the order bindings to be after the "select" statement to account for an order by subquery. - * - * @param \Illuminate\Database\Query\Builder $query - * @return array - */ - protected function sortBindingsForSubqueryOrderBy($query) - { - return Arr::sort($query->bindings, function ($bindings, $key) { - return array_search($key, ['select', 'order', 'from', 'join', 'where', 'groupBy', 'having', 'union', 'unionOrder']); - }); - } - - /** - * Compile the limit / offset row constraint for a query. - * - * @param \Illuminate\Database\Query\Builder $query - * @return string - */ - protected function compileRowConstraint($query) - { - $start = (int) $query->offset + 1; - - if ($query->limit > 0) { - $finish = (int) $query->offset + (int) $query->limit; - - return "between {$start} and {$finish}"; - } - - return ">= {$start}"; - } - /** * Compile a delete statement without joins into SQL. * diff --git a/core/vendor/illuminate/database/SQLiteConnection.php b/core/vendor/illuminate/database/SQLiteConnection.php index 6e9df07e97..ad7c1486d2 100644 --- a/core/vendor/illuminate/database/SQLiteConnection.php +++ b/core/vendor/illuminate/database/SQLiteConnection.php @@ -2,6 +2,7 @@ namespace Illuminate\Database; +use Exception; use Illuminate\Database\PDO\SQLiteDriver; use Illuminate\Database\Query\Grammars\SQLiteGrammar as QueryGrammar; use Illuminate\Database\Query\Processors\SQLiteProcessor; @@ -49,6 +50,17 @@ protected function escapeBinary($value) return "x'{$hex}'"; } + /** + * Determine if the given database exception was caused by a unique constraint violation. + * + * @param \Exception $exception + * @return bool + */ + protected function isUniqueConstraintError(Exception $exception) + { + return boolval(preg_match('#(column(s)? .* (is|are) not unique|UNIQUE constraint failed: .*)#i', $exception->getMessage())); + } + /** * Get the default query grammar instance. * diff --git a/core/vendor/illuminate/database/Schema/MySqlSchemaState.php b/core/vendor/illuminate/database/Schema/MySqlSchemaState.php index 0cd3486e60..2514c18bd6 100644 --- a/core/vendor/illuminate/database/Schema/MySqlSchemaState.php +++ b/core/vendor/illuminate/database/Schema/MySqlSchemaState.php @@ -53,7 +53,7 @@ protected function removeAutoIncrementingState(string $path) protected function appendMigrationData(string $path) { $process = $this->executeDumpProcess($this->makeProcess( - $this->baseDumpCommand().' '.$this->migrationTable.' --no-create-info --skip-extended-insert --skip-routines --compact' + $this->baseDumpCommand().' '.$this->migrationTable.' --no-create-info --skip-extended-insert --skip-routines --compact --complete-insert' ), null, array_merge($this->baseVariables($this->connection->getConfig()), [ // ])); diff --git a/core/vendor/illuminate/database/Schema/PostgresSchemaState.php b/core/vendor/illuminate/database/Schema/PostgresSchemaState.php index cfb100d0ca..b3f9361bc9 100644 --- a/core/vendor/illuminate/database/Schema/PostgresSchemaState.php +++ b/core/vendor/illuminate/database/Schema/PostgresSchemaState.php @@ -70,7 +70,7 @@ protected function baseVariables(array $config) return [ 'LARAVEL_LOAD_HOST' => is_array($config['host']) ? $config['host'][0] : $config['host'], - 'LARAVEL_LOAD_PORT' => $config['port'], + 'LARAVEL_LOAD_PORT' => $config['port'] ?? '', 'LARAVEL_LOAD_USER' => $config['username'], 'PGPASSWORD' => $config['password'], 'LARAVEL_LOAD_DATABASE' => $config['database'], diff --git a/core/vendor/illuminate/database/SqlServerConnection.php b/core/vendor/illuminate/database/SqlServerConnection.php index 57d2b20402..e376e6fa6c 100644 --- a/core/vendor/illuminate/database/SqlServerConnection.php +++ b/core/vendor/illuminate/database/SqlServerConnection.php @@ -3,6 +3,7 @@ namespace Illuminate\Database; use Closure; +use Exception; use Illuminate\Database\PDO\SqlServerDriver; use Illuminate\Database\Query\Grammars\SqlServerGrammar as QueryGrammar; use Illuminate\Database\Query\Processors\SqlServerProcessor; @@ -67,6 +68,17 @@ protected function escapeBinary($value) return "0x{$hex}"; } + /** + * Determine if the given database exception was caused by a unique constraint violation. + * + * @param \Exception $exception + * @return bool + */ + protected function isUniqueConstraintError(Exception $exception) + { + return boolval(preg_match('#Cannot insert duplicate key row in object#i', $exception->getMessage())); + } + /** * Get the default query grammar instance. * diff --git a/core/vendor/illuminate/database/UniqueConstraintViolationException.php b/core/vendor/illuminate/database/UniqueConstraintViolationException.php new file mode 100644 index 0000000000..13b705b77c --- /dev/null +++ b/core/vendor/illuminate/database/UniqueConstraintViolationException.php @@ -0,0 +1,7 @@ +createListenerAndJob($class, $method, $arguments); $connection = $this->resolveQueue()->connection(method_exists($listener, 'viaConnection') - ? (isset($arguments[0]) ? $listener->viaConnection($arguments[0]) : $listener->viaConnection()) - : $listener->connection ?? null); + ? (isset($arguments[0]) ? $listener->viaConnection($arguments[0]) : $listener->viaConnection()) + : $listener->connection ?? null); $queue = method_exists($listener, 'viaQueue') - ? (isset($arguments[0]) ? $listener->viaQueue($arguments[0]) : $listener->viaQueue()) - : $listener->queue ?? null; + ? (isset($arguments[0]) ? $listener->viaQueue($arguments[0]) : $listener->viaQueue()) + : $listener->queue ?? null; + + $delay = method_exists($listener, 'withDelay') + ? (isset($arguments[0]) ? $listener->withDelay($arguments[0]) : $listener->withDelay()) + : $listener->delay ?? null; - isset($listener->delay) - ? $connection->laterOn($queue, $listener->delay, $job) - : $connection->pushOn($queue, $job); + is_null($delay) + ? $connection->pushOn($queue, $job) + : $connection->laterOn($queue, $delay, $job); } /** diff --git a/core/vendor/illuminate/events/NullDispatcher.php b/core/vendor/illuminate/events/NullDispatcher.php index 3164fbb2a8..4b2d01119c 100644 --- a/core/vendor/illuminate/events/NullDispatcher.php +++ b/core/vendor/illuminate/events/NullDispatcher.php @@ -57,7 +57,7 @@ public function push($event, $payload = []) * * @param string|object $event * @param mixed $payload - * @return array|null + * @return mixed */ public function until($event, $payload = []) { diff --git a/core/vendor/illuminate/filesystem/FilesystemManager.php b/core/vendor/illuminate/filesystem/FilesystemManager.php index 0475c40e03..263ba3db04 100644 --- a/core/vendor/illuminate/filesystem/FilesystemManager.php +++ b/core/vendor/illuminate/filesystem/FilesystemManager.php @@ -86,7 +86,7 @@ public function disk($name = null) /** * Get a default cloud filesystem instance. * - * @return \Illuminate\Contracts\Filesystem\Filesystem + * @return \Illuminate\Contracts\Filesystem\Cloud */ public function cloud() { @@ -284,8 +284,14 @@ public function createScopedDriver(array $config) } return $this->build(tap( - $this->getConfig($config['disk']), - fn (&$parent) => $parent['prefix'] = $config['prefix'] + is_string($config['disk']) ? $this->getConfig($config['disk']) : $config['disk'], + function (&$parent) use ($config) { + $parent['prefix'] = $config['prefix']; + + if (isset($config['visibility'])) { + $parent['visibility'] = $config['visibility']; + } + } )); } diff --git a/core/vendor/illuminate/http/Client/Factory.php b/core/vendor/illuminate/http/Client/Factory.php index ab0c0c53a0..6c24ed4ea0 100644 --- a/core/vendor/illuminate/http/Client/Factory.php +++ b/core/vendor/illuminate/http/Client/Factory.php @@ -3,6 +3,7 @@ namespace Illuminate\Http\Client; use Closure; +use GuzzleHttp\Middleware; use GuzzleHttp\Promise\Create; use GuzzleHttp\Promise\PromiseInterface; use GuzzleHttp\Psr7\Response as Psr7Response; @@ -28,6 +29,13 @@ class Factory */ protected $dispatcher; + /** + * The middleware to apply to every request. + * + * @var array + */ + protected $globalMiddleware = []; + /** * The stub callables that will handle requests. * @@ -76,6 +84,45 @@ public function __construct(Dispatcher $dispatcher = null) $this->stubCallbacks = collect(); } + /** + * Add middleware to apply to every request. + * + * @param callable $middleware + * @return $this + */ + public function globalMiddleware($middleware) + { + $this->globalMiddleware[] = $middleware; + + return $this; + } + + /** + * Add request middleware to apply to every request. + * + * @param callable $middleware + * @return $this + */ + public function globalRequestMiddleware($middleware) + { + $this->globalMiddleware[] = Middleware::mapRequest($middleware); + + return $this; + } + + /** + * Add response middleware to apply to every request. + * + * @param callable $middleware + * @return $this + */ + public function globalResponseMiddleware($middleware) + { + $this->globalMiddleware[] = Middleware::mapResponse($middleware); + + return $this; + } + /** * Create a new response instance for use during stubbing. * @@ -353,7 +400,7 @@ public function recorded($callback = null) */ protected function newPendingRequest() { - return new PendingRequest($this); + return new PendingRequest($this, $this->globalMiddleware); } /** diff --git a/core/vendor/illuminate/http/Client/PendingRequest.php b/core/vendor/illuminate/http/Client/PendingRequest.php index ceb657736b..246ac95079 100644 --- a/core/vendor/illuminate/http/Client/PendingRequest.php +++ b/core/vendor/illuminate/http/Client/PendingRequest.php @@ -10,6 +10,7 @@ use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\TransferException; use GuzzleHttp\HandlerStack; +use GuzzleHttp\Middleware; use GuzzleHttp\UriTemplate\UriTemplate; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Http\Client\Events\ConnectionFailed; @@ -216,12 +217,13 @@ class PendingRequest * Create a new HTTP Client instance. * * @param \Illuminate\Http\Client\Factory|null $factory + * @param array $middleware * @return void */ - public function __construct(Factory $factory = null) + public function __construct(Factory $factory = null, $middleware = []) { $this->factory = $factory; - $this->middleware = new Collection; + $this->middleware = new Collection($middleware); $this->asJson(); @@ -344,6 +346,21 @@ public function bodyFormat(string $format) }); } + /** + * Set the given query parameters in the request URI. + * + * @param array $parameters + * @return $this + */ + public function withQueryParameters(array $parameters) + { + return tap($this, function () use ($parameters) { + $this->options = array_merge_recursive($this->options, [ + 'query' => $parameters, + ]); + }); + } + /** * Specify the request's content type. * @@ -393,6 +410,31 @@ public function withHeaders(array $headers) }); } + /** + * Add the given header to the request. + * + * @param string $name + * @param mixed $value + * @return $this + */ + public function withHeader($name, $value) + { + return $this->withHeaders([$name => $value]); + } + + /** + * Replace the given headers on the request. + * + * @param array $headers + * @return $this + */ + public function replaceHeaders(array $headers) + { + $this->options['headers'] = array_merge($this->options['headers'] ?? [], $headers); + + return $this; + } + /** * Specify the basic authentication username and password for the request. * @@ -601,6 +643,32 @@ public function withMiddleware(callable $middleware) return $this; } + /** + * Add new request middleware the client handler stack. + * + * @param callable $middleware + * @return $this + */ + public function withRequestMiddleware(callable $middleware) + { + $this->middleware->push(Middleware::mapRequest($middleware)); + + return $this; + } + + /** + * Add new response middleware the client handler stack. + * + * @param callable $middleware + * @return $this + */ + public function withResponseMiddleware(callable $middleware) + { + $this->middleware->push(Middleware::mapResponse($middleware)); + + return $this; + } + /** * Add a new "before sending" callback to the request. * @@ -776,7 +844,7 @@ public function delete(string $url, $data = []) * Send a pool of asynchronous requests concurrently. * * @param callable $callback - * @return array + * @return array */ public function pool(callable $callback) { @@ -1087,12 +1155,12 @@ public function pushHandlers($handlerStack) { return tap($handlerStack, function ($stack) { $stack->push($this->buildBeforeSendingHandler()); - $stack->push($this->buildRecorderHandler()); $this->middleware->each(function ($middleware) use ($stack) { $stack->push($middleware); }); + $stack->push($this->buildRecorderHandler()); $stack->push($this->buildStubHandler()); }); } diff --git a/core/vendor/illuminate/http/Client/Pool.php b/core/vendor/illuminate/http/Client/Pool.php index 7aed87f88a..0704df3322 100644 --- a/core/vendor/illuminate/http/Client/Pool.php +++ b/core/vendor/illuminate/http/Client/Pool.php @@ -78,7 +78,7 @@ public function getRequests() * * @param string $method * @param array $parameters - * @return \Illuminate\Http\Client\PendingRequest + * @return \Illuminate\Http\Client\PendingRequest|\GuzzleHttp\Promise\Promise */ public function __call($method, $parameters) { diff --git a/core/vendor/illuminate/http/Client/Request.php b/core/vendor/illuminate/http/Client/Request.php index 3c2d6a9bdb..b0e263700e 100644 --- a/core/vendor/illuminate/http/Client/Request.php +++ b/core/vendor/illuminate/http/Client/Request.php @@ -193,7 +193,7 @@ protected function parameters() protected function json() { if (! $this->data) { - $this->data = json_decode($this->body(), true); + $this->data = json_decode($this->body(), true) ?? []; } return $this->data; diff --git a/core/vendor/illuminate/http/JsonResponse.php b/core/vendor/illuminate/http/JsonResponse.php index 6e2f51dfa3..25006c3f65 100644 --- a/core/vendor/illuminate/http/JsonResponse.php +++ b/core/vendor/illuminate/http/JsonResponse.php @@ -16,7 +16,7 @@ class JsonResponse extends BaseJsonResponse } /** - * Constructor. + * Create a new JSON response instance. * * @param mixed $data * @param int $status @@ -77,15 +77,12 @@ public function setData($data = []): static // Ensure json_last_error() is cleared... json_decode('[]'); - if ($data instanceof Jsonable) { - $this->data = $data->toJson($this->encodingOptions); - } elseif ($data instanceof JsonSerializable) { - $this->data = json_encode($data->jsonSerialize(), $this->encodingOptions); - } elseif ($data instanceof Arrayable) { - $this->data = json_encode($data->toArray(), $this->encodingOptions); - } else { - $this->data = json_encode($data, $this->encodingOptions); - } + $this->data = match (true) { + $data instanceof Jsonable => $data->toJson($this->encodingOptions), + $data instanceof JsonSerializable => json_encode($data->jsonSerialize(), $this->encodingOptions), + $data instanceof Arrayable => json_encode($data->toArray(), $this->encodingOptions), + default => json_encode($data, $this->encodingOptions), + }; if (! $this->hasValidJson(json_last_error())) { throw new InvalidArgumentException(json_last_error_msg()); diff --git a/core/vendor/illuminate/http/Middleware/TrustProxies.php b/core/vendor/illuminate/http/Middleware/TrustProxies.php index faf5daf8db..81906c1f19 100644 --- a/core/vendor/illuminate/http/Middleware/TrustProxies.php +++ b/core/vendor/illuminate/http/Middleware/TrustProxies.php @@ -92,14 +92,18 @@ protected function setTrustedProxyIpAddressesToTheCallingIp(Request $request) */ protected function getTrustedHeaderNames() { + if (is_int($this->headers)) { + return $this->headers; + } + return match ($this->headers) { - 'HEADER_X_FORWARDED_AWS_ELB', Request::HEADER_X_FORWARDED_AWS_ELB => Request::HEADER_X_FORWARDED_AWS_ELB, - 'HEADER_FORWARDED', Request::HEADER_FORWARDED => Request::HEADER_FORWARDED, - 'HEADER_X_FORWARDED_FOR', Request::HEADER_X_FORWARDED_FOR => Request::HEADER_X_FORWARDED_FOR, - 'HEADER_X_FORWARDED_HOST', Request::HEADER_X_FORWARDED_HOST => Request::HEADER_X_FORWARDED_HOST, - 'HEADER_X_FORWARDED_PORT', Request::HEADER_X_FORWARDED_PORT => Request::HEADER_X_FORWARDED_PORT, - 'HEADER_X_FORWARDED_PROTO', Request::HEADER_X_FORWARDED_PROTO => Request::HEADER_X_FORWARDED_PROTO, - 'HEADER_X_FORWARDED_PREFIX', Request::HEADER_X_FORWARDED_PREFIX => Request::HEADER_X_FORWARDED_PREFIX, + 'HEADER_X_FORWARDED_AWS_ELB' => Request::HEADER_X_FORWARDED_AWS_ELB, + 'HEADER_FORWARDED' => Request::HEADER_FORWARDED, + 'HEADER_X_FORWARDED_FOR' => Request::HEADER_X_FORWARDED_FOR, + 'HEADER_X_FORWARDED_HOST' => Request::HEADER_X_FORWARDED_HOST, + 'HEADER_X_FORWARDED_PORT' => Request::HEADER_X_FORWARDED_PORT, + 'HEADER_X_FORWARDED_PROTO' => Request::HEADER_X_FORWARDED_PROTO, + 'HEADER_X_FORWARDED_PREFIX' => Request::HEADER_X_FORWARDED_PREFIX, default => Request::HEADER_X_FORWARDED_FOR | Request::HEADER_X_FORWARDED_HOST | Request::HEADER_X_FORWARDED_PORT | Request::HEADER_X_FORWARDED_PROTO | Request::HEADER_X_FORWARDED_PREFIX | Request::HEADER_X_FORWARDED_AWS_ELB, }; } diff --git a/core/vendor/illuminate/http/Request.php b/core/vendor/illuminate/http/Request.php index a0255fc898..f9112822ad 100644 --- a/core/vendor/illuminate/http/Request.php +++ b/core/vendor/illuminate/http/Request.php @@ -11,7 +11,7 @@ use Illuminate\Support\Traits\Macroable; use RuntimeException; use Symfony\Component\HttpFoundation\Exception\SessionNotFoundException; -use Symfony\Component\HttpFoundation\ParameterBag; +use Symfony\Component\HttpFoundation\InputBag; use Symfony\Component\HttpFoundation\Request as SymfonyRequest; use Symfony\Component\HttpFoundation\Session\SessionInterface; @@ -31,7 +31,7 @@ class Request extends SymfonyRequest implements Arrayable, ArrayAccess /** * The decoded JSON content for the request. * - * @var \Symfony\Component\HttpFoundation\ParameterBag|null + * @var \Symfony\Component\HttpFoundation\InputBag|null */ protected $json; @@ -398,12 +398,12 @@ public function get(string $key, mixed $default = null): mixed * * @param string|null $key * @param mixed $default - * @return \Symfony\Component\HttpFoundation\ParameterBag|mixed + * @return \Symfony\Component\HttpFoundation\InputBag|mixed */ public function json($key = null, $default = null) { if (! isset($this->json)) { - $this->json = new ParameterBag((array) json_decode($this->getContent(), true)); + $this->json = new InputBag((array) json_decode($this->getContent(), true)); } if (is_null($key)) { @@ -416,7 +416,7 @@ public function json($key = null, $default = null) /** * Get the input source for the request. * - * @return \Symfony\Component\HttpFoundation\ParameterBag + * @return \Symfony\Component\HttpFoundation\InputBag */ protected function getInputSource() { @@ -646,7 +646,7 @@ public function fingerprint() /** * Set the JSON payload for the request. * - * @param \Symfony\Component\HttpFoundation\ParameterBag $json + * @param \Symfony\Component\HttpFoundation\InputBag $json * @return $this */ public function setJson($json) diff --git a/core/vendor/illuminate/http/Resources/ConditionallyLoadsAttributes.php b/core/vendor/illuminate/http/Resources/ConditionallyLoadsAttributes.php index 7283cd6888..3f25ca0524 100644 --- a/core/vendor/illuminate/http/Resources/ConditionallyLoadsAttributes.php +++ b/core/vendor/illuminate/http/Resources/ConditionallyLoadsAttributes.php @@ -140,11 +140,16 @@ protected function merge($value) * * @param bool $condition * @param mixed $value + * @param mixed $default * @return \Illuminate\Http\Resources\MergeValue|mixed */ - protected function mergeWhen($condition, $value) + protected function mergeWhen($condition, $value, $default = null) { - return $condition ? new MergeValue(value($value)) : new MissingValue; + if ($condition) { + return new MergeValue(value($value)); + } + + return func_num_args() === 3 ? new MergeValue(value($default)) : new MissingValue(); } /** @@ -152,11 +157,14 @@ protected function mergeWhen($condition, $value) * * @param bool $condition * @param mixed $value + * @param mixed $default * @return \Illuminate\Http\Resources\MergeValue|mixed */ - protected function mergeUnless($condition, $value) + protected function mergeUnless($condition, $value, $default = null) { - return ! $condition ? new MergeValue(value($value)) : new MissingValue; + $arguments = func_num_args() === 2 ? [$value] : [$value, $default]; + + return $this->mergeWhen(! $condition, ...$arguments); } /** @@ -300,6 +308,35 @@ public function whenCounted($relationship, $value = null, $default = null) return value($value, $this->resource->{$attribute}); } + /** + * Retrieve a relationship aggregated value if it exists. + * + * @param string $relationship + * @param string $column + * @param string $aggregate + * @param mixed $value + * @param mixed $default + * @return \Illuminate\Http\Resources\MissingValue|mixed + */ + public function whenAggregated($relationship, $column, $aggregate, $value = null, $default = null) + { + $attribute = (string) Str::of($relationship)->snake()->append('_')->append($aggregate)->append('_')->finish($column); + + if (! isset($this->resource->getAttributes()[$attribute])) { + return value($default); + } + + if (func_num_args() === 3) { + return $this->resource->{$attribute}; + } + + if ($this->resource->{$attribute} === null) { + return; + } + + return value($value, $this->resource->{$attribute}); + } + /** * Execute a callback if the given pivot table has been loaded. * diff --git a/core/vendor/illuminate/log/LogManager.php b/core/vendor/illuminate/log/LogManager.php index e02b066991..60498f4ef0 100644 --- a/core/vendor/illuminate/log/LogManager.php +++ b/core/vendor/illuminate/log/LogManager.php @@ -471,9 +471,7 @@ protected function prepareHandler(HandlerInterface $handler, array $config = []) */ protected function formatter() { - return tap(new LineFormatter(null, $this->dateFormat, true, true), function ($formatter) { - $formatter->includeStacktraces(); - }); + return new LineFormatter(null, $this->dateFormat, true, true, true); } /** diff --git a/core/vendor/illuminate/log/ParsesLogConfiguration.php b/core/vendor/illuminate/log/ParsesLogConfiguration.php index 5b24559765..b658575ad6 100644 --- a/core/vendor/illuminate/log/ParsesLogConfiguration.php +++ b/core/vendor/illuminate/log/ParsesLogConfiguration.php @@ -54,6 +54,8 @@ protected function level(array $config) * * @param array $config * @return int + * + * @throws \InvalidArgumentException */ protected function actionLevel(array $config) { diff --git a/core/vendor/illuminate/macroable/Traits/Macroable.php b/core/vendor/illuminate/macroable/Traits/Macroable.php index 2269142ec9..3e6d96a5cd 100644 --- a/core/vendor/illuminate/macroable/Traits/Macroable.php +++ b/core/vendor/illuminate/macroable/Traits/Macroable.php @@ -45,7 +45,6 @@ public static function mixin($mixin, $replace = true) foreach ($methods as $method) { if ($replace || ! static::hasMacro($method->name)) { - $method->setAccessible(true); static::macro($method->name, $method->invoke($mixin)); } } diff --git a/core/vendor/illuminate/redis/Connections/Connection.php b/core/vendor/illuminate/redis/Connections/Connection.php index e3e55e94be..69ed5c1a31 100644 --- a/core/vendor/illuminate/redis/Connections/Connection.php +++ b/core/vendor/illuminate/redis/Connections/Connection.php @@ -118,12 +118,25 @@ public function command($method, array $parameters = []) $time = round((microtime(true) - $start) * 1000, 2); if (isset($this->events)) { - $this->event(new CommandExecuted($method, $parameters, $time, $this)); + $this->event(new CommandExecuted( + $method, $this->parseParametersForEvent($parameters), $time, $this + )); } return $result; } + /** + * Parse the command's parameters for event dispatching. + * + * @param array $parameters + * @return array + */ + protected function parseParametersForEvent(array $parameters) + { + return $parameters; + } + /** * Fire the given event if possible. * diff --git a/core/vendor/illuminate/redis/Connections/PredisConnection.php b/core/vendor/illuminate/redis/Connections/PredisConnection.php index f642dd622a..94f7cb41da 100644 --- a/core/vendor/illuminate/redis/Connections/PredisConnection.php +++ b/core/vendor/illuminate/redis/Connections/PredisConnection.php @@ -4,6 +4,7 @@ use Closure; use Illuminate\Contracts\Redis\Connection as ConnectionContract; +use Predis\Command\Argument\ArrayableArgument; /** * @mixin \Predis\Client @@ -50,4 +51,20 @@ public function createSubscription($channels, Closure $callback, $method = 'subs unset($loop); } + + /** + * Parse the command's parameters for event dispatching. + * + * @param array $parameters + * @return array + */ + protected function parseParametersForEvent(array $parameters) + { + return collect($parameters) + ->transform(function ($parameter) { + return $parameter instanceof ArrayableArgument + ? $parameter->toArray() + : $parameter; + })->all(); + } } diff --git a/core/vendor/illuminate/redis/Connectors/PhpRedisConnector.php b/core/vendor/illuminate/redis/Connectors/PhpRedisConnector.php index 8953c5f579..ae1c9ae192 100644 --- a/core/vendor/illuminate/redis/Connectors/PhpRedisConnector.php +++ b/core/vendor/illuminate/redis/Connectors/PhpRedisConnector.php @@ -15,7 +15,7 @@ class PhpRedisConnector implements Connector { /** - * Create a new clustered PhpRedis connection. + * Create a new connection. * * @param array $config * @param array $options diff --git a/core/vendor/illuminate/redis/Connectors/PredisConnector.php b/core/vendor/illuminate/redis/Connectors/PredisConnector.php index 6222a4b8e9..8769fc53f5 100644 --- a/core/vendor/illuminate/redis/Connectors/PredisConnector.php +++ b/core/vendor/illuminate/redis/Connectors/PredisConnector.php @@ -11,7 +11,7 @@ class PredisConnector implements Connector { /** - * Create a new clustered Predis connection. + * Create a new connection. * * @param array $config * @param array $options diff --git a/core/vendor/illuminate/routing/CompiledRouteCollection.php b/core/vendor/illuminate/routing/CompiledRouteCollection.php index bc92626ffd..189bee7d33 100644 --- a/core/vendor/illuminate/routing/CompiledRouteCollection.php +++ b/core/vendor/illuminate/routing/CompiledRouteCollection.php @@ -121,7 +121,7 @@ public function match(Request $request) if ($result = $matcher->matchRequest($trimmedRequest)) { $route = $this->getByName($result['_route']); } - } catch (ResourceNotFoundException|MethodNotAllowedException $e) { + } catch (ResourceNotFoundException|MethodNotAllowedException) { try { return $this->routes->match($request); } catch (NotFoundHttpException) { diff --git a/core/vendor/illuminate/routing/Console/ControllerMakeCommand.php b/core/vendor/illuminate/routing/Console/ControllerMakeCommand.php index 07054ed80e..0c24c501f3 100644 --- a/core/vendor/illuminate/routing/Console/ControllerMakeCommand.php +++ b/core/vendor/illuminate/routing/Console/ControllerMakeCommand.php @@ -10,6 +10,10 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; +use function Laravel\Prompts\confirm; +use function Laravel\Prompts\select; +use function Laravel\Prompts\suggest; + #[AsCommand(name: 'make:controller')] class ControllerMakeCommand extends GeneratorCommand { @@ -139,7 +143,7 @@ protected function buildParentReplacements() $parentModelClass = $this->parseModel($this->option('parent')); if (! class_exists($parentModelClass) && - $this->components->confirm("A {$parentModelClass} model does not exist. Do you want to generate it?", true)) { + confirm("A {$parentModelClass} model does not exist. Do you want to generate it?", default: true)) { $this->call('make:model', ['name' => $parentModelClass]); } @@ -166,7 +170,7 @@ protected function buildModelReplacements(array $replace) { $modelClass = $this->parseModel($this->option('model')); - if (! class_exists($modelClass) && $this->components->confirm("A {$modelClass} model does not exist. Do you want to generate it?", true)) { + if (! class_exists($modelClass) && confirm("A {$modelClass} model does not exist. Do you want to generate it?", default: true)) { $this->call('make:model', ['name' => $modelClass]); } @@ -302,26 +306,25 @@ protected function afterPromptingForMissingArguments(InputInterface $input, Outp return; } - $type = $this->components->choice('Which type of controller would you like', [ - 'empty', - 'api', - 'invokable', - 'resource', - 'singleton', - ], default: 0); + $type = select('Which type of controller would you like?', [ + 'empty' => 'Empty', + 'resource' => 'Resource', + 'singleton' => 'Singleton', + 'api' => 'API', + 'invokable' => 'Invokable', + ]); if ($type !== 'empty') { $input->setOption($type, true); } if (in_array($type, ['api', 'resource', 'singleton'])) { - $model = $this->components->askWithCompletion( - "What model should this $type controller be for?", - $this->possibleModels(), - 'none' + $model = suggest( + "What model should this $type controller be for? (Optional)", + $this->possibleModels() ); - if ($model && $model !== 'none') { + if ($model) { $input->setOption('model', $model); } } diff --git a/core/vendor/illuminate/routing/Controllers/Middleware.php b/core/vendor/illuminate/routing/Controllers/Middleware.php index e31b751cb4..44ee6cc961 100644 --- a/core/vendor/illuminate/routing/Controllers/Middleware.php +++ b/core/vendor/illuminate/routing/Controllers/Middleware.php @@ -55,7 +55,7 @@ public function only(array|string $only) /** * Specify the controller methods the middleware should not apply to. * - * @param array|string $only + * @param array|string $except * @return $this */ public function except(array|string $except) diff --git a/core/vendor/illuminate/routing/Events/PreparingResponse.php b/core/vendor/illuminate/routing/Events/PreparingResponse.php new file mode 100644 index 0000000000..2c060a02ac --- /dev/null +++ b/core/vendor/illuminate/routing/Events/PreparingResponse.php @@ -0,0 +1,33 @@ +request = $request; + $this->response = $response; + } +} diff --git a/core/vendor/illuminate/routing/Events/ResponsePrepared.php b/core/vendor/illuminate/routing/Events/ResponsePrepared.php new file mode 100644 index 0000000000..5fb866d289 --- /dev/null +++ b/core/vendor/illuminate/routing/Events/ResponsePrepared.php @@ -0,0 +1,33 @@ +request = $request; + $this->response = $response; + } +} diff --git a/core/vendor/illuminate/routing/Middleware/ThrottleRequests.php b/core/vendor/illuminate/routing/Middleware/ThrottleRequests.php index b9529b84e1..bf6cb92aef 100644 --- a/core/vendor/illuminate/routing/Middleware/ThrottleRequests.php +++ b/core/vendor/illuminate/routing/Middleware/ThrottleRequests.php @@ -23,6 +23,13 @@ class ThrottleRequests */ protected $limiter; + /** + * Indicates if the rate limiter keys should be hashed. + * + * @var bool + */ + protected static $shouldHashKeys = true; + /** * Create a new request throttler. * @@ -120,7 +127,7 @@ protected function handleRequestUsingNamedLimiter($request, Closure $next, $limi $next, collect(Arr::wrap($limiterResponse))->map(function ($limit) use ($limiterName) { return (object) [ - 'key' => md5($limiterName.$limit->key), + 'key' => self::$shouldHashKeys ? md5($limiterName.$limit->key) : $limiterName.':'.$limit->key, 'maxAttempts' => $limit->maxAttempts, 'decayMinutes' => $limit->decayMinutes, 'responseCallback' => $limit->responseCallback, @@ -193,9 +200,9 @@ protected function resolveMaxAttempts($request, $maxAttempts) protected function resolveRequestSignature($request) { if ($user = $request->user()) { - return sha1($user->getAuthIdentifier()); + return $this->formatIdentifier($user->getAuthIdentifier()); } elseif ($route = $request->route()) { - return sha1($route->getDomain().'|'.$request->ip()); + return $this->formatIdentifier($route->getDomain().'|'.$request->ip()); } throw new RuntimeException('Unable to generate the request signature. Route unavailable.'); @@ -208,7 +215,7 @@ protected function resolveRequestSignature($request) * @param string $key * @param int $maxAttempts * @param callable|null $responseCallback - * @return \Illuminate\Http\Exceptions\ThrottleRequestsException + * @return \Illuminate\Http\Exceptions\ThrottleRequestsException|\Illuminate\Http\Exceptions\HttpResponseException */ protected function buildException($request, $key, $maxAttempts, $responseCallback = null) { @@ -299,4 +306,26 @@ protected function calculateRemainingAttempts($key, $maxAttempts, $retryAfter = { return is_null($retryAfter) ? $this->limiter->retriesLeft($key, $maxAttempts) : 0; } + + /** + * Format the given identifier based on the configured hashing settings. + * + * @param string $value + * @return string + */ + private function formatIdentifier($value) + { + return self::$shouldHashKeys ? sha1($value) : $value; + } + + /** + * Specify whether rate limiter keys should be hashed. + * + * @param bool $shouldHashKeys + * @return void + */ + public static function shouldHashKeys(bool $shouldHashKeys = true) + { + self::$shouldHashKeys = $shouldHashKeys; + } } diff --git a/core/vendor/illuminate/routing/Middleware/ThrottleRequestsWithRedis.php b/core/vendor/illuminate/routing/Middleware/ThrottleRequestsWithRedis.php index 777f30c07e..e818c69f14 100644 --- a/core/vendor/illuminate/routing/Middleware/ThrottleRequestsWithRedis.php +++ b/core/vendor/illuminate/routing/Middleware/ThrottleRequestsWithRedis.php @@ -86,7 +86,7 @@ protected function handleRequest($request, Closure $next, array $limits) protected function tooManyAttempts($key, $maxAttempts, $decayMinutes) { $limiter = new DurationLimiter( - $this->redis, $key, $maxAttempts, $decayMinutes * 60 + $this->getRedisConnection(), $key, $maxAttempts, $decayMinutes * 60 ); return tap(! $limiter->acquire(), function () use ($key, $limiter) { @@ -119,4 +119,14 @@ protected function getTimeUntilNextRetry($key) { return $this->decaysAt[$key] - $this->currentTime(); } + + /** + * Get the Redis connection that should be used for throttling. + * + * @return \Illuminate\Redis\Connections\Connection + */ + protected function getRedisConnection() + { + return $this->redis->connection(); + } } diff --git a/core/vendor/illuminate/routing/ResourceRegistrar.php b/core/vendor/illuminate/routing/ResourceRegistrar.php index 6e3a33a178..781b4baddb 100644 --- a/core/vendor/illuminate/routing/ResourceRegistrar.php +++ b/core/vendor/illuminate/routing/ResourceRegistrar.php @@ -179,7 +179,7 @@ public function singleton($name, $controller, array $options = []) * @param string $name * @param string $controller * @param array $options - * @return void + * @return \Illuminate\Routing\Router */ protected function prefixedResource($name, $controller, array $options) { @@ -201,7 +201,7 @@ protected function prefixedResource($name, $controller, array $options) * @param string $name * @param string $controller * @param array $options - * @return void + * @return \Illuminate\Routing\Router */ protected function prefixedSingleton($name, $controller, array $options) { @@ -477,7 +477,6 @@ protected function addSingletonEdit($name, $controller, $options) * Add the update method for a singleton route. * * @param string $name - * @param string $base * @param string $controller * @param array $options * @return \Illuminate\Routing\Route diff --git a/core/vendor/illuminate/routing/Router.php b/core/vendor/illuminate/routing/Router.php index ecb492d1f0..ee416226b1 100644 --- a/core/vendor/illuminate/routing/Router.php +++ b/core/vendor/illuminate/routing/Router.php @@ -15,6 +15,8 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; +use Illuminate\Routing\Events\PreparingResponse; +use Illuminate\Routing\Events\ResponsePrepared; use Illuminate\Routing\Events\RouteMatched; use Illuminate\Routing\Events\Routing; use Illuminate\Support\Arr; @@ -871,7 +873,11 @@ protected function sortMiddleware(Collection $middlewares) */ public function prepareResponse($request, $response) { - return static::toResponse($request, $response); + $this->events->dispatch(new PreparingResponse($request, $response)); + + return tap(static::toResponse($request, $response), function ($response) use ($request) { + $this->events->dispatch(new ResponsePrepared($request, $response)); + }); } /** diff --git a/core/vendor/illuminate/routing/UrlGenerator.php b/core/vendor/illuminate/routing/UrlGenerator.php index d158db45ee..0b9dcec337 100644 --- a/core/vendor/illuminate/routing/UrlGenerator.php +++ b/core/vendor/illuminate/routing/UrlGenerator.php @@ -89,6 +89,13 @@ class UrlGenerator implements UrlGeneratorContract */ protected $keyResolver; + /** + * The missing named route resolver callable. + * + * @var callable + */ + protected $missingNamedRouteResolver; + /** * The callback to use to format hosts. * @@ -464,6 +471,11 @@ public function route($name, $parameters = [], $absolute = true) return $this->toRoute($route, $parameters, $absolute); } + if (! is_null($this->missingNamedRouteResolver) && + ! is_null($url = call_user_func($this->missingNamedRouteResolver, $name, $parameters, $absolute))) { + return $url; + } + throw new RouteNotFoundException("Route [{$name}] not defined."); } @@ -820,6 +832,19 @@ public function withKeyResolver(callable $keyResolver) return (clone $this)->setKeyResolver($keyResolver); } + /** + * Set the callback that should be used to attempt to resolve missing named routes. + * + * @param callable $missingNamedRouteResolver + * @return $this + */ + public function resolveMissingNamedRoutesUsing(callable $missingNamedRouteResolver) + { + $this->missingNamedRouteResolver = $missingNamedRouteResolver; + + return $this; + } + /** * Get the root controller namespace. * diff --git a/core/vendor/illuminate/support/Benchmark.php b/core/vendor/illuminate/support/Benchmark.php index 3a09d5920e..20519e0ed9 100644 --- a/core/vendor/illuminate/support/Benchmark.php +++ b/core/vendor/illuminate/support/Benchmark.php @@ -32,6 +32,25 @@ public static function measure(Closure|array $benchmarkables, int $iterations = ); } + /** + * Measure a callable once and return the duration and result. + * + * @template TReturn of mixed + * + * @param (callable(): TReturn) $callback + * @return array{0: TReturn, 1: float} + */ + public static function value(callable $callback): array + { + gc_collect_cycles(); + + $start = hrtime(true); + + $result = $callback(); + + return [$result, (hrtime(true) - $start) / 1000000]; + } + /** * Measure a callable or array of callables over the given number of iterations, then dump and die. * diff --git a/core/vendor/illuminate/support/Composer.php b/core/vendor/illuminate/support/Composer.php index 9933615cb3..2f229256c0 100644 --- a/core/vendor/illuminate/support/Composer.php +++ b/core/vendor/illuminate/support/Composer.php @@ -2,7 +2,10 @@ namespace Illuminate\Support; +use Closure; use Illuminate\Filesystem\Filesystem; +use RuntimeException; +use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Process\PhpExecutableFinder; use Symfony\Component\Process\Process; @@ -35,6 +38,101 @@ public function __construct(Filesystem $files, $workingPath = null) $this->workingPath = $workingPath; } + /** + * Determine if the given Composer package is installed. + * + * @param string $package + * @return bool + * + * @throw \RuntimeException + */ + protected function hasPackage($package) + { + $composer = json_decode(file_get_contents($this->findComposerFile()), true); + + return array_key_exists($package, $composer['require'] ?? []) + || array_key_exists($package, $composer['require-dev'] ?? []); + } + + /** + * Install the given Composer packages into the application. + * + * @param array $packages + * @param bool $dev + * @param \Closure|\Symfony\Component\Console\Output\OutputInterface|null $output + * @return bool + */ + public function requirePackages(array $packages, bool $dev = false, Closure|OutputInterface $output = null) + { + $command = collect([ + ...$this->findComposer(), + 'require', + ...$packages, + ]) + ->when($dev, function ($command) { + $command->push('--dev'); + })->all(); + + return 0 === $this->getProcess($command, ['COMPOSER_MEMORY_LIMIT' => '-1']) + ->run( + $output instanceof OutputInterface + ? function ($type, $line) use ($output) { + $output->write(' '.$line); + } : $output + ); + } + + /** + * Remove the given Composer packages from the application. + * + * @param array $packages + * @param bool $dev + * @param \Closure|\Symfony\Component\Console\Output\OutputInterface|null $output + * @return bool + */ + public function removePackages(array $packages, bool $dev = false, Closure|OutputInterface $output = null) + { + $command = collect([ + ...$this->findComposer(), + 'remove', + ...$packages, + ]) + ->when($dev, function ($command) { + $command->push('--dev'); + })->all(); + + return 0 === $this->getProcess($command, ['COMPOSER_MEMORY_LIMIT' => '-1']) + ->run( + $output instanceof OutputInterface + ? function ($type, $line) use ($output) { + $output->write(' '.$line); + } : $output + ); + } + + /** + * Modify the "composer.json" file contents using the given callback. + * + * @param callable(array):array $callback + * @return void + * + * @throw \RuntimeException + */ + public function modify(callable $callback) + { + $composerFile = $this->findComposerFile(); + + $composer = json_decode(file_get_contents($composerFile), true, 512, JSON_THROW_ON_ERROR); + + file_put_contents( + $composerFile, + json_encode( + call_user_func($callback, $composer), + JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE + ) + ); + } + /** * Regenerate the Composer autoloader files. * @@ -61,7 +159,7 @@ public function dumpOptimized() } /** - * Get the composer command for the environment. + * Get the Composer binary / command for the environment. * * @return array */ @@ -74,6 +172,24 @@ public function findComposer() return ['composer']; } + /** + * Get the path to the "composer.json" file. + * + * @return string + * + * @throw \RuntimeException + */ + protected function findComposerFile() + { + $composerFile = "{$this->workingPath}/composer.json"; + + if (! file_exists($composerFile)) { + throw new RuntimeException("Unable to locate `composer.json` file at [{$this->workingPath}]."); + } + + return $composerFile; + } + /** * Get the PHP binary. * @@ -88,11 +204,12 @@ protected function phpBinary() * Get a new Symfony process instance. * * @param array $command + * @param array $env * @return \Symfony\Component\Process\Process */ - protected function getProcess(array $command) + protected function getProcess(array $command, array $env = []) { - return (new Process($command, $this->workingPath))->setTimeout(null); + return (new Process($command, $this->workingPath, $env))->setTimeout(null); } /** diff --git a/core/vendor/illuminate/support/Facades/Blade.php b/core/vendor/illuminate/support/Facades/Blade.php index ff537e4df4..3d32cf8621 100644 --- a/core/vendor/illuminate/support/Facades/Blade.php +++ b/core/vendor/illuminate/support/Facades/Blade.php @@ -28,6 +28,7 @@ * @method static void aliasInclude(string $path, string|null $alias = null) * @method static void directive(string $name, callable $handler) * @method static array getCustomDirectives() + * @method static \Illuminate\View\Compilers\BladeCompiler prepareStringsForCompilationUsing(callable $callback) * @method static void precompiler(callable $precompiler) * @method static void setEchoFormat(string $format) * @method static void withDoubleEncoding() diff --git a/core/vendor/illuminate/support/Facades/Bus.php b/core/vendor/illuminate/support/Facades/Bus.php index af64200a58..08eddf7944 100644 --- a/core/vendor/illuminate/support/Facades/Bus.php +++ b/core/vendor/illuminate/support/Facades/Bus.php @@ -45,6 +45,7 @@ * @method static bool hasDispatchedAfterResponse(string $command) * @method static \Illuminate\Bus\Batch dispatchFakeBatch(string $name = '') * @method static \Illuminate\Bus\Batch recordPendingBatch(\Illuminate\Bus\PendingBatch $pendingBatch) + * @method static \Illuminate\Support\Testing\Fakes\BusFake serializeAndRestore(bool $serializeAndRestore = true) * * @see \Illuminate\Bus\Dispatcher * @see \Illuminate\Support\Testing\Fakes\BusFake diff --git a/core/vendor/illuminate/support/Facades/DB.php b/core/vendor/illuminate/support/Facades/DB.php index 91d5954e0b..4747725836 100644 --- a/core/vendor/illuminate/support/Facades/DB.php +++ b/core/vendor/illuminate/support/Facades/DB.php @@ -87,6 +87,7 @@ * @method static void unsetTransactionManager() * @method static bool pretending() * @method static array getQueryLog() + * @method static array getRawQueryLog() * @method static void flushQueryLog() * @method static void enableQueryLog() * @method static void disableQueryLog() diff --git a/core/vendor/illuminate/support/Facades/Event.php b/core/vendor/illuminate/support/Facades/Event.php index b5d14f8fb9..b2784d096f 100644 --- a/core/vendor/illuminate/support/Facades/Event.php +++ b/core/vendor/illuminate/support/Facades/Event.php @@ -12,7 +12,7 @@ * @method static void push(string $event, object|array $payload = []) * @method static void flush(string $event) * @method static void subscribe(object|string $subscriber) - * @method static array|null until(string|object $event, mixed $payload = []) + * @method static mixed until(string|object $event, mixed $payload = []) * @method static array|null dispatch(string|object $event, mixed $payload = [], bool $halt = false) * @method static array getListeners(string $eventName) * @method static \Closure makeListener(\Closure|string|array $listener, bool $wildcard = false) diff --git a/core/vendor/illuminate/support/Facades/Gate.php b/core/vendor/illuminate/support/Facades/Gate.php index 7cb4a525e8..771784401a 100644 --- a/core/vendor/illuminate/support/Facades/Gate.php +++ b/core/vendor/illuminate/support/Facades/Gate.php @@ -27,6 +27,7 @@ * @method static \Illuminate\Auth\Access\Gate forUser(\Illuminate\Contracts\Auth\Authenticatable|mixed $user) * @method static array abilities() * @method static array policies() + * @method static \Illuminate\Auth\Access\Gate defaultDenialResponse(\Illuminate\Auth\Access\Response $response) * @method static \Illuminate\Auth\Access\Gate setContainer(\Illuminate\Contracts\Container\Container $container) * @method static \Illuminate\Auth\Access\Response denyWithStatus(int $status, string|null $message = null, int|null $code = null) * @method static \Illuminate\Auth\Access\Response denyAsNotFound(string|null $message = null, int|null $code = null) diff --git a/core/vendor/illuminate/support/Facades/Http.php b/core/vendor/illuminate/support/Facades/Http.php index 61087ed445..a6d9363d7d 100644 --- a/core/vendor/illuminate/support/Facades/Http.php +++ b/core/vendor/illuminate/support/Facades/Http.php @@ -5,6 +5,9 @@ use Illuminate\Http\Client\Factory; /** + * @method static \Illuminate\Http\Client\Factory globalMiddleware(callable $middleware) + * @method static \Illuminate\Http\Client\Factory globalRequestMiddleware(callable $middleware) + * @method static \Illuminate\Http\Client\Factory globalResponseMiddleware(callable $middleware) * @method static \GuzzleHttp\Promise\PromiseInterface response(array|string|null $body = null, int $status = 200, array $headers = []) * @method static \Illuminate\Http\Client\ResponseSequence sequence(array $responses = []) * @method static \Illuminate\Http\Client\Factory allowStrayRequests() @@ -29,10 +32,13 @@ * @method static \Illuminate\Http\Client\PendingRequest attach(string|array $name, string|resource $contents = '', string|null $filename = null, array $headers = []) * @method static \Illuminate\Http\Client\PendingRequest asMultipart() * @method static \Illuminate\Http\Client\PendingRequest bodyFormat(string $format) + * @method static \Illuminate\Http\Client\PendingRequest withQueryParameters(array $parameters) * @method static \Illuminate\Http\Client\PendingRequest contentType(string $contentType) * @method static \Illuminate\Http\Client\PendingRequest acceptJson() * @method static \Illuminate\Http\Client\PendingRequest accept(string $contentType) * @method static \Illuminate\Http\Client\PendingRequest withHeaders(array $headers) + * @method static \Illuminate\Http\Client\PendingRequest withHeader(string $name, mixed $value) + * @method static \Illuminate\Http\Client\PendingRequest replaceHeaders(array $headers) * @method static \Illuminate\Http\Client\PendingRequest withBasicAuth(string $username, string $password) * @method static \Illuminate\Http\Client\PendingRequest withDigestAuth(string $username, string $password) * @method static \Illuminate\Http\Client\PendingRequest withToken(string $token, string $type = 'Bearer') @@ -45,9 +51,11 @@ * @method static \Illuminate\Http\Client\PendingRequest sink(string|resource $to) * @method static \Illuminate\Http\Client\PendingRequest timeout(int $seconds) * @method static \Illuminate\Http\Client\PendingRequest connectTimeout(int $seconds) - * @method static \Illuminate\Http\Client\PendingRequest retry(int $times, Closure|int $sleepMilliseconds = 0, callable|null $when = null, bool $throw = true) + * @method static \Illuminate\Http\Client\PendingRequest retry(int $times, \Closure|int $sleepMilliseconds = 0, callable|null $when = null, bool $throw = true) * @method static \Illuminate\Http\Client\PendingRequest withOptions(array $options) * @method static \Illuminate\Http\Client\PendingRequest withMiddleware(callable $middleware) + * @method static \Illuminate\Http\Client\PendingRequest withRequestMiddleware(callable $middleware) + * @method static \Illuminate\Http\Client\PendingRequest withResponseMiddleware(callable $middleware) * @method static \Illuminate\Http\Client\PendingRequest beforeSending(callable $callback) * @method static \Illuminate\Http\Client\PendingRequest throw(callable|null $callback = null) * @method static \Illuminate\Http\Client\PendingRequest throwIf(callable|bool $condition, callable|null $throwCallback = null) diff --git a/core/vendor/illuminate/support/Facades/Mail.php b/core/vendor/illuminate/support/Facades/Mail.php index 014a3611e2..d5ea8c7296 100644 --- a/core/vendor/illuminate/support/Facades/Mail.php +++ b/core/vendor/illuminate/support/Facades/Mail.php @@ -48,6 +48,9 @@ * @method static void assertQueued(string|\Closure $mailable, callable|int|null $callback = null) * @method static void assertNotQueued(string|\Closure $mailable, callable|null $callback = null) * @method static void assertNothingQueued() + * @method static void assertSentCount(int $count) + * @method static void assertQueuedCount(int $count) + * @method static void assertOutgoingCount(int $count) * @method static \Illuminate\Support\Collection sent(string|\Closure $mailable, callable|null $callback = null) * @method static bool hasSent(string $mailable) * @method static \Illuminate\Support\Collection queued(string|\Closure $mailable, callable|null $callback = null) diff --git a/core/vendor/illuminate/support/Facades/Queue.php b/core/vendor/illuminate/support/Facades/Queue.php index 45b97e7a18..34663eb15f 100644 --- a/core/vendor/illuminate/support/Facades/Queue.php +++ b/core/vendor/illuminate/support/Facades/Queue.php @@ -49,6 +49,7 @@ * @method static bool hasPushed(string $job) * @method static bool shouldFakeJob(object $job) * @method static array pushedJobs() + * @method static \Illuminate\Support\Testing\Fakes\QueueFake serializeAndRestore(bool $serializeAndRestore = true) * * @see \Illuminate\Queue\QueueManager * @see \Illuminate\Queue\Queue diff --git a/core/vendor/illuminate/support/Facades/Request.php b/core/vendor/illuminate/support/Facades/Request.php index f28b2aa8e8..4f94968d7a 100644 --- a/core/vendor/illuminate/support/Facades/Request.php +++ b/core/vendor/illuminate/support/Facades/Request.php @@ -32,7 +32,7 @@ * @method static \Illuminate\Http\Request mergeIfMissing(array $input) * @method static \Illuminate\Http\Request replace(array $input) * @method static mixed get(string $key, mixed $default = null) - * @method static \Symfony\Component\HttpFoundation\ParameterBag|mixed json(string|null $key = null, mixed $default = null) + * @method static \Symfony\Component\HttpFoundation\InputBag|mixed json(string|null $key = null, mixed $default = null) * @method static \Illuminate\Http\Request createFrom(\Illuminate\Http\Request $from, \Illuminate\Http\Request|null $to = null) * @method static \Illuminate\Http\Request createFromBase(\Symfony\Component\HttpFoundation\Request $request) * @method static \Illuminate\Http\Request duplicate(array|null $query = null, array|null $request = null, array|null $attributes = null, array|null $cookies = null, array|null $files = null, array|null $server = null) @@ -45,15 +45,15 @@ * @method static mixed user(string|null $guard = null) * @method static \Illuminate\Routing\Route|object|string|null route(string|null $param = null, mixed $default = null) * @method static string fingerprint() - * @method static \Illuminate\Http\Request setJson(\Symfony\Component\HttpFoundation\ParameterBag $json) + * @method static \Illuminate\Http\Request setJson(\Symfony\Component\HttpFoundation\InputBag $json) * @method static \Closure getUserResolver() * @method static \Illuminate\Http\Request setUserResolver(\Closure $callback) * @method static \Closure getRouteResolver() * @method static \Illuminate\Http\Request setRouteResolver(\Closure $callback) * @method static array toArray() * @method static void initialize(array $query = [], array $request = [], array $attributes = [], array $cookies = [], array $files = [], array $server = [], string|resource|null $content = null) - * @method static \static createFromGlobals() - * @method static \static create(string $uri, string $method = 'GET', array $parameters = [], array $cookies = [], array $files = [], array $server = [], string|resource|null $content = null) + * @method static \Illuminate\Http\Request createFromGlobals() + * @method static \Illuminate\Http\Request create(string $uri, string $method = 'GET', array $parameters = [], array $cookies = [], array $files = [], array $server = [], string|resource|null $content = null) * @method static void setFactory(callable|null $callable) * @method static void overrideGlobals() * @method static void setTrustedProxies(array $proxies, int $trustedHeaderSet) @@ -106,6 +106,7 @@ * @method static bool isMethodCacheable() * @method static string|null getProtocolVersion() * @method static string|resource getContent(bool $asResource = false) + * @method static \Symfony\Component\HttpFoundation\InputBag getPayload() * @method static array getETags() * @method static bool isNoCache() * @method static string|null getPreferredFormat(string|null $default = 'html') diff --git a/core/vendor/illuminate/support/Facades/Storage.php b/core/vendor/illuminate/support/Facades/Storage.php index a9e807e550..5279c04f05 100644 --- a/core/vendor/illuminate/support/Facades/Storage.php +++ b/core/vendor/illuminate/support/Facades/Storage.php @@ -7,7 +7,7 @@ /** * @method static \Illuminate\Contracts\Filesystem\Filesystem drive(string|null $name = null) * @method static \Illuminate\Contracts\Filesystem\Filesystem disk(string|null $name = null) - * @method static \Illuminate\Contracts\Filesystem\Filesystem cloud() + * @method static \Illuminate\Contracts\Filesystem\Cloud cloud() * @method static \Illuminate\Contracts\Filesystem\Filesystem build(string|array $config) * @method static \Illuminate\Contracts\Filesystem\Filesystem createLocalDriver(array $config) * @method static \Illuminate\Contracts\Filesystem\Filesystem createFtpDriver(array $config) @@ -24,7 +24,7 @@ * @method static bool exists(string $path) * @method static string|null get(string $path) * @method static resource|null readStream(string $path) - * @method static bool put(string $path, string|resource $contents, mixed $options = []) + * @method static bool put(string $path, \Psr\Http\Message\StreamInterface|\Illuminate\Http\File|\Illuminate\Http\UploadedFile|string|resource $contents, mixed $options = []) * @method static bool writeStream(string $path, resource $resource, array $options = []) * @method static string getVisibility(string $path) * @method static bool setVisibility(string $path, string $visibility) diff --git a/core/vendor/illuminate/support/Facades/URL.php b/core/vendor/illuminate/support/Facades/URL.php index 8da96f482d..984b2acde5 100644 --- a/core/vendor/illuminate/support/Facades/URL.php +++ b/core/vendor/illuminate/support/Facades/URL.php @@ -39,6 +39,7 @@ * @method static \Illuminate\Routing\UrlGenerator setSessionResolver(callable $sessionResolver) * @method static \Illuminate\Routing\UrlGenerator setKeyResolver(callable $keyResolver) * @method static \Illuminate\Routing\UrlGenerator withKeyResolver(callable $keyResolver) + * @method static \Illuminate\Routing\UrlGenerator resolveMissingNamedRoutesUsing(callable $missingNamedRouteResolver) * @method static string getRootControllerNamespace() * @method static \Illuminate\Routing\UrlGenerator setRootControllerNamespace(string $rootNamespace) * @method static void macro(string $name, object|callable $macro) diff --git a/core/vendor/illuminate/support/Facades/Vite.php b/core/vendor/illuminate/support/Facades/Vite.php index f7b4f02b67..4ebda1a3ae 100644 --- a/core/vendor/illuminate/support/Facades/Vite.php +++ b/core/vendor/illuminate/support/Facades/Vite.php @@ -17,6 +17,7 @@ * @method static \Illuminate\Foundation\Vite usePreloadTagAttributes(callable|array|false $attributes) * @method static \Illuminate\Support\HtmlString|void reactRefresh() * @method static string asset(string $asset, string|null $buildDirectory = null) + * @method static string content(string $asset, string|null $buildDirectory = null) * @method static string|null manifestHash(string|null $buildDirectory = null) * @method static bool isRunningHot() * @method static string toHtml() diff --git a/core/vendor/illuminate/support/Sleep.php b/core/vendor/illuminate/support/Sleep.php index a31269fc90..680dfb1490 100644 --- a/core/vendor/illuminate/support/Sleep.php +++ b/core/vendor/illuminate/support/Sleep.php @@ -427,7 +427,7 @@ protected function shouldNotSleep() /** * Only sleep when the given condition is true. * - * @param (\Closure($this): bool)|bool $condition + * @param (\Closure($this): bool)|bool $condition * @return $this */ public function when($condition) @@ -440,7 +440,7 @@ public function when($condition) /** * Don't sleep when the given condition is true. * - * @param (\Closure($this): bool)|bool $condition + * @param (\Closure($this): bool)|bool $condition * @return $this */ public function unless($condition) diff --git a/core/vendor/illuminate/support/Str.php b/core/vendor/illuminate/support/Str.php index 9a0209b288..0d706d1920 100644 --- a/core/vendor/illuminate/support/Str.php +++ b/core/vendor/illuminate/support/Str.php @@ -421,9 +421,9 @@ public static function isAscii($value) } /** - * Determine if a given string is valid JSON. + * Determine if a given value is valid JSON. * - * @param string $value + * @param mixed $value * @return bool */ public static function isJson($value) @@ -442,9 +442,52 @@ public static function isJson($value) } /** - * Determine if a given string is a valid UUID. + * Determine if a given value is a valid URL. * - * @param string $value + * @param mixed $value + * @param array $protocols + * @return bool + */ + public static function isUrl($value, array $protocols = []) + { + if (! is_string($value)) { + return false; + } + + $protocolList = empty($protocols) + ? 'aaa|aaas|about|acap|acct|acd|acr|adiumxtra|adt|afp|afs|aim|amss|android|appdata|apt|ark|attachment|aw|barion|beshare|bitcoin|bitcoincash|blob|bolo|browserext|calculator|callto|cap|cast|casts|chrome|chrome-extension|cid|coap|coap\+tcp|coap\+ws|coaps|coaps\+tcp|coaps\+ws|com-eventbrite-attendee|content|conti|crid|cvs|dab|data|dav|diaspora|dict|did|dis|dlna-playcontainer|dlna-playsingle|dns|dntp|dpp|drm|drop|dtn|dvb|ed2k|elsi|example|facetime|fax|feed|feedready|file|filesystem|finger|first-run-pen-experience|fish|fm|ftp|fuchsia-pkg|geo|gg|git|gizmoproject|go|gopher|graph|gtalk|h323|ham|hcap|hcp|http|https|hxxp|hxxps|hydrazone|iax|icap|icon|im|imap|info|iotdisco|ipn|ipp|ipps|irc|irc6|ircs|iris|iris\.beep|iris\.lwz|iris\.xpc|iris\.xpcs|isostore|itms|jabber|jar|jms|keyparc|lastfm|ldap|ldaps|leaptofrogans|lorawan|lvlt|magnet|mailserver|mailto|maps|market|message|mid|mms|modem|mongodb|moz|ms-access|ms-browser-extension|ms-calculator|ms-drive-to|ms-enrollment|ms-excel|ms-eyecontrolspeech|ms-gamebarservices|ms-gamingoverlay|ms-getoffice|ms-help|ms-infopath|ms-inputapp|ms-lockscreencomponent-config|ms-media-stream-id|ms-mixedrealitycapture|ms-mobileplans|ms-officeapp|ms-people|ms-project|ms-powerpoint|ms-publisher|ms-restoretabcompanion|ms-screenclip|ms-screensketch|ms-search|ms-search-repair|ms-secondary-screen-controller|ms-secondary-screen-setup|ms-settings|ms-settings-airplanemode|ms-settings-bluetooth|ms-settings-camera|ms-settings-cellular|ms-settings-cloudstorage|ms-settings-connectabledevices|ms-settings-displays-topology|ms-settings-emailandaccounts|ms-settings-language|ms-settings-location|ms-settings-lock|ms-settings-nfctransactions|ms-settings-notifications|ms-settings-power|ms-settings-privacy|ms-settings-proximity|ms-settings-screenrotation|ms-settings-wifi|ms-settings-workplace|ms-spd|ms-sttoverlay|ms-transit-to|ms-useractivityset|ms-virtualtouchpad|ms-visio|ms-walk-to|ms-whiteboard|ms-whiteboard-cmd|ms-word|msnim|msrp|msrps|mss|mtqp|mumble|mupdate|mvn|news|nfs|ni|nih|nntp|notes|ocf|oid|onenote|onenote-cmd|opaquelocktoken|openpgp4fpr|pack|palm|paparazzi|payto|pkcs11|platform|pop|pres|prospero|proxy|pwid|psyc|pttp|qb|query|redis|rediss|reload|res|resource|rmi|rsync|rtmfp|rtmp|rtsp|rtsps|rtspu|s3|secondlife|service|session|sftp|sgn|shttp|sieve|simpleledger|sip|sips|skype|smb|sms|smtp|snews|snmp|soap\.beep|soap\.beeps|soldat|spiffe|spotify|ssh|steam|stun|stuns|submit|svn|tag|teamspeak|tel|teliaeid|telnet|tftp|tg|things|thismessage|tip|tn3270|tool|ts3server|turn|turns|tv|udp|unreal|urn|ut2004|v-event|vemmi|ventrilo|videotex|vnc|view-source|wais|webcal|wpid|ws|wss|wtai|wyciwyg|xcon|xcon-userid|xfire|xmlrpc\.beep|xmlrpc\.beeps|xmpp|xri|ymsgr|z39\.50|z39\.50r|z39\.50s' + : implode('|', $protocols); + + /* + * This pattern is derived from Symfony\Component\Validator\Constraints\UrlValidator (5.0.7). + * + * (c) Fabien Potencier http://symfony.com + */ + $pattern = '~^ + (LARAVEL_PROTOCOLS):// # protocol + (((?:[\_\.\pL\pN-]|%[0-9A-Fa-f]{2})+:)?((?:[\_\.\pL\pN-]|%[0-9A-Fa-f]{2})+)@)? # basic auth + ( + ([\pL\pN\pS\-\_\.])+(\.?([\pL\pN]|xn\-\-[\pL\pN-]+)+\.?) # a domain name + | # or + \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # an IP address + | # or + \[ + (?:(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){6})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:::(?:(?:(?:[0-9a-f]{1,4})):){5})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){4})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,1}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){3})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,2}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){2})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,3}(?:(?:[0-9a-f]{1,4})))?::(?:(?:[0-9a-f]{1,4})):)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,4}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,5}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,6}(?:(?:[0-9a-f]{1,4})))?::)))) + \] # an IPv6 address + ) + (:[0-9]+)? # a port (optional) + (?:/ (?:[\pL\pN\-._\~!$&\'()*+,;=:@]|%[0-9A-Fa-f]{2})* )* # a path + (?:\? (?:[\pL\pN\-._\~!$&\'\[\]()*+,;=:@/?]|%[0-9A-Fa-f]{2})* )? # a query (optional) + (?:\# (?:[\pL\pN\-._\~!$&\'()*+,;=:@/?]|%[0-9A-Fa-f]{2})* )? # a fragment (optional) + $~ixu'; + + return preg_match(str_replace('LARAVEL_PROTOCOLS', $protocolList, $pattern), $value) > 0; + } + + /** + * Determine if a given value is a valid UUID. + * + * @param mixed $value * @return bool */ public static function isUuid($value) @@ -457,9 +500,9 @@ public static function isUuid($value) } /** - * Determine if a given string is a valid ULID. + * Determine if a given value is a valid ULID. * - * @param string $value + * @param mixed $value * @return bool */ public static function isUlid($value) @@ -918,7 +961,7 @@ public static function replaceArray($search, $replace, $subject) * @param string|iterable $replace * @param string|iterable $subject * @param bool $caseSensitive - * @return string + * @return string|string[] */ public static function replace($search, $replace, $subject, $caseSensitive = true) { @@ -964,6 +1007,29 @@ public static function replaceFirst($search, $replace, $subject) return $subject; } + /** + * Replace the first occurrence of the given value if it appears at the start of the string. + * + * @param string $search + * @param string $replace + * @param string $subject + * @return string + */ + public static function replaceStart($search, $replace, $subject) + { + $search = (string) $search; + + if ($search === '') { + return $subject; + } + + if (static::startsWith($subject, $search)) { + return static::replaceFirst($search, $replace, $subject); + } + + return $subject; + } + /** * Replace the last occurrence of a given value in the string. * @@ -974,6 +1040,8 @@ public static function replaceFirst($search, $replace, $subject) */ public static function replaceLast($search, $replace, $subject) { + $search = (string) $search; + if ($search === '') { return $subject; } @@ -987,11 +1055,34 @@ public static function replaceLast($search, $replace, $subject) return $subject; } + /** + * Replace the last occurrence of a given value if it appears at the end of the string. + * + * @param string $search + * @param string $replace + * @param string $subject + * @return string + */ + public static function replaceEnd($search, $replace, $subject) + { + $search = (string) $search; + + if ($search === '') { + return $subject; + } + + if (static::endsWith($subject, $search)) { + return static::replaceLast($search, $replace, $subject); + } + + return $subject; + } + /** * Remove any occurrence of the given string in the subject. * * @param string|iterable $search - * @param string $subject + * @param string|iterable $subject * @param bool $caseSensitive * @return string */ @@ -1302,6 +1393,20 @@ public static function wordCount($string, $characters = null) return str_word_count($string, 0, $characters); } + /** + * Wrap a string to a given number of characters. + * + * @param string $string + * @param int $characters + * @param string $break + * @param bool $cutLongWords + * @return string + */ + public static function wordWrap($string, $characters = 75, $break = "\n", $cutLongWords = false) + { + return wordwrap($string, $characters, $break, $cutLongWords); + } + /** * Generate a UUID (version 4). * diff --git a/core/vendor/illuminate/support/Stringable.php b/core/vendor/illuminate/support/Stringable.php index 0cb76068e3..645b3949da 100644 --- a/core/vendor/illuminate/support/Stringable.php +++ b/core/vendor/illuminate/support/Stringable.php @@ -322,6 +322,16 @@ public function isJson() return Str::isJson($this->value); } + /** + * Determine if a given value is a valid URL. + * + * @return bool + */ + public function isUrl() + { + return Str::isUrl($this->value); + } + /** * Determine if a given string is a valid UUID. * @@ -646,6 +656,18 @@ public function replaceFirst($search, $replace) return new static(Str::replaceFirst($search, $replace, $this->value)); } + /** + * Replace the first occurrence of the given value if it appears at the start of the string. + * + * @param string $search + * @param string $replace + * @return static + */ + public function replaceStart($search, $replace) + { + return new static(Str::replaceStart($search, $replace, $this->value)); + } + /** * Replace the last occurrence of a given value in the string. * @@ -658,6 +680,18 @@ public function replaceLast($search, $replace) return new static(Str::replaceLast($search, $replace, $this->value)); } + /** + * Replace the last occurrence of a given value if it appears at the end of the string. + * + * @param string $search + * @param string $replace + * @return static + */ + public function replaceEnd($search, $replace) + { + return new static(Str::replaceEnd($search, $replace, $this->value)); + } + /** * Replace the patterns matching the given regular expression. * @@ -1103,6 +1137,19 @@ public function wordCount($characters = null) return Str::wordCount($this->value, $characters); } + /** + * Wrap a string to a given number of characters. + * + * @param int $characters + * @param string $break + * @param bool $cutLongWords + * @return static + */ + public function wordWrap($characters = 75, $break = "\n", $cutLongWords = false) + { + return new static(Str::wordWrap($this->value, $characters, $break, $cutLongWords)); + } + /** * Wrap the string with the given strings. * diff --git a/core/vendor/illuminate/support/Testing/Fakes/BatchFake.php b/core/vendor/illuminate/support/Testing/Fakes/BatchFake.php index 607168ba99..034f55c79d 100644 --- a/core/vendor/illuminate/support/Testing/Fakes/BatchFake.php +++ b/core/vendor/illuminate/support/Testing/Fakes/BatchFake.php @@ -6,6 +6,7 @@ use Illuminate\Bus\Batch; use Illuminate\Bus\UpdatedBatchJobCounts; use Illuminate\Support\Carbon; +use Illuminate\Support\Collection; class BatchFake extends Batch { @@ -79,6 +80,8 @@ public function fresh() */ public function add($jobs) { + $jobs = Collection::wrap($jobs); + foreach ($jobs as $job) { $this->added[] = $job; } diff --git a/core/vendor/illuminate/support/Testing/Fakes/BusFake.php b/core/vendor/illuminate/support/Testing/Fakes/BusFake.php index 090a74309d..6bd8970785 100644 --- a/core/vendor/illuminate/support/Testing/Fakes/BusFake.php +++ b/core/vendor/illuminate/support/Testing/Fakes/BusFake.php @@ -71,6 +71,13 @@ class BusFake implements Fake, QueueingDispatcher */ protected $batches = []; + /** + * Indicates if commands should be serialized and restored when pushed to the Bus. + * + * @var bool + */ + protected bool $serializeAndRestore = false; + /** * Create a new bus fake instance. * @@ -341,11 +348,6 @@ public function assertChained(array $expectedChain) "The expected [{$command}] job was not dispatched." ); - PHPUnit::assertTrue( - collect($expectedChain)->isNotEmpty(), - 'The expected chain can not be empty.' - ); - $this->isChainOfObjects($expectedChain) ? $this->assertDispatchedWithChainOfObjects($command, $expectedChain, $callback) : $this->assertDispatchedWithChainOfClasses($command, $expectedChain, $callback); @@ -590,7 +592,7 @@ public function hasDispatchedAfterResponse($command) public function dispatch($command) { if ($this->shouldFakeJob($command)) { - $this->commands[get_class($command)][] = $command; + $this->commands[get_class($command)][] = $this->getCommandRepresentation($command); } else { return $this->dispatcher->dispatch($command); } @@ -608,7 +610,7 @@ public function dispatch($command) public function dispatchSync($command, $handler = null) { if ($this->shouldFakeJob($command)) { - $this->commandsSync[get_class($command)][] = $command; + $this->commandsSync[get_class($command)][] = $this->getCommandRepresentation($command); } else { return $this->dispatcher->dispatchSync($command, $handler); } @@ -624,7 +626,7 @@ public function dispatchSync($command, $handler = null) public function dispatchNow($command, $handler = null) { if ($this->shouldFakeJob($command)) { - $this->commands[get_class($command)][] = $command; + $this->commands[get_class($command)][] = $this->getCommandRepresentation($command); } else { return $this->dispatcher->dispatchNow($command, $handler); } @@ -639,7 +641,7 @@ public function dispatchNow($command, $handler = null) public function dispatchToQueue($command) { if ($this->shouldFakeJob($command)) { - $this->commands[get_class($command)][] = $command; + $this->commands[get_class($command)][] = $this->getCommandRepresentation($command); } else { return $this->dispatcher->dispatchToQueue($command); } @@ -654,7 +656,7 @@ public function dispatchToQueue($command) public function dispatchAfterResponse($command) { if ($this->shouldFakeJob($command)) { - $this->commandsAfterResponse[get_class($command)][] = $command; + $this->commandsAfterResponse[get_class($command)][] = $this->getCommandRepresentation($command); } else { return $this->dispatcher->dispatch($command); } @@ -759,6 +761,41 @@ protected function shouldDispatchCommand($command) })->isNotEmpty(); } + /** + * Specify if commands should be serialized and restored when being batched. + * + * @param bool $serializeAndRestore + * @return $this + */ + public function serializeAndRestore(bool $serializeAndRestore = true) + { + $this->serializeAndRestore = $serializeAndRestore; + + return $this; + } + + /** + * Serialize and unserialize the command to simulate the queueing process. + * + * @param mixed $command + * @return mixed + */ + protected function serializeAndRestoreCommand($command) + { + return unserialize(serialize($command)); + } + + /** + * Return the command representation that should be stored. + * + * @param mixed $command + * @return mixed + */ + protected function getCommandRepresentation($command) + { + return $this->serializeAndRestore ? $this->serializeAndRestoreCommand($command) : $command; + } + /** * Set the pipes commands should be piped through before dispatching. * diff --git a/core/vendor/illuminate/support/Testing/Fakes/EventFake.php b/core/vendor/illuminate/support/Testing/Fakes/EventFake.php index 09b89adf0f..7a32315ce5 100644 --- a/core/vendor/illuminate/support/Testing/Fakes/EventFake.php +++ b/core/vendor/illuminate/support/Testing/Fakes/EventFake.php @@ -377,7 +377,7 @@ public function forgetPushed() * * @param string|object $event * @param mixed $payload - * @return array|null + * @return mixed */ public function until($event, $payload = []) { diff --git a/core/vendor/illuminate/support/Testing/Fakes/MailFake.php b/core/vendor/illuminate/support/Testing/Fakes/MailFake.php index d47373ffae..a13998cfdd 100644 --- a/core/vendor/illuminate/support/Testing/Fakes/MailFake.php +++ b/core/vendor/illuminate/support/Testing/Fakes/MailFake.php @@ -224,6 +224,56 @@ public function assertNothingQueued() PHPUnit::assertEmpty($this->queuedMailables, 'The following mailables were queued unexpectedly: '.$mailableNames); } + /** + * Assert the total number of mailables that were sent. + * + * @param int $count + * @return void + */ + public function assertSentCount($count) + { + $total = collect($this->mailables)->count(); + + PHPUnit::assertSame( + $count, $total, + "The total number of mailables sent was {$total} instead of {$count}." + ); + } + + /** + * Assert the total number of mailables that were queued. + * + * @param int $count + * @return void + */ + public function assertQueuedCount($count) + { + $total = collect($this->queuedMailables)->count(); + + PHPUnit::assertSame( + $count, $total, + "The total number of mailables queued was {$total} instead of {$count}." + ); + } + + /** + * Assert the total number of mailables that were sent or queued. + * + * @param int $count + * @return void + */ + public function assertOutgoingCount($count) + { + $total = collect($this->mailables) + ->concat($this->queuedMailables) + ->count(); + + PHPUnit::assertSame( + $count, $total, + "The total number of outgoing mailables was {$total} instead of {$count}." + ); + } + /** * Get all of the mailables matching a truth-test callback. * diff --git a/core/vendor/illuminate/support/Testing/Fakes/QueueFake.php b/core/vendor/illuminate/support/Testing/Fakes/QueueFake.php index 7218644ba8..aa63e2e10c 100644 --- a/core/vendor/illuminate/support/Testing/Fakes/QueueFake.php +++ b/core/vendor/illuminate/support/Testing/Fakes/QueueFake.php @@ -43,6 +43,13 @@ class QueueFake extends QueueManager implements Fake, Queue */ protected $jobs = []; + /** + * Indicates if items should be serialized and restored when pushed to the queue. + * + * @var bool + */ + protected bool $serializeAndRestore = false; + /** * Create a new fake queue instance. * @@ -352,7 +359,7 @@ public function push($job, $data = '', $queue = null) } $this->jobs[is_object($job) ? get_class($job) : $job][] = [ - 'job' => $job, + 'job' => $this->serializeAndRestore ? $this->serializeAndRestoreJob($job) : $job, 'queue' => $queue, 'data' => $data, ]; @@ -491,6 +498,30 @@ public function pushedJobs() return $this->jobs; } + /** + * Specify if jobs should be serialized and restored when being "pushed" to the queue. + * + * @param bool $serializeAndRestore + * @return $this + */ + public function serializeAndRestore(bool $serializeAndRestore = true) + { + $this->serializeAndRestore = $serializeAndRestore; + + return $this; + } + + /** + * Serialize and unserialize the job to simulate the queueing process. + * + * @param mixed $job + * @return mixed + */ + protected function serializeAndRestoreJob($job) + { + return unserialize(serialize($job)); + } + /** * Get the connection name for the queue. * diff --git a/core/vendor/illuminate/support/Traits/ForwardsCalls.php b/core/vendor/illuminate/support/Traits/ForwardsCalls.php index e718180980..4c6b610aae 100644 --- a/core/vendor/illuminate/support/Traits/ForwardsCalls.php +++ b/core/vendor/illuminate/support/Traits/ForwardsCalls.php @@ -51,11 +51,7 @@ protected function forwardDecoratedCallTo($object, $method, $parameters) { $result = $this->forwardCallTo($object, $method, $parameters); - if ($result === $object) { - return $this; - } - - return $result; + return $result === $object ? $this : $result; } /** diff --git a/core/vendor/illuminate/support/composer.json b/core/vendor/illuminate/support/composer.json index d7f861d80a..57c92e3662 100644 --- a/core/vendor/illuminate/support/composer.json +++ b/core/vendor/illuminate/support/composer.json @@ -23,7 +23,7 @@ "illuminate/conditionable": "^10.0", "illuminate/contracts": "^10.0", "illuminate/macroable": "^10.0", - "nesbot/carbon": "^2.62.1", + "nesbot/carbon": "^2.67", "voku/portable-ascii": "^2.0" }, "conflict": { diff --git a/core/vendor/illuminate/support/helpers.php b/core/vendor/illuminate/support/helpers.php index 5f4d0d0aaf..11348fa4f2 100644 --- a/core/vendor/illuminate/support/helpers.php +++ b/core/vendor/illuminate/support/helpers.php @@ -314,12 +314,14 @@ function tap($value, $callback = null) /** * Throw the given exception if the given condition is true. * + * @template TException of \Throwable + * * @param mixed $condition - * @param \Throwable|string $exception + * @param TException|class-string|string $exception * @param mixed ...$parameters * @return mixed * - * @throws \Throwable + * @throws TException */ function throw_if($condition, $exception = 'RuntimeException', ...$parameters) { @@ -339,12 +341,14 @@ function throw_if($condition, $exception = 'RuntimeException', ...$parameters) /** * Throw the given exception unless the given condition is true. * + * @template TException of \Throwable + * * @param mixed $condition - * @param \Throwable|string $exception + * @param TException|class-string|string $exception * @param mixed ...$parameters * @return mixed * - * @throws \Throwable + * @throws TException */ function throw_unless($condition, $exception = 'RuntimeException', ...$parameters) { diff --git a/core/vendor/illuminate/translation/CreatesPotentiallyTranslatedStrings.php b/core/vendor/illuminate/translation/CreatesPotentiallyTranslatedStrings.php new file mode 100644 index 0000000000..95e086f761 --- /dev/null +++ b/core/vendor/illuminate/translation/CreatesPotentiallyTranslatedStrings.php @@ -0,0 +1,54 @@ + $this->messages[] = $message + : fn ($message) => $this->messages[$attribute] = $message; + + return new class($message ?? $attribute, $this->validator->getTranslator(), $destructor) extends PotentiallyTranslatedString + { + /** + * The callback to call when the object destructs. + * + * @var \Closure + */ + protected $destructor; + + /** + * Create a new pending potentially translated string. + * + * @param string $message + * @param \Illuminate\Contracts\Translation\Translator $translator + * @param \Closure $destructor + */ + public function __construct($message, $translator, $destructor) + { + parent::__construct($message, $translator); + + $this->destructor = $destructor; + } + + /** + * Handle the object's destruction. + * + * @return void + */ + public function __destruct() + { + ($this->destructor)($this->toString()); + } + }; + } +} diff --git a/core/vendor/illuminate/translation/Translator.php b/core/vendor/illuminate/translation/Translator.php index ae07414420..e29ba93a2d 100644 --- a/core/vendor/illuminate/translation/Translator.php +++ b/core/vendor/illuminate/translation/Translator.php @@ -101,7 +101,18 @@ public function hasForLocale($key, $locale = null) */ public function has($key, $locale = null, $fallback = true) { - return $this->get($key, [], $locale, $fallback) !== $key; + $locale = $locale ?: $this->locale; + + $line = $this->get($key, [], $locale, $fallback); + + // For JSON translations, the loaded files will contain the correct line. + // Otherwise, we must assume we are handling typical translation file + // and check if the returned line is not the same as the given key. + if (! is_null($this->loaded['*']['*'][$locale][$key] ?? null)) { + return true; + } + + return $line !== $key; } /** diff --git a/core/vendor/illuminate/translation/lang/en/validation.php b/core/vendor/illuminate/translation/lang/en/validation.php index 99f7c611ca..4f8f726210 100644 --- a/core/vendor/illuminate/translation/lang/en/validation.php +++ b/core/vendor/illuminate/translation/lang/en/validation.php @@ -32,6 +32,7 @@ 'string' => 'The :attribute field must be between :min and :max characters.', ], 'boolean' => 'The :attribute field must be true or false.', + 'can' => 'The :attribute field contains an unauthorized value.', 'confirmed' => 'The :attribute field confirmation does not match.', 'current_password' => 'The password is incorrect.', 'date' => 'The :attribute field must be a valid date.', diff --git a/core/vendor/illuminate/validation/ClosureValidationRule.php b/core/vendor/illuminate/validation/ClosureValidationRule.php index 8d53cdead7..fc57dadd56 100644 --- a/core/vendor/illuminate/validation/ClosureValidationRule.php +++ b/core/vendor/illuminate/validation/ClosureValidationRule.php @@ -4,10 +4,12 @@ use Illuminate\Contracts\Validation\Rule as RuleContract; use Illuminate\Contracts\Validation\ValidatorAwareRule; -use Illuminate\Translation\PotentiallyTranslatedString; +use Illuminate\Translation\CreatesPotentiallyTranslatedStrings; class ClosureValidationRule implements RuleContract, ValidatorAwareRule { + use CreatesPotentiallyTranslatedStrings; + /** * The callback that validates the attribute. * @@ -89,52 +91,4 @@ public function setValidator($validator) return $this; } - - /** - * Create a pending potentially translated string. - * - * @param string $attribute - * @param string|null $message - * @return \Illuminate\Translation\PotentiallyTranslatedString - */ - protected function pendingPotentiallyTranslatedString($attribute, $message) - { - $destructor = $message === null - ? fn ($message) => $this->messages[] = $message - : fn ($message) => $this->messages[$attribute] = $message; - - return new class($message ?? $attribute, $this->validator->getTranslator(), $destructor) extends PotentiallyTranslatedString - { - /** - * The callback to call when the object destructs. - * - * @var \Closure - */ - protected $destructor; - - /** - * Create a new pending potentially translated string. - * - * @param string $message - * @param \Illuminate\Contracts\Translation\Translator $translator - * @param \Closure $destructor - */ - public function __construct($message, $translator, $destructor) - { - parent::__construct($message, $translator); - - $this->destructor = $destructor; - } - - /** - * Handle the object's destruction. - * - * @return void - */ - public function __destruct() - { - ($this->destructor)($this->toString()); - } - }; - } } diff --git a/core/vendor/illuminate/validation/Concerns/FormatsMessages.php b/core/vendor/illuminate/validation/Concerns/FormatsMessages.php index 0758819daa..4d4042a4e1 100644 --- a/core/vendor/illuminate/validation/Concerns/FormatsMessages.php +++ b/core/vendor/illuminate/validation/Concerns/FormatsMessages.php @@ -442,6 +442,10 @@ public function getDisplayableValue($attribute, $value) return $this->customValues[$attribute][$value]; } + if (is_array($value)) { + return 'array'; + } + $key = "validation.values.{$attribute}.{$value}"; if (($line = $this->translator->get($key)) !== $key) { diff --git a/core/vendor/illuminate/validation/Concerns/ValidatesAttributes.php b/core/vendor/illuminate/validation/Concerns/ValidatesAttributes.php index 25146fc1bd..44545565c2 100644 --- a/core/vendor/illuminate/validation/Concerns/ValidatesAttributes.php +++ b/core/vendor/illuminate/validation/Concerns/ValidatesAttributes.php @@ -599,7 +599,9 @@ public function validateDecimal($attribute, $value, $parameters) $matches = []; - preg_match('/^[+-]?\d*.(\d*)$/', $value, $matches); + if (preg_match('/^[+-]?\d*\.?(\d*)$/', $value, $matches) !== 1) { + return false; + } $decimals = strlen(end($matches)); @@ -2302,38 +2304,12 @@ public function validateTimezone($attribute, $value, $parameters = []) * * @param string $attribute * @param mixed $value + * @param array $parameters * @return bool */ - public function validateUrl($attribute, $value) + public function validateUrl($attribute, $value, $parameters = []) { - if (! is_string($value)) { - return false; - } - - /* - * This pattern is derived from Symfony\Component\Validator\Constraints\UrlValidator (5.0.7). - * - * (c) Fabien Potencier http://symfony.com - */ - $pattern = '~^ - (aaa|aaas|about|acap|acct|acd|acr|adiumxtra|adt|afp|afs|aim|amss|android|appdata|apt|ark|attachment|aw|barion|beshare|bitcoin|bitcoincash|blob|bolo|browserext|calculator|callto|cap|cast|casts|chrome|chrome-extension|cid|coap|coap\+tcp|coap\+ws|coaps|coaps\+tcp|coaps\+ws|com-eventbrite-attendee|content|conti|crid|cvs|dab|data|dav|diaspora|dict|did|dis|dlna-playcontainer|dlna-playsingle|dns|dntp|dpp|drm|drop|dtn|dvb|ed2k|elsi|example|facetime|fax|feed|feedready|file|filesystem|finger|first-run-pen-experience|fish|fm|ftp|fuchsia-pkg|geo|gg|git|gizmoproject|go|gopher|graph|gtalk|h323|ham|hcap|hcp|http|https|hxxp|hxxps|hydrazone|iax|icap|icon|im|imap|info|iotdisco|ipn|ipp|ipps|irc|irc6|ircs|iris|iris\.beep|iris\.lwz|iris\.xpc|iris\.xpcs|isostore|itms|jabber|jar|jms|keyparc|lastfm|ldap|ldaps|leaptofrogans|lorawan|lvlt|magnet|mailserver|mailto|maps|market|message|mid|mms|modem|mongodb|moz|ms-access|ms-browser-extension|ms-calculator|ms-drive-to|ms-enrollment|ms-excel|ms-eyecontrolspeech|ms-gamebarservices|ms-gamingoverlay|ms-getoffice|ms-help|ms-infopath|ms-inputapp|ms-lockscreencomponent-config|ms-media-stream-id|ms-mixedrealitycapture|ms-mobileplans|ms-officeapp|ms-people|ms-project|ms-powerpoint|ms-publisher|ms-restoretabcompanion|ms-screenclip|ms-screensketch|ms-search|ms-search-repair|ms-secondary-screen-controller|ms-secondary-screen-setup|ms-settings|ms-settings-airplanemode|ms-settings-bluetooth|ms-settings-camera|ms-settings-cellular|ms-settings-cloudstorage|ms-settings-connectabledevices|ms-settings-displays-topology|ms-settings-emailandaccounts|ms-settings-language|ms-settings-location|ms-settings-lock|ms-settings-nfctransactions|ms-settings-notifications|ms-settings-power|ms-settings-privacy|ms-settings-proximity|ms-settings-screenrotation|ms-settings-wifi|ms-settings-workplace|ms-spd|ms-sttoverlay|ms-transit-to|ms-useractivityset|ms-virtualtouchpad|ms-visio|ms-walk-to|ms-whiteboard|ms-whiteboard-cmd|ms-word|msnim|msrp|msrps|mss|mtqp|mumble|mupdate|mvn|news|nfs|ni|nih|nntp|notes|ocf|oid|onenote|onenote-cmd|opaquelocktoken|openpgp4fpr|pack|palm|paparazzi|payto|pkcs11|platform|pop|pres|prospero|proxy|pwid|psyc|pttp|qb|query|redis|rediss|reload|res|resource|rmi|rsync|rtmfp|rtmp|rtsp|rtsps|rtspu|s3|secondlife|service|session|sftp|sgn|shttp|sieve|simpleledger|sip|sips|skype|smb|sms|smtp|snews|snmp|soap\.beep|soap\.beeps|soldat|spiffe|spotify|ssh|steam|stun|stuns|submit|svn|tag|teamspeak|tel|teliaeid|telnet|tftp|tg|things|thismessage|tip|tn3270|tool|ts3server|turn|turns|tv|udp|unreal|urn|ut2004|v-event|vemmi|ventrilo|videotex|vnc|view-source|wais|webcal|wpid|ws|wss|wtai|wyciwyg|xcon|xcon-userid|xfire|xmlrpc\.beep|xmlrpc\.beeps|xmpp|xri|ymsgr|z39\.50|z39\.50r|z39\.50s):// # protocol - (((?:[\_\.\pL\pN-]|%[0-9A-Fa-f]{2})+:)?((?:[\_\.\pL\pN-]|%[0-9A-Fa-f]{2})+)@)? # basic auth - ( - ([\pL\pN\pS\-\_\.])+(\.?([\pL\pN]|xn\-\-[\pL\pN-]+)+\.?) # a domain name - | # or - \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} # an IP address - | # or - \[ - (?:(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){6})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:::(?:(?:(?:[0-9a-f]{1,4})):){5})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){4})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,1}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){3})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,2}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){2})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,3}(?:(?:[0-9a-f]{1,4})))?::(?:(?:[0-9a-f]{1,4})):)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,4}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,5}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,6}(?:(?:[0-9a-f]{1,4})))?::)))) - \] # an IPv6 address - ) - (:[0-9]+)? # a port (optional) - (?:/ (?:[\pL\pN\-._\~!$&\'()*+,;=:@]|%[0-9A-Fa-f]{2})* )* # a path - (?:\? (?:[\pL\pN\-._\~!$&\'\[\]()*+,;=:@/?]|%[0-9A-Fa-f]{2})* )? # a query (optional) - (?:\# (?:[\pL\pN\-._\~!$&\'()*+,;=:@/?]|%[0-9A-Fa-f]{2})* )? # a fragment (optional) - $~ixu'; - - return preg_match($pattern, $value) > 0; + return Str::isUrl($value, $parameters); } /** @@ -2376,7 +2352,7 @@ protected function getSize($attribute, $value) // is the size. If it is a file, we take kilobytes, and for a string the // entire length of the string will be considered the attribute size. if (is_numeric($value) && $hasNumeric) { - return $this->trim($value); + return $this->ensureExponentWithinAllowedRange($attribute, $this->trim($value)); } elseif (is_array($value)) { return count($value); } elseif ($value instanceof File) { @@ -2493,4 +2469,34 @@ protected function trim($value) { return is_string($value) ? trim($value) : $value; } + + /** + * Ensure the exponent is within the allowed range. + * + * @param string $attribute + * @param mixed $value + * @return mixed + */ + protected function ensureExponentWithinAllowedRange($attribute, $value) + { + $stringValue = (string) $value; + + if (! is_numeric($value) || ! Str::contains($stringValue, 'e', ignoreCase: true)) { + return $value; + } + + $scale = (int) (Str::contains($stringValue, 'e') + ? Str::after($stringValue, 'e') + : Str::after($stringValue, 'E')); + + $withinRange = ( + $this->ensureExponentWithinAllowedRangeUsing ?? fn ($scale) => $scale <= 1000 && $scale >= -1000 + )($scale, $attribute, $value); + + if (! $withinRange) { + throw new MathException('Scientific notation exponent outside of allowed range.'); + } + + return $value; + } } diff --git a/core/vendor/illuminate/validation/InvokableValidationRule.php b/core/vendor/illuminate/validation/InvokableValidationRule.php index 4fdadb6fb8..16947279cc 100644 --- a/core/vendor/illuminate/validation/InvokableValidationRule.php +++ b/core/vendor/illuminate/validation/InvokableValidationRule.php @@ -8,10 +8,12 @@ use Illuminate\Contracts\Validation\Rule; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Contracts\Validation\ValidatorAwareRule; -use Illuminate\Translation\PotentiallyTranslatedString; +use Illuminate\Translation\CreatesPotentiallyTranslatedStrings; class InvokableValidationRule implements Rule, ValidatorAwareRule { + use CreatesPotentiallyTranslatedStrings; + /** * The invokable that validates the attribute. * @@ -67,7 +69,8 @@ protected function __construct(ValidationRule|InvokableRule $invokable) public static function make($invokable) { if ($invokable->implicit ?? false) { - return new class($invokable) extends InvokableValidationRule implements ImplicitRule {}; + return new class($invokable) extends InvokableValidationRule implements ImplicitRule { + }; } return new InvokableValidationRule($invokable); @@ -150,52 +153,4 @@ public function setValidator($validator) return $this; } - - /** - * Create a pending potentially translated string. - * - * @param string $attribute - * @param string|null $message - * @return \Illuminate\Translation\PotentiallyTranslatedString - */ - protected function pendingPotentiallyTranslatedString($attribute, $message) - { - $destructor = $message === null - ? fn ($message) => $this->messages[] = $message - : fn ($message) => $this->messages[$attribute] = $message; - - return new class($message ?? $attribute, $this->validator->getTranslator(), $destructor) extends PotentiallyTranslatedString - { - /** - * The callback to call when the object destructs. - * - * @var \Closure - */ - protected $destructor; - - /** - * Create a new pending potentially translated string. - * - * @param string $message - * @param \Illuminate\Contracts\Translation\Translator $translator - * @param \Closure $destructor - */ - public function __construct($message, $translator, $destructor) - { - parent::__construct($message, $translator); - - $this->destructor = $destructor; - } - - /** - * Handle the object's destruction. - * - * @return void - */ - public function __destruct() - { - ($this->destructor)($this->toString()); - } - }; - } } diff --git a/core/vendor/illuminate/validation/NestedRules.php b/core/vendor/illuminate/validation/NestedRules.php index 2febe9be44..81870ccb0e 100644 --- a/core/vendor/illuminate/validation/NestedRules.php +++ b/core/vendor/illuminate/validation/NestedRules.php @@ -47,9 +47,11 @@ public function compile($attribute, $value, $data = null) $nested[$attribute.'.'.$key] = $rule; } - return $parser->explode($nested); + $rules = $nested; + } else { + $rules = [$attribute => $rules]; } - return $parser->explode([$attribute => $rules]); + return $parser->explode(ValidationRuleParser::filterConditionalRules($rules, $data)); } } diff --git a/core/vendor/illuminate/validation/Rule.php b/core/vendor/illuminate/validation/Rule.php index a921d8cd81..7f20be3e6b 100644 --- a/core/vendor/illuminate/validation/Rule.php +++ b/core/vendor/illuminate/validation/Rule.php @@ -4,6 +4,7 @@ use Illuminate\Contracts\Support\Arrayable; use Illuminate\Support\Traits\Macroable; +use Illuminate\Validation\Rules\Can; use Illuminate\Validation\Rules\Dimensions; use Illuminate\Validation\Rules\Enum; use Illuminate\Validation\Rules\ExcludeIf; @@ -20,6 +21,18 @@ class Rule { use Macroable; + /** + * Get a can constraint builder instance. + * + * @param string $ability + * @param mixed ...$arguments + * @return \Illuminate\Validation\Rules\Can + */ + public static function can($ability, ...$arguments) + { + return new Can($ability, $arguments); + } + /** * Create a new conditional rule set. * diff --git a/core/vendor/illuminate/validation/Rules/Can.php b/core/vendor/illuminate/validation/Rules/Can.php new file mode 100644 index 0000000000..6732bc2f6c --- /dev/null +++ b/core/vendor/illuminate/validation/Rules/Can.php @@ -0,0 +1,65 @@ +ability = $ability; + $this->arguments = $arguments; + } + + /** + * Determine if the validation rule passes. + * + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function passes($attribute, $value) + { + $arguments = $this->arguments; + + $model = array_shift($arguments); + + return Gate::allows($this->ability, array_filter([$model, ...$arguments, $value])); + } + + /** + * Get the validation error message. + * + * @return array + */ + public function message() + { + $message = trans('validation.can'); + + return $message === 'validation.can' + ? ['The :attribute field contains an unauthorized value.'] + : $message; + } +} diff --git a/core/vendor/illuminate/validation/Rules/DatabaseRule.php b/core/vendor/illuminate/validation/Rules/DatabaseRule.php index d641dcf136..826e4f5a48 100644 --- a/core/vendor/illuminate/validation/Rules/DatabaseRule.php +++ b/core/vendor/illuminate/validation/Rules/DatabaseRule.php @@ -2,6 +2,7 @@ namespace Illuminate\Validation\Rules; +use BackedEnum; use Closure; use Illuminate\Contracts\Support\Arrayable; use Illuminate\Database\Eloquent\Model; @@ -81,7 +82,7 @@ public function resolveTableName($table) * Set a "where" constraint on the query. * * @param \Closure|string $column - * @param \Illuminate\Contracts\Support\Arrayable|array|string|int|bool|null $value + * @param \Illuminate\Contracts\Support\Arrayable|\BackedEnum|\Closure|array|string|int|bool|null $value * @return $this */ public function where($column, $value = null) @@ -98,6 +99,10 @@ public function where($column, $value = null) return $this->whereNull($column); } + if ($value instanceof BackedEnum) { + $value = $value->value; + } + $this->wheres[] = compact('column', 'value'); return $this; @@ -107,7 +112,7 @@ public function where($column, $value = null) * Set a "where not" constraint on the query. * * @param string $column - * @param \Illuminate\Contracts\Support\Arrayable|array|string $value + * @param \Illuminate\Contracts\Support\Arrayable|\BackedEnum|array|string $value * @return $this */ public function whereNot($column, $value) @@ -116,6 +121,10 @@ public function whereNot($column, $value) return $this->whereNotIn($column, $value); } + if ($value instanceof BackedEnum) { + $value = $value->value; + } + return $this->where($column, '!'.$value); } @@ -145,7 +154,7 @@ public function whereNotNull($column) * Set a "where in" constraint on the query. * * @param string $column - * @param \Illuminate\Contracts\Support\Arrayable|array $values + * @param \Illuminate\Contracts\Support\Arrayable|\BackedEnum|array $values * @return $this */ public function whereIn($column, $values) @@ -159,7 +168,7 @@ public function whereIn($column, $values) * Set a "where not in" constraint on the query. * * @param string $column - * @param \Illuminate\Contracts\Support\Arrayable|array $values + * @param \Illuminate\Contracts\Support\Arrayable|\BackedEnum|array $values * @return $this */ public function whereNotIn($column, $values) diff --git a/core/vendor/illuminate/validation/Rules/File.php b/core/vendor/illuminate/validation/Rules/File.php index c97f68e476..38448b963c 100644 --- a/core/vendor/illuminate/validation/Rules/File.php +++ b/core/vendor/illuminate/validation/Rules/File.php @@ -7,6 +7,7 @@ use Illuminate\Contracts\Validation\ValidatorAwareRule; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Validator; +use Illuminate\Support\Str; use Illuminate\Support\Traits\Conditionable; use Illuminate\Support\Traits\Macroable; use InvalidArgumentException; @@ -131,13 +132,13 @@ public static function types($mimetypes) /** * Indicate that the uploaded file should be exactly a certain size in kilobytes. * - * @param int $kilobytes + * @param string|int $size * @return $this */ - public function size($kilobytes) + public function size($size) { - $this->minimumFileSize = $kilobytes; - $this->maximumFileSize = $kilobytes; + $this->minimumFileSize = $this->toKilobytes($size); + $this->maximumFileSize = $this->minimumFileSize; return $this; } @@ -145,14 +146,14 @@ public function size($kilobytes) /** * Indicate that the uploaded file should be between a minimum and maximum size in kilobytes. * - * @param int $minKilobytes - * @param int $maxKilobytes + * @param string|int $minSize + * @param string|int $maxSize * @return $this */ - public function between($minKilobytes, $maxKilobytes) + public function between($minSize, $maxSize) { - $this->minimumFileSize = $minKilobytes; - $this->maximumFileSize = $maxKilobytes; + $this->minimumFileSize = $this->toKilobytes($minSize); + $this->maximumFileSize = $this->toKilobytes($maxSize); return $this; } @@ -160,12 +161,12 @@ public function between($minKilobytes, $maxKilobytes) /** * Indicate that the uploaded file should be no less than the given number of kilobytes. * - * @param int $kilobytes + * @param string|int $size * @return $this */ - public function min($kilobytes) + public function min($size) { - $this->minimumFileSize = $kilobytes; + $this->minimumFileSize = $this->toKilobytes($size); return $this; } @@ -173,16 +174,39 @@ public function min($kilobytes) /** * Indicate that the uploaded file should be no more than the given number of kilobytes. * - * @param int $kilobytes + * @param string|int $size * @return $this */ - public function max($kilobytes) + public function max($size) { - $this->maximumFileSize = $kilobytes; + $this->maximumFileSize = $this->toKilobytes($size); return $this; } + /** + * Convert a potentially human-friendly file size to kilobytes. + * + * @param string|int $size + * @return mixed + */ + protected function toKilobytes($size) + { + if (! is_string($size)) { + return $size; + } + + $value = floatval($size); + + return round(match (true) { + Str::endsWith($size, 'kb') => $value * 1, + Str::endsWith($size, 'mb') => $value * 1000, + Str::endsWith($size, 'gb') => $value * 1000000, + Str::endsWith($size, 'tb') => $value * 1000000000, + default => throw new InvalidArgumentException('Invalid file size suffix.'), + }); + } + /** * Specify additional validation rules that should be merged with the default rules during validation. * diff --git a/core/vendor/illuminate/validation/ValidationRuleParser.php b/core/vendor/illuminate/validation/ValidationRuleParser.php index bba1b57565..ec70a5260b 100644 --- a/core/vendor/illuminate/validation/ValidationRuleParser.php +++ b/core/vendor/illuminate/validation/ValidationRuleParser.php @@ -310,7 +310,7 @@ protected static function normalizeRule($rule) } /** - * Expand and conditional rules in the given array of rules. + * Expand the conditional rules in the given array of rules. * * @param array $rules * @param array $data diff --git a/core/vendor/illuminate/validation/ValidationServiceProvider.php b/core/vendor/illuminate/validation/ValidationServiceProvider.php index 936235f9e7..f5a631a69a 100644 --- a/core/vendor/illuminate/validation/ValidationServiceProvider.php +++ b/core/vendor/illuminate/validation/ValidationServiceProvider.php @@ -73,8 +73,6 @@ protected function registerUncompromisedVerifier() */ public function provides() { - return [ - 'validator', 'validation.presence', - ]; + return ['validator', 'validation.presence', UncompromisedVerifier::class]; } } diff --git a/core/vendor/illuminate/validation/Validator.php b/core/vendor/illuminate/validation/Validator.php index 9cae476434..4a7b5f99fe 100644 --- a/core/vendor/illuminate/validation/Validator.php +++ b/core/vendor/illuminate/validation/Validator.php @@ -295,6 +295,13 @@ class Validator implements ValidatorContract */ protected $exception = ValidationException::class; + /** + * The custom callback to determine if an exponent is within allowed range. + * + * @var callable|null + */ + protected $ensureExponentWithinAllowedRangeUsing; + /** * Create a new Validator instance. * @@ -430,8 +437,6 @@ public function passes() $this->validateAttribute($attribute, $rule); if ($this->shouldBeExcluded($attribute)) { - $this->removeAttribute($attribute); - break; } @@ -441,6 +446,12 @@ public function passes() } } + foreach ($this->rules as $attribute => $rules) { + if ($this->shouldBeExcluded($attribute)) { + $this->removeAttribute($attribute); + } + } + // Here we will spin through all of the "after" hooks on this validator and // fire them off. This gives the callbacks a chance to perform all kinds // of other validation that needs to get wrapped up in this operation. @@ -1491,6 +1502,19 @@ public function setException($exception) return $this; } + /** + * Ensure exponents are within range using the given callback. + * + * @param callable(int $scale, string $attribute, mixed $value) $callback + * @return $this + */ + public function ensureExponentWithinAllowedRangeUsing($callback) + { + $this->ensureExponentWithinAllowedRangeUsing = $callback; + + return $this; + } + /** * Get the Translator implementation. * diff --git a/core/vendor/illuminate/view/Compilers/BladeCompiler.php b/core/vendor/illuminate/view/Compilers/BladeCompiler.php index 9edbc5cecc..62005da346 100644 --- a/core/vendor/illuminate/view/Compilers/BladeCompiler.php +++ b/core/vendor/illuminate/view/Compilers/BladeCompiler.php @@ -56,6 +56,13 @@ class BladeCompiler extends Compiler implements CompilerInterface */ protected $conditions = []; + /** + * The registered string preparation callbacks. + * + * @var array + */ + protected $prepareStringsForCompilationUsing = []; + /** * All of the registered precompilers. * @@ -249,11 +256,17 @@ public function compileString($value) { [$this->footer, $result] = [[], '']; + $value = $this->storeUncompiledBlocks($value); + + foreach ($this->prepareStringsForCompilationUsing as $callback) { + $value = $callback($value); + } + // First we will compile the Blade component tags. This is a precompile style // step which compiles the component Blade tags into @component directives // that may be used by Blade. Then we should call any other precompilers. $value = $this->compileComponentTags( - $this->compileComments($this->storeUncompiledBlocks($value)) + $this->compileComments($value) ); foreach ($this->precompilers as $precompiler) { @@ -947,6 +960,19 @@ public function getCustomDirectives() return $this->customDirectives; } + /** + * Indicate that the following callable should be used to prepare strings for compilation. + * + * @param callable $callback + * @return $this + */ + public function prepareStringsForCompilationUsing(callable $callback) + { + $this->prepareStringsForCompilationUsing[] = $callback; + + return $this; + } + /** * Register a new precompiler. * diff --git a/core/vendor/illuminate/view/Compilers/ComponentTagCompiler.php b/core/vendor/illuminate/view/Compilers/ComponentTagCompiler.php index f052cf3bcc..8b36076212 100644 --- a/core/vendor/illuminate/view/Compilers/ComponentTagCompiler.php +++ b/core/vendor/illuminate/view/Compilers/ComponentTagCompiler.php @@ -128,7 +128,7 @@ protected function compileOpeningTags(string $value) ) | (?: - [\w\-:.@]+ + [\w\-:.@%]+ ( = (?: @@ -193,7 +193,7 @@ protected function compileSelfClosingTags(string $value) ) | (?: - [\w\-:.@]+ + [\w\-:.@%]+ ( = (?: @@ -588,7 +588,7 @@ protected function getAttributesFromAttributeString(string $attributeString) $attributeString = $this->parseBindAttributes($attributeString); $pattern = '/ - (?[\w\-:.@]+) + (?[\w\-:.@%]+) ( = (? diff --git a/core/vendor/illuminate/view/ComponentAttributeBag.php b/core/vendor/illuminate/view/ComponentAttributeBag.php index ab100cf3c1..1d0a790b42 100644 --- a/core/vendor/illuminate/view/ComponentAttributeBag.php +++ b/core/vendor/illuminate/view/ComponentAttributeBag.php @@ -61,12 +61,43 @@ public function get($key, $default = null) /** * Determine if a given attribute exists in the attribute array. * - * @param string $key + * @param array|string $key * @return bool */ public function has($key) { - return array_key_exists($key, $this->attributes); + $keys = is_array($key) ? $key : func_get_args(); + + foreach ($keys as $value) { + if (! array_key_exists($value, $this->attributes)) { + return false; + } + } + + return true; + } + + /** + * Determine if any of the keys exist in the attribute array. + * + * @param array|string $key + * @return bool + */ + public function hasAny($key) + { + if (! count($this->attributes)) { + return false; + } + + $keys = is_array($key) ? $key : func_get_args(); + + foreach ($keys as $value) { + if ($this->has($value)) { + return true; + } + } + + return false; } /** @@ -77,7 +108,7 @@ public function has($key) */ public function missing($key) { - return ! $this->has($key, $this->attributes); + return ! $this->has($key); } /** diff --git a/core/vendor/illuminate/view/Concerns/ManagesComponents.php b/core/vendor/illuminate/view/Concerns/ManagesComponents.php index f24908f1e9..456e6a044e 100644 --- a/core/vendor/illuminate/view/Concerns/ManagesComponents.php +++ b/core/vendor/illuminate/view/Concerns/ManagesComponents.php @@ -5,7 +5,6 @@ use Illuminate\Contracts\Support\Htmlable; use Illuminate\Contracts\View\View; use Illuminate\Support\Arr; -use Illuminate\Support\HtmlString; use Illuminate\View\ComponentSlot; trait ManagesComponents @@ -115,7 +114,7 @@ public function renderComponent() */ protected function componentData() { - $defaultSlot = new HtmlString(trim(ob_get_clean())); + $defaultSlot = new ComponentSlot(trim(ob_get_clean())); $slots = array_merge([ '__default' => $defaultSlot, diff --git a/core/vendor/illuminate/view/Engines/CompilerEngine.php b/core/vendor/illuminate/view/Engines/CompilerEngine.php index 97fb097115..c69eab4acb 100644 --- a/core/vendor/illuminate/view/Engines/CompilerEngine.php +++ b/core/vendor/illuminate/view/Engines/CompilerEngine.php @@ -3,8 +3,10 @@ namespace Illuminate\View\Engines; use Illuminate\Filesystem\Filesystem; +use Illuminate\Http\Exceptions\HttpResponseException; use Illuminate\View\Compilers\CompilerInterface; use Illuminate\View\ViewException; +use Symfony\Component\HttpKernel\Exception\HttpException; use Throwable; class CompilerEngine extends PhpEngine @@ -100,6 +102,10 @@ public function get($path, array $data = []) */ protected function handleViewException(Throwable $e, $obLevel) { + if ($e instanceof HttpException || $e instanceof HttpResponseException) { + parent::handleViewException($e, $obLevel); + } + $e = new ViewException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e); parent::handleViewException($e, $obLevel); diff --git a/core/vendor/james-heinrich/phpthumb/demo/phpThumb.demo.demo.php b/core/vendor/james-heinrich/phpthumb/demo/phpThumb.demo.demo.php index e2cc406678..b23c335c33 100644 --- a/core/vendor/james-heinrich/phpthumb/demo/phpThumb.demo.demo.php +++ b/core/vendor/james-heinrich/phpthumb/demo/phpThumb.demo.demo.php @@ -99,7 +99,8 @@ $img['anigif'] = 'images/animaple.gif'; $img['alpha'] = 'images/alpha.png'; //$img['alpha'] = 'images/North15.gif'; -$img['whitespace'] = 'images/whitespace.jpg'; +// $img['whitespace'] = 'images/whitespace.jpg'; // missing +$img['whitespace'] = 'images/bunnies.jpg'; $img['mask1'] = 'images/mask04.png'; $img['mask2'] = 'images/mask05.png'; @@ -135,7 +136,7 @@ $Examples[] = array('getstrings' => array('src='.$img['square'].'&w=300&q=10&sia=custom-filename'), 'description' => 'width=300px, JPEGquality=10%, SaveImageAs=custom-filename'); $Examples[] = array('getstrings' => array('src='.$img['watermark'].'&w=400&aoe=1&bg=ffffff'), 'description' => 'width=400px, AllowOutputEnlargement enabled'); $Examples[] = array('getstrings' => array('src='.$img['square'].'&w=250&sx=600&sy=5&sw=100&sh=100&aoe=1'), 'description' => 'section from (600x5 - 700x105) cropped and enlarged by 250%, AllowOutputEnlargement enabled'); -$Examples[] = array('getstrings' => array('src='.urlencode('http://www.silisoftware.com/images/SiliSoft.gif').'&w=100'), 'description' => 'HTTP source image'.$only_gd); +$Examples[] = array('getstrings' => array('src='.urlencode('https://www.silisoftware.com/images/SiliSoft.gif').'&w=100'), 'description' => 'HTTP source image'.$only_gd); $Examples[] = array('getstrings' => array('src='.$img['square'].'&w=300&fltr[]=wmi|'.$img['watermark'].'|BL'), 'description' => 'width=300px, watermark (bottom-left, 75% opacity)'.$only_gd); $Examples[] = array('getstrings' => array('src='.$img['square'].'&w=300&fltr[]=wmi|'.$img['watermark'].'|*|25'), 'description' => 'width=300px, watermark (tiled, 25% opacity)'.$only_gd); $Examples[] = array('getstrings' => array('src='.$img['square'].'&w=300&fltr[]=wmi|'.$img['watermark'].'|75x50|80|75|75|45'), 'description' => 'width=300px, watermark (absolute position (75x50), rotation (45), scaling (75x75)))'.$only_gd); diff --git a/core/vendor/james-heinrich/phpthumb/docs/phpthumb.changelog.txt b/core/vendor/james-heinrich/phpthumb/docs/phpthumb.changelog.txt index 263ff09aa0..b17ec0d477 100644 --- a/core/vendor/james-heinrich/phpthumb/docs/phpthumb.changelog.txt +++ b/core/vendor/james-heinrich/phpthumb/docs/phpthumb.changelog.txt @@ -7,6 +7,15 @@ ¤ = structure change or important new feature * = less important new feature or change +v1.7.21-202307141720 + * [bugfix: #215] PHP 8.2 compatibility + * [bugfix: #214] PHP 8.2 compatibility (Dynamic Properties are deprecated) + * [bugfix: #213] PHP 8.2 compatibility + * [bugfix: #212] PHP 8.2 compatibility + * [bugfix: #211] quality parameter fix for ImageMagick processing + * [bugfix: #208] PHP 8.2 compatibility + * [bugfix: #207] PHP 8.2 compatibility + v1.7.20-202212091316 * [bugfix: #203] Support https in file_get_contents polyfill * [bugfix: #202] Test if property is set when testing array (@ operator fix) diff --git a/core/vendor/james-heinrich/phpthumb/phpThumb.config.php.default b/core/vendor/james-heinrich/phpthumb/phpThumb.config.php.default index 82001ec38c..0819c275f6 100644 --- a/core/vendor/james-heinrich/phpthumb/phpThumb.config.php.default +++ b/core/vendor/james-heinrich/phpthumb/phpThumb.config.php.default @@ -242,6 +242,10 @@ $PHPTHUMB_DEFAULTS_DISABLEGETPARAMS = false; // if true, GETstring parameters w //$PHPTHUMB_DEFAULTS['fltr'] = array('blur|10'); //$PHPTHUMB_DEFAULTS['q'] = 90; +// benchmark by https://www.industrialempathy.com/posts/avif-webp-quality-settings/ suggests: +// JPEG quality 50 60 70 80 +// AVIF quality 48 51 56 64 +// WebP quality 55 64 72 82 /* END DEFAULT PARAMETERS SECTION */ diff --git a/core/vendor/james-heinrich/phpthumb/phpThumb.php b/core/vendor/james-heinrich/phpthumb/phpThumb.php index 08717f18ad..bce7c8de1f 100644 --- a/core/vendor/james-heinrich/phpthumb/phpThumb.php +++ b/core/vendor/james-heinrich/phpthumb/phpThumb.php @@ -41,7 +41,7 @@ function SendSaveAsFileHeaderIfNeeded($getimagesize=false) { //if (empty($_GET['sia']) && empty($_GET['down']) && !empty($phpThumb->thumbnail_image_width) && !empty($phpThumb->thumbnail_image_height)) { if (empty($_GET['sia']) && empty($_GET['down']) && !empty($getimagesize[0]) && !empty($getimagesize[1])) { // if we know the output image dimensions we can generate a better default filename - $downloadfilename = phpthumb_functions::SanitizeFilename((!empty($phpThumb->src) ? basename($phpThumb->src) : md5($phpThumb->rawImageData)).'-'.intval($getimagesize[0]).'x'.intval($getimagesize[1]).'.'.(!empty($_GET['f']) ? $_GET['f'] : 'jpg')); + $downloadfilename = phpthumb_functions::SanitizeFilename((!empty($phpThumb->src) ? basename($phpThumb->src) : md5((string)$phpThumb->rawImageData)).'-'.intval($getimagesize[0]).'x'.intval($getimagesize[1]).'.'.(!empty($_GET['f']) ? $_GET['f'] : 'jpg')); } if (!empty($downloadfilename)) { $phpThumb->DebugMessage('SendSaveAsFileHeaderIfNeeded() sending header: Content-Disposition: '.(!empty($_GET['down']) ? 'attachment' : 'inline').'; filename="'.$downloadfilename.'"', __FILE__, __LINE__); @@ -286,7 +286,7 @@ function RedirectToCachedFile() { $phpThumb->ErrorImage('config_nooffsitelink_require_refer enabled and '.(@$parsed_url_referer['host'] ? '"'.$parsed_url_referer['host'].'" is not an allowed referer' : 'no HTTP_REFERER exists')); } $parsed_url_src = phpthumb_functions::ParseURLbetter(@$_GET['src']); -if ($phpThumb->config_nohotlink_enabled && $phpThumb->config_nohotlink_erase_image && preg_match('#^(f|ht)tps?://#i', @$_GET['src']) && !in_array(@$parsed_url_src['host'], $phpThumb->config_nohotlink_valid_domains)) { +if ($phpThumb->config_nohotlink_enabled && $phpThumb->config_nohotlink_erase_image && preg_match('#^(f|ht)tps?://#i', (string)@$_GET['src']) && !in_array(@$parsed_url_src['host'], $phpThumb->config_nohotlink_valid_domains)) { $phpThumb->ErrorImage($phpThumb->config_nohotlink_text_message); } @@ -391,6 +391,8 @@ function RedirectToCachedFile() { if (!empty($PHPTHUMB_DEFAULTS_DISABLEGETPARAMS) && ($key != 'src')) { // disabled, do not set parameter $phpThumb->DebugMessage('ignoring $_GET['.$key.'] because of $PHPTHUMB_DEFAULTS_DISABLEGETPARAMS', __FILE__, __LINE__); + } elseif ($key == 'hash') { + // "hash" is for use in phpThumb.phpdoes only, should not be set on object } elseif (in_array($key, $allowedGETparameters)) { $phpThumb->DebugMessage('setParameter('.$key.', '.$phpThumb->phpThumbDebugVarDump($value).')', __FILE__, __LINE__); $phpThumb->setParameter($key, $value); @@ -435,9 +437,9 @@ function RedirectToCachedFile() { $CanPassThroughDirectly = true; if ($phpThumb->rawImageData) { // data from SQL, should be fine -} elseif (preg_match('#^https?\\://[^\\?&]+\\.(jpe?g|gif|png|webp|avif)$#i', $phpThumb->src)) { +} elseif (preg_match('#^https?\\://[^\\?&]+\\.(jpe?g|gif|png|webp|avif)$#i', (string)$phpThumb->src)) { // assume is ok to passthru if no other parameters specified -} elseif (preg_match('#^(f|ht)tps?\\://#i', $phpThumb->src)) { +} elseif (preg_match('#^(f|ht)tps?\\://#i', (string)$phpThumb->src)) { $phpThumb->DebugMessage('$CanPassThroughDirectly=false because preg_match("#^(f|ht)tps?://#i", '.$phpThumb->src.')', __FILE__, __LINE__); $CanPassThroughDirectly = false; } elseif (!@is_readable($phpThumb->sourceFilename)) { @@ -456,7 +458,7 @@ function RedirectToCachedFile() { case 'w': case 'h': // might be OK if exactly matches original - if (preg_match('#^https?\\://[^\\?&]+\\.(jpe?g|gif|png|webp|avif)$#i', $phpThumb->src)) { + if (preg_match('#^https?\\://[^\\?&]+\\.(jpe?g|gif|png|webp|avif)$#i', (string)$phpThumb->src)) { // assume it is not ok for direct-passthru of remote image $CanPassThroughDirectly = false; } diff --git a/core/vendor/james-heinrich/phpthumb/phpthumb.class.php b/core/vendor/james-heinrich/phpthumb/phpthumb.class.php index 9cb5b39376..ef70dd79ed 100644 --- a/core/vendor/james-heinrich/phpthumb/phpthumb.class.php +++ b/core/vendor/james-heinrich/phpthumb/phpthumb.class.php @@ -265,7 +265,7 @@ class phpthumb { public $issafemode = null; public $php_memory_limit = null; - public $phpthumb_version = '1.7.20-202212091316'; + public $phpthumb_version = '1.7.21-202307141720'; ////////////////////////////////////////////////////////////////////// @@ -314,6 +314,9 @@ public function __destruct() { $this->purgeTempFiles(); } + public function __set(string $name, mixed $value): void { + } + // public: public function purgeTempFiles() { foreach ($this->tempFilesToDelete as $tempFileToDelete) { @@ -1447,7 +1450,7 @@ public function ResolveFilenameToAbsolute($filename) { $AbsoluteFilename = str_replace(DIRECTORY_SEPARATOR, '/', $AbsoluteFilename); } $resolvedAbsoluteFilename = $this->resolvePath($AbsoluteFilename, $this->config_additional_allowed_dirs); - if (!$this->config_allow_src_above_docroot && !preg_match('#^'.preg_quote(str_replace(DIRECTORY_SEPARATOR, '/', $this->realPathSafe($this->config_document_root))).'#', $resolvedAbsoluteFilename)) { + if (!$this->config_allow_src_above_docroot && !preg_match('#^'.preg_quote(str_replace(DIRECTORY_SEPARATOR, '/', $this->realPathSafe($this->config_document_root))).'#', (string)$resolvedAbsoluteFilename)) { $this->DebugMessage('!$this->config_allow_src_above_docroot therefore setting "'.$AbsoluteFilename.'" (outside "'.$this->realPathSafe($this->config_document_root).'") to null', __FILE__, __LINE__); return false; } @@ -1492,7 +1495,8 @@ public function ImageMagickWhichConvert() { if (($cachedwhichconvertstring = @file_get_contents($IMwhichConvertCacheFilename)) !== false) { $WhichConvert = $cachedwhichconvertstring; } else { - $WhichConvert = trim(phpthumb_functions::SafeExec('which convert')); + $execResult = phpthumb_functions::SafeExec('which convert'); + $WhichConvert = $execResult !== null ? trim($execResult) : null; @file_put_contents($IMwhichConvertCacheFilename, $WhichConvert); @chmod($IMwhichConvertCacheFilename, $this->getParameter('config_file_create_mask')); } @@ -1800,7 +1804,7 @@ public function ImageMagickThumbnailToGD() { // some (older? around 2002) versions of IM won't accept "-resize 100x" but require "-resize 100x100" $commandline_test = $this->ImageMagickCommandlineBase().' logo: -resize 1x '.phpthumb_functions::escapeshellarg_replacement($IMtempfilename).' 2>&1'; $IMresult_test = phpthumb_functions::SafeExec($commandline_test); - $IMuseExplicitImageOutputDimensions = preg_match('#image dimensions are zero#i', $IMresult_test); + $IMuseExplicitImageOutputDimensions = preg_match('#image dimensions are zero#i', (string)$IMresult_test); $this->DebugMessage('IMuseExplicitImageOutputDimensions = '. (int) $IMuseExplicitImageOutputDimensions, __FILE__, __LINE__); if ($fp_im_temp = @fopen($IMtempfilename, 'wb')) { // erase temp image so ImageMagick logo doesn't get output if other processing fails @@ -1986,8 +1990,8 @@ public function ImageMagickThumbnailToGD() { } } list($nw, $nh) = phpthumb_functions::TranslateWHbyAngle($this->w, $this->h, $this->ra); - $nw = ((round($nw) != 0) ? round($nw) : ''); - $nh = ((round($nh) != 0) ? round($nh) : ''); + $nw = ((isset($nw) && round($nw) != 0) ? round($nw) : ''); + $nh = ((isset($nh) && round($nh) != 0) ? round($nh) : ''); $commandline .= ' -'.$IMresizeParameter.' '.phpthumb_functions::escapeshellarg_replacement($nw.'x'.$nh); } @@ -2019,7 +2023,7 @@ public function ImageMagickThumbnailToGD() { if (($this->ra % 90) != 0) { if (preg_match('#('.implode('|', $this->AlphaCapableFormats).')#i', $outputFormat)) { // alpha-capable format - $commandline .= ' -background rgba(255,255,255,0)'; + $commandline .= ' -background '.phpthumb_functions::escapeshellarg_replacement('rgba(255,255,255,0)'); } else { $commandline .= ' -background '.phpthumb_functions::escapeshellarg_replacement('#'.($this->bg ? $this->bg : 'FFFFFF')); } @@ -2188,9 +2192,9 @@ public function ImageMagickThumbnailToGD() { case 'lvl': @list($band, $method, $threshold) = explode('|', $parameter); - $band = ($band ? preg_replace('#[^RGBA\\*]#', '', strtoupper($band)) : '*'); - $method = ((strlen($method) > 0) ? (int) $method : 2); - $threshold = ((strlen($threshold) > 0) ? min(max((float) $threshold, 0), 100) : 0.1); + $band = ($band ? preg_replace('#[^RGBA\\*]#', '', strtoupper((string)$band)) : '*'); + $method = ((strlen((string)$method) > 0) ? (int) $method : 2); + $threshold = ((strlen((string)$threshold) > 0) ? min(max((float) $threshold, 0), 100) : 0.1); $band = preg_replace('#[^RGBA\\*]#', '', strtoupper($band)); @@ -2395,6 +2399,10 @@ public function ImageMagickThumbnailToGD() { } } } + // ImageMagic also support quality for webp - but only for version 7.0.8-68 and above + if (($outputFormat=='webp') && $this->q && $this->ImageMagickSwitchAvailable(['quality'])) { + $commandline .= ' -quality '.phpthumb_functions::escapeshellarg_replacement($this->thumbnailQuality); + } $commandline .= ' '.$outputFormat.':'.phpthumb_functions::escapeshellarg_replacement($IMtempfilename); if (!$this->iswindows) { $commandline .= ' 2>&1'; @@ -2403,8 +2411,8 @@ public function ImageMagickThumbnailToGD() { $IMresult = phpthumb_functions::SafeExec($commandline); clearstatcache(); if (!@file_exists($IMtempfilename) || !@filesize($IMtempfilename)) { - $this->FatalError('ImageMagick failed with message ('.trim($IMresult).')'); - $this->DebugMessage('ImageMagick failed with message ('.trim($IMresult).')', __FILE__, __LINE__); + $this->FatalError('ImageMagick failed with message ('.trim((string)$IMresult).')'); + $this->DebugMessage('ImageMagick failed with message ('.trim((string)$IMresult).')', __FILE__, __LINE__); if ($this->iswindows && !$IMresult) { $this->DebugMessage('Check to make sure that PHP has read+write permissions to "'.dirname($IMtempfilename).'"', __FILE__, __LINE__); } @@ -2630,7 +2638,7 @@ public function AntiOffsiteLinking() { } } - if ($allow && $this->config_nohotlink_enabled && preg_match('#^(f|ht)tps?\://#i', $this->src)) { + if ($allow && $this->config_nohotlink_enabled && preg_match('#^(f|ht)tps?\://#i', (string)$this->src)) { $parsed_url = phpthumb_functions::ParseURLbetter($this->src); //if (!phpthumb_functions::CaseInsensitiveInArray(@$parsed_url['host'], $this->config_nohotlink_valid_domains)) { if (!$this->OffsiteDomainIsAllowed(@$parsed_url['host'], $this->config_nohotlink_valid_domains)) { @@ -2894,8 +2902,8 @@ public function ApplyFilters() { case 'lvl': // autoLevels @list($band, $method, $threshold) = explode('|', $parameter, 3); $band = ($band ? preg_replace('#[^RGBA\\*]#', '', strtoupper($band)) : '*'); - $method = ((strlen($method) > 0) ? (int) $method : 2); - $threshold = ((strlen($threshold) > 0) ? (float) $threshold : 0.1); + $method = ((strlen((string)$method) > 0) ? (int) $method : 2); + $threshold = ((strlen((string)$threshold) > 0) ? (float) $threshold : 0.1); $phpthumbFilters->HistogramStretch($this->gdimg_output, $band, $method, $threshold); break; @@ -3002,8 +3010,8 @@ public function ApplyFilters() { case 'over': // Overlay @list($filename, $underlay, $margin, $opacity) = explode('|', $parameter, 4); $underlay = (bool) ($underlay ? $underlay : false); - $margin = ((strlen($margin) > 0) ? $margin : ($underlay ? 0.1 : 0.0)); - $opacity = ((strlen($opacity) > 0) ? $opacity : 100); + $margin = ((strlen((string)$margin) > 0) ? $margin : ($underlay ? 0.1 : 0.0)); + $opacity = ((strlen((string)$opacity) > 0) ? $opacity : 100); if (($margin > 0) && ($margin < 1)) { $margin = min(0.499, $margin); } elseif (($margin > -1) && ($margin < 0)) { @@ -3477,15 +3485,15 @@ public function SetOrientationDependantWidthHeight() { public function ExtractEXIFgetImageSize() { $this->DebugMessage('starting ExtractEXIFgetImageSize()', __FILE__, __LINE__); - if (preg_match('#^http:#i', $this->src) && !$this->sourceFilename && $this->rawImageData) { + if (preg_match('#^http:#i', (string)$this->src) && !$this->sourceFilename && $this->rawImageData) { $this->SourceDataToTempFile(); } if (null === $this->getimagesizeinfo) { if ($this->sourceFilename) { if ($this->getimagesizeinfo = @getimagesize($this->sourceFilename)) { - $this->source_width = $this->getimagesizeinfo[0]; - $this->source_height = $this->getimagesizeinfo[1]; - $this->DebugMessage('getimagesize('.$this->sourceFilename.') says image is '.$this->source_width.'x'.$this->source_height, __FILE__, __LINE__); + $this->source_width = $this->getimagesizeinfo[0]; + $this->source_height = $this->getimagesizeinfo[1]; + $this->DebugMessage('getimagesize('.$this->sourceFilename.') says image is '.$this->source_width.'x'.$this->source_height, __FILE__, __LINE__); } else { $this->DebugMessage('getimagesize('.$this->sourceFilename.') failed', __FILE__, __LINE__); } @@ -3682,8 +3690,8 @@ public function SetCacheFilename() { $broad_directory_name = strtolower(md5($this->rawImageData)); $this->cache_filename .= '_raw'.$broad_directory_name; } else { - $this->DebugMessage('SetCacheFilename() _src set from md5($this->sourceFilename) "'.$this->sourceFilename.'" = "'.md5($this->sourceFilename).'"', __FILE__, __LINE__); - $broad_directory_name = strtolower(md5($this->sourceFilename)); + $this->DebugMessage('SetCacheFilename() _src set from md5($this->sourceFilename) "'.$this->sourceFilename.'" = "'.md5((string)$this->sourceFilename).'"', __FILE__, __LINE__); + $broad_directory_name = strtolower(md5((string)$this->sourceFilename)); $this->cache_filename .= '_src'.$broad_directory_name; } if (!empty($_SERVER['HTTP_REFERER']) && $this->config_nooffsitelink_enabled) { @@ -3717,8 +3725,8 @@ public function SetCacheFilename() { $ParametersString .= '_'.$key.substr(md5($this->$key), 0, 4); } } - if ($this->thumbnailFormat == 'jpeg') { - // only JPEG output has variable quality option + if (in_array($this->thumbnailFormat, ['jpeg','webp'])) { + // only JPEG and WEBP output has variable quality option $ParametersString .= '_q'. (int) $this->thumbnailQuality; } $this->DebugMessage('SetCacheFilename() _par set from md5('.$ParametersString.')', __FILE__, __LINE__); diff --git a/core/vendor/james-heinrich/phpthumb/phpthumb.filters.php b/core/vendor/james-heinrich/phpthumb/phpthumb.filters.php index a18b7399de..9606476b45 100644 --- a/core/vendor/james-heinrich/phpthumb/phpthumb.filters.php +++ b/core/vendor/james-heinrich/phpthumb/phpthumb.filters.php @@ -114,15 +114,15 @@ public function Blur(&$gdimg, $radius=0.5) { // Move copies of the image around one pixel at the time and merge them with weight // according to the matrix. The same matrix is simply repeated for higher radii. for ($i = 0; $i < $radius; $i++) { - imagecopy ($imgBlur, $gdimg, 0, 0, 1, 1, $w - 1, $h - 1); // up left - imagecopymerge($imgBlur, $gdimg, 1, 1, 0, 0, $w, $h, 50.00000); // down right - imagecopymerge($imgBlur, $gdimg, 0, 1, 1, 0, $w - 1, $h, 33.33333); // down left - imagecopymerge($imgBlur, $gdimg, 1, 0, 0, 1, $w, $h - 1, 25.00000); // up right - imagecopymerge($imgBlur, $gdimg, 0, 0, 1, 0, $w - 1, $h, 33.33333); // left - imagecopymerge($imgBlur, $gdimg, 1, 0, 0, 0, $w, $h, 25.00000); // right - imagecopymerge($imgBlur, $gdimg, 0, 0, 0, 1, $w, $h - 1, 20.00000); // up - imagecopymerge($imgBlur, $gdimg, 0, 1, 0, 0, $w, $h, 16.666667); // down - imagecopymerge($imgBlur, $gdimg, 0, 0, 0, 0, $w, $h, 50.000000); // center + imagecopy ($imgBlur, $gdimg, 0, 0, 1, 1, $w - 1, $h - 1); // up left + imagecopymerge($imgBlur, $gdimg, 1, 1, 0, 0, $w, $h, 50); // down right + imagecopymerge($imgBlur, $gdimg, 0, 1, 1, 0, $w - 1, $h, 33); // down left + imagecopymerge($imgBlur, $gdimg, 1, 0, 0, 1, $w, $h - 1, 25); // up right + imagecopymerge($imgBlur, $gdimg, 0, 0, 1, 0, $w - 1, $h, 33); // left + imagecopymerge($imgBlur, $gdimg, 1, 0, 0, 0, $w, $h, 25); // right + imagecopymerge($imgBlur, $gdimg, 0, 0, 0, 1, $w, $h - 1, 20); // up + imagecopymerge($imgBlur, $gdimg, 0, 1, 0, 0, $w, $h, 17); // down + imagecopymerge($imgBlur, $gdimg, 0, 0, 0, 0, $w, $h, 50); // center imagecopy ($gdimg, $imgBlur, 0, 0, 0, 0, $w, $h); } return true; @@ -287,8 +287,10 @@ public function Crop(&$gdimg, $left=0, $right=0, $top=0, $bottom=0) { if (($bottom > 0) && ($bottom < 1)) { $bottom = round($bottom * $oldH); } $right = min($oldW - $left - 1, $right); $bottom = min($oldH - $top - 1, $bottom); - $newW = $oldW - $left - $right; - $newH = $oldH - $top - $bottom; + $newW = (int)($oldW - $left - $right); + $newH = (int)($oldH - $top - $bottom); + $left = (int)$left; + $top = (int)$top; if ($imgCropped = imagecreatetruecolor($newW, $newH)) { imagecopy($imgCropped, $gdimg, 0, 0, $left, $top, $newW, $newH); @@ -362,8 +364,8 @@ public function DropShadow(&$gdimg, $distance, $width, $hexcolor, $angle, $alpha //for ($i = 0; $i < $width; $i++) { for ($i = 0; $i < 1; $i++) { if (!isset($PixelMap[$x][$y]['alpha']) || ($PixelMap[$x][$y]['alpha'] > 0)) { - if (isset($PixelMap[$x + $Offset['x']][$y + $Offset['y']]['alpha']) && ($PixelMap[$x + $Offset['x']][$y + $Offset['y']]['alpha'] < 127)) { - $thisColor = phpthumb_functions::ImageHexColorAllocate($gdimg, $hexcolor, false, $PixelMap[$x + $Offset['x']][$y + $Offset['y']]['alpha']); + if (isset($PixelMap[$x + (int)$Offset['x']][$y + (int)$Offset['y']]['alpha']) && ($PixelMap[$x + (int)$Offset['x']][$y + (int)$Offset['y']]['alpha'] < 127)) { + $thisColor = phpthumb_functions::ImageHexColorAllocate($gdimg, $hexcolor, false, $PixelMap[$x + (int)$Offset['x']][$y + (int)$Offset['y']]['alpha']); imagesetpixel($gdimg_dropshadow_temp, $x, $y, $thisColor); } } @@ -1018,7 +1020,7 @@ public function SourceTransparentColorMask(&$gdimg, $hexcolor, $min_limit=5, $ma for ($y = 0; $y < $height; $y++) { $currentPixel = phpthumb_functions::GetPixelColor($gdimg, $x, $y); $colorDiff = phpthumb_functions::PixelColorDifferencePercent($currentPixel, $targetPixel); - $grayLevel = min($cutoffRange, max(0, -$min_limit + $colorDiff)) * (255 / max(1, $cutoffRange)); + $grayLevel = (int)min($cutoffRange, max(0, -$min_limit + $colorDiff)) * (255 / max(1, $cutoffRange)); $newColor = imagecolorallocate($gdimg_mask, $grayLevel, $grayLevel, $grayLevel); imagesetpixel($gdimg_mask, $x, $y, $newColor); } @@ -1127,16 +1129,20 @@ public function WatermarkText(&$gdimg, $text, $size, $alignment, $hex_color='000 } $lineheight = min(100.0, max(0.01, (float) $lineheight)); - $metaTextArray = array( - '^Fb' => $this->phpThumbObject->getimagesizeinfo['filesize'], - '^Fk' => round($this->phpThumbObject->getimagesizeinfo['filesize'] / 1024), - '^Fm' => round($this->phpThumbObject->getimagesizeinfo['filesize'] / 1048576), - '^X' => $this->phpThumbObject->getimagesizeinfo[0], - '^Y' => $this->phpThumbObject->getimagesizeinfo[1], - '^x' => imagesx($gdimg), - '^y' => imagesy($gdimg), - '^^' => '^', - ); + $metaTextArray = array(); + if (is_array($this->phpThumbObject->getimagesizeinfo)) { + if (array_key_exists('filesize',$this->phpThumbObject->getimagesizeinfo)) { + $metaTextArray['^Fb'] = $this->phpThumbObject->getimagesizeinfo['filesize']; + $metaTextArray['^Fk'] = round($this->phpThumbObject->getimagesizeinfo['filesize'] / 1024); + $metaTextArray['^Fm'] = round($this->phpThumbObject->getimagesizeinfo['filesize'] / 1048576); + } + $metaTextArray['^X'] = $this->phpThumbObject->getimagesizeinfo[0]; + $metaTextArray['^Y'] = $this->phpThumbObject->getimagesizeinfo[1]; + } + $metaTextArray['^x'] = imagesx($gdimg); + $metaTextArray['^y'] = imagesy($gdimg); + $metaTextArray['^^'] = '^'; + $text = strtr($text, $metaTextArray); $text = str_replace(array( @@ -1430,7 +1436,8 @@ public function WatermarkOverlay(&$gdimg_dest, &$img_watermark, $alignment='*', $watermark_source_width = imagesx($img_watermark); $watermark_source_height = imagesy($img_watermark); $watermark_opacity_percent = max(0, min(100, $opacity)); - $margin_y = (null === $margin_y ? $margin_x : $margin_y); + $margin_x = (null === $margin_x ? 0 : $margin_y); // if null fill 0 (or 5?) + $margin_y = (null === $margin_y ? $margin_x : $margin_y); $watermark_margin_x = ((($margin_x > 0) && ($margin_x < 1)) ? round((1 - $margin_x) * $img_source_width) : $margin_x); $watermark_margin_y = ((($margin_y > 0) && ($margin_y < 1)) ? round((1 - $margin_y) * $img_source_height) : $margin_y); $watermark_destination_x = 0; diff --git a/core/vendor/james-heinrich/phpthumb/phpthumb.functions.php b/core/vendor/james-heinrich/phpthumb/phpthumb.functions.php index d8bc70670e..acde62d10f 100644 --- a/core/vendor/james-heinrich/phpthumb/phpthumb.functions.php +++ b/core/vendor/james-heinrich/phpthumb/phpthumb.functions.php @@ -232,13 +232,13 @@ public static function HexCharDisplay($string) { public static function IsHexColor($HexColorString) { - return preg_match('#^[0-9A-F]{6}$#i', $HexColorString); + return preg_match('#^[0-9A-F]{6}$#i', (string)$HexColorString); } public static function ImageColorAllocateAlphaSafe(&$gdimg_hexcolorallocate, $R, $G, $B, $alpha=false) { if (self::version_compare_replacement(PHP_VERSION, '4.3.2', '>=') && ($alpha !== false)) { - return imagecolorallocatealpha($gdimg_hexcolorallocate, $R, $G, $B, (int) $alpha); + return imagecolorallocatealpha($gdimg_hexcolorallocate, round($R), round($G), round($B), (int) $alpha); } else { return imagecolorallocate($gdimg_hexcolorallocate, $R, $G, $B); } @@ -706,7 +706,7 @@ public static function CleanUpURLencoding($url, $queryseperator='&') { return $url; } $parsed_url = self::ParseURLbetter($url); - $pathelements = explode('/', $parsed_url['path']); + $pathelements = explode('/', (string)$parsed_url['path']); $CleanPathElements = array(); $TranslationMatrix = array(' '=>'%20'); foreach ($pathelements as $key => $pathelement) { @@ -718,7 +718,7 @@ public static function CleanUpURLencoding($url, $queryseperator='&') { } } - $queries = explode($queryseperator, $parsed_url['query']); + $queries = explode($queryseperator, (string)$parsed_url['query']); $CleanQueries = array(); foreach ($queries as $key => $query) { @list($param, $value) = explode('=', $query); @@ -862,6 +862,16 @@ public static function EnsureDirectoryExists($dirname, $mask=0755) { $delimiter = ':'; $case_insensitive_pathname = false; } + do { + /* + \\3930K\WEBROOT\trainspotted.com\phpThumb/_cache/\6\6f // starts off with mismatched directory separators + \\3930K\WEBROOT\trainspotted.com\phpThumb\_cache\\6\6f // gets multiple directory separators in a row that we want to strip out (being sure not to replace the UNC double-slash at the beginning) + */ + if ($doubleslash_offset = strpos($dirname, DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR, 1)) { + $dirname = substr($dirname, 0, $doubleslash_offset).substr($dirname, $doubleslash_offset + 1); + } + } while ($doubleslash_offset !== false); + $open_basedirs = explode($delimiter, $config_open_basedir); foreach ($open_basedirs as $key => $open_basedir) { if (preg_match('#^'.preg_quote($open_basedir).'#'.($case_insensitive_pathname ? 'i' : ''), $dirname) && (strlen($dirname) > strlen($open_basedir))) { @@ -878,12 +888,23 @@ public static function EnsureDirectoryExists($dirname, $mask=0755) { continue; } if (!@is_dir($test_directory)) { + if (substr($test_directory, 0, 2) == '\\\\') { + // UNC path + if (count(explode('\\', $test_directory)) <= 4) { + // 1,2 = UNC starting slashes + // 3 = hostname; skip further checks + // 4 = sharename; skip further checks + // 5+ = real subdiretories + continue; + } + } if (@file_exists($test_directory)) { // directory name already exists as a file return false; } @mkdir($test_directory, $mask); @chmod($test_directory, $mask); + clearstatcache(); if (!@is_dir($test_directory) || !@is_writable($test_directory)) { return false; } diff --git a/core/vendor/james-heinrich/phpthumb/phpthumb.unsharp.php b/core/vendor/james-heinrich/phpthumb/phpthumb.unsharp.php index a5c454ee1f..3802e8bf90 100644 --- a/core/vendor/james-heinrich/phpthumb/phpthumb.unsharp.php +++ b/core/vendor/james-heinrich/phpthumb/phpthumb.unsharp.php @@ -110,9 +110,9 @@ public static function applyUnsharpMask(&$img, $amount, $radius, $threshold) { // When the masked pixels differ less from the original // than the threshold specifies, they are set to their original value. - $rNew = ((abs($rOrig - $rBlur) >= $threshold) ? max(0, min(255, ($amount * ($rOrig - $rBlur)) + $rOrig)) : $rOrig); - $gNew = ((abs($gOrig - $gBlur) >= $threshold) ? max(0, min(255, ($amount * ($gOrig - $gBlur)) + $gOrig)) : $gOrig); - $bNew = ((abs($bOrig - $bBlur) >= $threshold) ? max(0, min(255, ($amount * ($bOrig - $bBlur)) + $bOrig)) : $bOrig); + $rNew = (int)((abs($rOrig - $rBlur) >= $threshold) ? max(0, min(255, ($amount * ($rOrig - $rBlur)) + $rOrig)) : $rOrig); + $gNew = (int)((abs($gOrig - $gBlur) >= $threshold) ? max(0, min(255, ($amount * ($gOrig - $gBlur)) + $gOrig)) : $gOrig); + $bNew = (int)((abs($bOrig - $bBlur) >= $threshold) ? max(0, min(255, ($amount * ($bOrig - $bBlur)) + $bOrig)) : $bOrig); if (($rOrig != $rNew) || ($gOrig != $gNew) || ($bOrig != $bNew)) { $pixCol = imagecolorallocate($img, $rNew, $gNew, $bNew); diff --git a/core/vendor/laravel/prompts/LICENSE.md b/core/vendor/laravel/prompts/LICENSE.md new file mode 100644 index 0000000000..79810c848f --- /dev/null +++ b/core/vendor/laravel/prompts/LICENSE.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Taylor Otwell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/core/vendor/laravel/prompts/README.md b/core/vendor/laravel/prompts/README.md new file mode 100644 index 0000000000..dbcad0cacf --- /dev/null +++ b/core/vendor/laravel/prompts/README.md @@ -0,0 +1,34 @@ +

Laravel Prompts

+ +

+Build Status +Total Downloads +Latest Stable Version +License +

+ +## Introduction + +Laravel Prompts is a PHP package for adding beautiful and user-friendly forms to your command-line applications, with browser-like features including placeholder text and validation. + +Laravel Prompts is perfect for accepting user input in your [Artisan console commands](https://laravel.com/docs/artisan#writing-commands), but it may also be used in any command-line PHP project. + +## Official Documentation + +Documentation for Laravel Prompts can be found on the [Laravel website](https://laravel.com/docs/prompts). + +## Contributing + +Thank you for considering contributing to Laravel Prompts! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions). + +## Code of Conduct + +In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct). + +## Security Vulnerabilities + +Please review [our security policy](https://github.com/laravel/prompts/security/policy) on how to report security vulnerabilities. + +## License + +Laravel Prompts is open-sourced software licensed under the [MIT license](LICENSE.md). diff --git a/core/vendor/laravel/prompts/composer.json b/core/vendor/laravel/prompts/composer.json new file mode 100644 index 0000000000..9df39c2b4d --- /dev/null +++ b/core/vendor/laravel/prompts/composer.json @@ -0,0 +1,38 @@ +{ + "name": "laravel/prompts", + "type": "library", + "license": "MIT", + "autoload": { + "psr-4": { + "Laravel\\Prompts\\": "src/" + }, + "files": [ + "src/helpers.php" + ] + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "require": { + "php": "^8.1", + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "symfony/console": "^6.2" + }, + "require-dev": { + "phpstan/phpstan": "^1.10", + "pestphp/pest": "^2.3", + "mockery/mockery": "^1.5", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "config": { + "allow-plugins": { + "pestphp/pest-plugin": true + } + } +} diff --git a/core/vendor/laravel/prompts/phpunit.xml b/core/vendor/laravel/prompts/phpunit.xml new file mode 100644 index 0000000000..d991468e86 --- /dev/null +++ b/core/vendor/laravel/prompts/phpunit.xml @@ -0,0 +1,14 @@ + + + + + ./tests + + + + + ./app + ./src + + + diff --git a/core/vendor/laravel/prompts/src/Concerns/Colors.php b/core/vendor/laravel/prompts/src/Concerns/Colors.php new file mode 100644 index 0000000000..4d9f187d8d --- /dev/null +++ b/core/vendor/laravel/prompts/src/Concerns/Colors.php @@ -0,0 +1,206 @@ +showCursor(); + } + } + + /** + * Move the cursor. + */ + public function moveCursor(int $x, int $y = 0): void + { + $sequence = ''; + + if ($x < 0) { + $sequence .= "\e[".abs($x).'D'; // Left + } elseif ($x > 0) { + $sequence .= "\e[{$x}C"; // Right + } + + if ($y < 0) { + $sequence .= "\e[".abs($y).'A'; // Up + } elseif ($y > 0) { + $sequence .= "\e[{$y}B"; // Down + } + + static::writeDirectly($sequence); + } +} diff --git a/core/vendor/laravel/prompts/src/Concerns/Erase.php b/core/vendor/laravel/prompts/src/Concerns/Erase.php new file mode 100644 index 0000000000..943dba6e86 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Concerns/Erase.php @@ -0,0 +1,31 @@ +> + */ + protected array $listeners = []; + + /** + * Register an event listener. + */ + public function on(string $event, Closure $callback): void + { + $this->listeners[$event][] = $callback; + } + + /** + * Emit an event. + */ + public function emit(string $event, mixed ...$data): void + { + foreach ($this->listeners[$event] ?? [] as $listener) { + $listener(...$data); + } + } +} diff --git a/core/vendor/laravel/prompts/src/Concerns/FakesInputOutput.php b/core/vendor/laravel/prompts/src/Concerns/FakesInputOutput.php new file mode 100644 index 0000000000..7fc01a49b1 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Concerns/FakesInputOutput.php @@ -0,0 +1,88 @@ + $keys + */ + public static function fake(array $keys = []): void + { + $mock = \Mockery::mock(Terminal::class); + + $mock->shouldReceive('write')->byDefault(); + $mock->shouldReceive('exit')->byDefault(); + $mock->shouldReceive('setTty')->byDefault(); + $mock->shouldReceive('restoreTty')->byDefault(); + $mock->shouldReceive('cols')->byDefault()->andReturn(80); + $mock->shouldReceive('lines')->byDefault()->andReturn(24); + + foreach ($keys as $key) { + $mock->shouldReceive('read')->once()->andReturn($key); + } + + static::$terminal = $mock; + + self::setOutput(new BufferedConsoleOutput()); + } + + /** + * Assert that the output contains the given string. + */ + public static function assertOutputContains(string $string): void + { + Assert::assertStringContainsString($string, static::content()); + } + + /** + * Assert that the output doesn't contain the given string. + */ + public static function assertOutputDoesntContain(string $string): void + { + Assert::assertStringNotContainsString($string, static::content()); + } + + /** + * Assert that the stripped output contains the given string. + */ + public static function assertStrippedOutputContains(string $string): void + { + Assert::assertStringContainsString($string, static::strippedContent()); + } + + /** + * Assert that the stripped output doesn't contain the given string. + */ + public static function assertStrippedOutputDoesntContain(string $string): void + { + Assert::assertStringNotContainsString($string, static::strippedContent()); + } + + /** + * Get the buffered console output. + */ + public static function content(): string + { + if (! static::output() instanceof BufferedConsoleOutput) { + throw new RuntimeException('Prompt must be faked before accessing content.'); + } + + return static::output()->content(); + } + + /** + * Get the buffered console output, stripped of escape sequences. + */ + public static function strippedContent(): string + { + return preg_replace("/\e\[[0-9;?]*[A-Za-z]/", '', static::content()); + } +} diff --git a/core/vendor/laravel/prompts/src/Concerns/Fallback.php b/core/vendor/laravel/prompts/src/Concerns/Fallback.php new file mode 100644 index 0000000000..9af0e123e0 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Concerns/Fallback.php @@ -0,0 +1,56 @@ + + */ + protected static array $fallbacks = []; + + /** + * Enable the fallback implementation. + */ + public static function fallbackWhen(bool $condition): void + { + static::$shouldFallback = $condition || static::$shouldFallback; + } + + /** + * Whether the prompt should fallback to a custom implementation. + */ + public static function shouldFallback(): bool + { + return static::$shouldFallback && isset(static::$fallbacks[static::class]); + } + + /** + * Set the fallback implementation. + * + * @param Closure($this): mixed $fallback + */ + public static function fallbackUsing(Closure $fallback): void + { + static::$fallbacks[static::class] = $fallback; + } + + /** + * Call the registered fallback implementation. + */ + public function fallback(): mixed + { + $fallback = static::$fallbacks[static::class]; + + return $fallback($this); + } +} diff --git a/core/vendor/laravel/prompts/src/Concerns/Termwind.php b/core/vendor/laravel/prompts/src/Concerns/Termwind.php new file mode 100644 index 0000000000..798348c67a --- /dev/null +++ b/core/vendor/laravel/prompts/src/Concerns/Termwind.php @@ -0,0 +1,25 @@ +restoreEscapeSequences($output->fetch()); + } + + protected function restoreEscapeSequences(string $string) + { + return preg_replace('/\[(\d+)m/', "\e[".'\1m', $string); + } +} diff --git a/core/vendor/laravel/prompts/src/Concerns/Themes.php b/core/vendor/laravel/prompts/src/Concerns/Themes.php new file mode 100644 index 0000000000..cfdbd5eb40 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Concerns/Themes.php @@ -0,0 +1,102 @@ +, class-string>> + */ + protected static array $themes = [ + 'default' => [ + TextPrompt::class => TextPromptRenderer::class, + PasswordPrompt::class => PasswordPromptRenderer::class, + SelectPrompt::class => SelectPromptRenderer::class, + MultiSelectPrompt::class => MultiSelectPromptRenderer::class, + ConfirmPrompt::class => ConfirmPromptRenderer::class, + SearchPrompt::class => SearchPromptRenderer::class, + SuggestPrompt::class => SuggestPromptRenderer::class, + Spinner::class => SpinnerRenderer::class, + Note::class => NoteRenderer::class, + ], + ]; + + /** + * Get or set the active theme. + * + * @throws \InvalidArgumentException + */ + public static function theme(string $name = null): string + { + if ($name === null) { + return static::$theme; + } + + if (! isset(static::$themes[$name])) { + throw new InvalidArgumentException("Prompt theme [{$name}] not found."); + } + + return static::$theme = $name; + } + + /** + * Add a new theme. + * + * @param array, class-string> $renderers + */ + public static function addTheme(string $name, array $renderers): void + { + if ($name === 'default') { + throw new InvalidArgumentException('The default theme cannot be overridden.'); + } + + static::$themes[$name] = $renderers; + } + + /** + * Get the renderer for the current prompt. + */ + protected function getRenderer(): callable + { + $class = get_class($this); + + return new (static::$themes[static::$theme][$class] ?? static::$themes['default'][$class])($this); + } + + /** + * Render the prompt using the active theme. + */ + protected function renderTheme(): string + { + $renderer = $this->getRenderer(); + + return $renderer($this); + } +} diff --git a/core/vendor/laravel/prompts/src/Concerns/Truncation.php b/core/vendor/laravel/prompts/src/Concerns/Truncation.php new file mode 100644 index 0000000000..ec40a02bb1 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Concerns/Truncation.php @@ -0,0 +1,20 @@ +typedValue = $default; + + if ($this->typedValue) { + $this->cursorPosition = mb_strlen($this->typedValue); + } + + $this->on('key', function ($key) use ($submit) { + if ($key[0] === "\e") { + match ($key) { + Key::LEFT, Key::LEFT_ARROW => $this->cursorPosition = max(0, $this->cursorPosition - 1), + Key::RIGHT, Key::RIGHT_ARROW => $this->cursorPosition = min(mb_strlen($this->typedValue), $this->cursorPosition + 1), + Key::DELETE => $this->typedValue = mb_substr($this->typedValue, 0, $this->cursorPosition).mb_substr($this->typedValue, $this->cursorPosition + 1), + default => null, + }; + + return; + } + + // Keys may be buffered. + foreach (mb_str_split($key) as $key) { + if ($key === Key::ENTER && $submit) { + $this->submit(); + + return; + } elseif ($key === Key::BACKSPACE) { + if ($this->cursorPosition === 0) { + return; + } + + $this->typedValue = mb_substr($this->typedValue, 0, $this->cursorPosition - 1).mb_substr($this->typedValue, $this->cursorPosition); + $this->cursorPosition--; + } elseif (ord($key) >= 32) { + $this->typedValue = mb_substr($this->typedValue, 0, $this->cursorPosition).$key.mb_substr($this->typedValue, $this->cursorPosition); + $this->cursorPosition++; + } + } + }); + } + + /** + * Get the value of the prompt. + */ + public function value(): string + { + return $this->typedValue; + } + + /** + * Add a virtual cursor to the value and truncate if necessary. + */ + protected function addCursor(string $value, int $cursorPosition, int $maxWidth): string + { + $before = mb_substr($value, 0, $cursorPosition); + $current = mb_substr($value, $cursorPosition, 1); + $after = mb_substr($value, $cursorPosition + 1); + + $cursor = mb_strlen($current) ? $current : ' '; + + $spaceBefore = $maxWidth - mb_strwidth($cursor) - (mb_strwidth($after) > 0 ? 1 : 0); + [$truncatedBefore, $wasTruncatedBefore] = mb_strwidth($before) > $spaceBefore + ? [$this->trimWidthBackwards($before, 0, $spaceBefore - 1), true] + : [$before, false]; + + $spaceAfter = $maxWidth - ($wasTruncatedBefore ? 1 : 0) - mb_strwidth($truncatedBefore) - mb_strwidth($cursor); + [$truncatedAfter, $wasTruncatedAfter] = mb_strwidth($after) > $spaceAfter + ? [mb_strimwidth($after, 0, $spaceAfter - 1), true] + : [$after, false]; + + return ($wasTruncatedBefore ? $this->dim('…') : '') + .$truncatedBefore + .$this->inverse($cursor) + .$truncatedAfter + .($wasTruncatedAfter ? $this->dim('…') : ''); + } + + /** + * Get a truncated string with the specified width from the end. + */ + private function trimWidthBackwards(string $string, int $start, int $width): string + { + $reversed = implode('', array_reverse(mb_str_split($string, 1))); + + $trimmed = mb_strimwidth($reversed, $start, $width); + + return implode('', array_reverse(mb_str_split($trimmed, 1))); + } +} diff --git a/core/vendor/laravel/prompts/src/ConfirmPrompt.php b/core/vendor/laravel/prompts/src/ConfirmPrompt.php new file mode 100644 index 0000000000..3c71e2c623 --- /dev/null +++ b/core/vendor/laravel/prompts/src/ConfirmPrompt.php @@ -0,0 +1,52 @@ +confirmed = $default; + + $this->on('key', fn ($key) => match ($key) { + 'y' => $this->confirmed = true, + 'n' => $this->confirmed = false, + Key::TAB, Key::UP, Key::UP_ARROW, Key::DOWN, Key::DOWN_ARROW, Key::LEFT, Key::LEFT_ARROW, Key::RIGHT, Key::RIGHT_ARROW, 'h', 'j', 'k', 'l' => $this->confirmed = ! $this->confirmed, + Key::ENTER => $this->submit(), + default => null, + }); + } + + /** + * Get the value of the prompt. + */ + public function value(): bool + { + return $this->confirmed; + } + + /** + * Get the label of the selected option. + */ + public function label(): string + { + return $this->confirmed ? $this->yes : $this->no; + } +} diff --git a/core/vendor/laravel/prompts/src/Key.php b/core/vendor/laravel/prompts/src/Key.php new file mode 100644 index 0000000000..b8aca83d8d --- /dev/null +++ b/core/vendor/laravel/prompts/src/Key.php @@ -0,0 +1,36 @@ + + */ + public array $options; + + /** + * The default values the multi-select prompt. + * + * @var array + */ + public array $default; + + /** + * The selected values. + * + * @var array + */ + protected array $values = []; + + /** + * Create a new MultiSelectPrompt instance. + * + * @param array|Collection $options + * @param array|Collection $default + */ + public function __construct( + public string $label, + array|Collection $options, + array|Collection $default = [], + public int $scroll = 5, + public bool|string $required = false, + public ?Closure $validate = null, + public string $hint = '' + ) { + $this->options = $options instanceof Collection ? $options->all() : $options; + $this->default = $default instanceof Collection ? $default->all() : $default; + $this->values = $this->default; + + $this->on('key', fn ($key) => match ($key) { + Key::UP, Key::UP_ARROW, Key::LEFT, Key::LEFT_ARROW, Key::SHIFT_TAB, 'k', 'h' => $this->highlightPrevious(), + Key::DOWN, Key::DOWN_ARROW, Key::RIGHT, Key::RIGHT_ARROW, Key::TAB, 'j', 'l' => $this->highlightNext(), + Key::SPACE => $this->toggleHighlighted(), + Key::ENTER => $this->submit(), + default => null, + }); + } + + /** + * Get the selected values. + * + * @return array + */ + public function value(): array + { + return array_values($this->values); + } + + /** + * Get the selected labels. + * + * @return array + */ + public function labels(): array + { + if (array_is_list($this->options)) { + return array_map(fn ($value) => (string) $value, $this->values); + } + + return array_values(array_intersect_key($this->options, array_flip($this->values))); + } + + /** + * The currently visible options. + * + * @return array + */ + public function visible(): array + { + return array_slice($this->options, $this->firstVisible, $this->scroll, preserve_keys: true); + } + + /** + * Check whether the value is currently highlighted. + */ + public function isHighlighted(string $value): bool + { + if (array_is_list($this->options)) { + return $this->options[$this->highlighted] === $value; + } + + return array_keys($this->options)[$this->highlighted] === $value; + } + + /** + * Check whether the value is currently selected. + */ + public function isSelected(string $value): bool + { + return in_array($value, $this->values); + } + + /** + * Highlight the previous entry, or wrap around to the last entry. + */ + protected function highlightPrevious(): void + { + $this->highlighted = $this->highlighted === 0 ? count($this->options) - 1 : $this->highlighted - 1; + + if ($this->highlighted < $this->firstVisible) { + $this->firstVisible--; + } elseif ($this->highlighted === count($this->options) - 1) { + $this->firstVisible = count($this->options) - min($this->scroll, count($this->options)); + } + } + + /** + * Highlight the next entry, or wrap around to the first entry. + */ + protected function highlightNext(): void + { + $this->highlighted = $this->highlighted === count($this->options) - 1 ? 0 : $this->highlighted + 1; + + if ($this->highlighted > $this->firstVisible + $this->scroll - 1) { + $this->firstVisible++; + } elseif ($this->highlighted === 0) { + $this->firstVisible = 0; + } + } + + /** + * Toggle the highlighted entry. + */ + protected function toggleHighlighted(): void + { + $value = array_is_list($this->options) + ? $this->options[$this->highlighted] + : array_keys($this->options)[$this->highlighted]; + + if (in_array($value, $this->values)) { + $this->values = array_filter($this->values, fn ($v) => $v !== $value); + } else { + $this->values[] = $value; + } + } +} diff --git a/core/vendor/laravel/prompts/src/Note.php b/core/vendor/laravel/prompts/src/Note.php new file mode 100644 index 0000000000..b223967370 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Note.php @@ -0,0 +1,44 @@ +prompt(); + } + + /** + * Display the note. + */ + public function prompt(): bool + { + $this->capturePreviousNewLines(); + + $this->state = 'submit'; + + static::output()->write($this->renderTheme()); + + return true; + } + + /** + * Get the value of the prompt. + */ + public function value(): bool + { + return true; + } +} diff --git a/core/vendor/laravel/prompts/src/Output/BufferedConsoleOutput.php b/core/vendor/laravel/prompts/src/Output/BufferedConsoleOutput.php new file mode 100644 index 0000000000..b5e725b415 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Output/BufferedConsoleOutput.php @@ -0,0 +1,50 @@ +buffer; + $this->buffer = ''; + + return $content; + } + + /** + * Return the content of the buffer. + */ + public function content(): string + { + return $this->buffer; + } + + /** + * Write to the output buffer. + */ + protected function doWrite(string $message, bool $newline): void + { + $this->buffer .= $message; + + if ($newline) { + $this->buffer .= \PHP_EOL; + } + } + + /** + * Write output directly, bypassing newline capture. + */ + public function writeDirectly(string $message): void + { + $this->doWrite($message, false); + } +} diff --git a/core/vendor/laravel/prompts/src/Output/ConsoleOutput.php b/core/vendor/laravel/prompts/src/Output/ConsoleOutput.php new file mode 100644 index 0000000000..60381d62b0 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Output/ConsoleOutput.php @@ -0,0 +1,49 @@ +newLinesWritten; + } + + /** + * Write the output and capture the number of trailing new lines. + */ + protected function doWrite(string $message, bool $newline): void + { + parent::doWrite($message, $newline); + + if ($newline) { + $message .= \PHP_EOL; + } + + $trailingNewLines = strlen($message) - strlen(rtrim($message, \PHP_EOL)); + + if (trim($message) === '') { + $this->newLinesWritten += $trailingNewLines; + } else { + $this->newLinesWritten = $trailingNewLines; + } + } + + /** + * Write output directly, bypassing newline capture. + */ + public function writeDirectly(string $message): void + { + parent::doWrite($message, false); + } +} diff --git a/core/vendor/laravel/prompts/src/PasswordPrompt.php b/core/vendor/laravel/prompts/src/PasswordPrompt.php new file mode 100644 index 0000000000..ef9e6061a7 --- /dev/null +++ b/core/vendor/laravel/prompts/src/PasswordPrompt.php @@ -0,0 +1,43 @@ +trackTypedValue(); + } + + /** + * Get a masked version of the entered value. + */ + public function masked(): string + { + return str_repeat('•', mb_strlen($this->value())); + } + + /** + * Get the masked value with a virtual cursor. + */ + public function maskedWithCursor(int $maxWidth): string + { + if ($this->value() === '') { + return $this->dim($this->addCursor($this->placeholder, 0, $maxWidth)); + } + + return $this->addCursor($this->masked(), $this->cursorPosition, $maxWidth); + } +} diff --git a/core/vendor/laravel/prompts/src/Prompt.php b/core/vendor/laravel/prompts/src/Prompt.php new file mode 100644 index 0000000000..7770a972d5 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Prompt.php @@ -0,0 +1,330 @@ +capturePreviousNewLines(); + + if (static::shouldFallback()) { + return $this->fallback(); + } + + $this->checkEnvironment(); + + register_shutdown_function(function () { + $this->restoreCursor(); + static::terminal()->restoreTty(); + }); + + static::terminal()->setTty('-icanon -isig -echo'); + $this->hideCursor(); + $this->render(); + + while (($key = static::terminal()->read()) !== null) { + $continue = $this->handleKeyPress($key); + + $this->render(); + + if ($continue === false || $key === Key::CTRL_C) { + $this->restoreCursor(); + static::terminal()->restoreTty(); + + if ($key === Key::CTRL_C) { + static::terminal()->exit(); + } + + return $this->value(); + } + } + } + + /** + * How many new lines were written by the last output. + */ + public function newLinesWritten(): int + { + return $this->newLinesWritten; + } + + /** + * Capture the number of new lines written by the last output. + */ + protected function capturePreviousNewLines(): void + { + $this->newLinesWritten = method_exists(static::output(), 'newLinesWritten') + ? static::output()->newLinesWritten() + : 1; + } + + /** + * Set the output instance. + */ + public static function setOutput(OutputInterface $output): void + { + self::$output = $output; + } + + /** + * Get the current output instance. + */ + protected static function output(): OutputInterface + { + return self::$output ??= new ConsoleOutput(); + } + + /** + * Write output directly, bypassing newline capture. + */ + protected static function writeDirectly(string $message): void + { + match (true) { + method_exists(static::output(), 'writeDirectly') => static::output()->writeDirectly($message), + method_exists(static::output(), 'getOutput') => static::output()->getOutput()->write($message), + default => static::output()->write($message), + }; + } + + /** + * Get the terminal instance. + */ + public static function terminal(): Terminal + { + return static::$terminal ??= new Terminal(); + } + + /** + * Render the prompt. + */ + protected function render(): void + { + $frame = $this->renderTheme(); + + if ($frame === $this->prevFrame) { + return; + } + + if ($this->state === 'initial') { + static::output()->write($frame); + + $this->state = 'active'; + $this->prevFrame = $frame; + + return; + } + + $this->resetCursorPosition(); + + // Ensure that the full frame is buffered so subsequent output can see how many trailing newlines were written. + if ($this->state === 'submit') { + $this->eraseDown(); + static::output()->write($frame); + + $this->prevFrame = ''; + + return; + } + + $diff = $this->diffLines($this->prevFrame, $frame); + + if (count($diff) === 1) { // Update the single line that changed. + $diffLine = $diff[0]; + $this->moveCursor(0, $diffLine); + $this->eraseLines(1); + $lines = explode(PHP_EOL, $frame); + static::output()->write($lines[$diffLine]); + $this->moveCursor(0, count($lines) - $diffLine - 1); + } elseif (count($diff) > 1) { // Re-render everything past the first change + $diffLine = $diff[0]; + $this->moveCursor(0, $diffLine); + $this->eraseDown(); + $lines = explode(PHP_EOL, $frame); + $newLines = array_slice($lines, $diffLine); + static::output()->write(implode(PHP_EOL, $newLines)); + } + + $this->prevFrame = $frame; + } + + /** + * Submit the prompt. + */ + protected function submit(): void + { + $this->validate($this->value()); + + if ($this->state !== 'error') { + $this->state = 'submit'; + } + } + + /** + * Reset the cursor position to the beginning of the previous frame. + */ + private function resetCursorPosition(): void + { + $lines = count(explode(PHP_EOL, $this->prevFrame)) - 1; + + $this->moveCursor(-999, $lines * -1); + } + + /** + * Get the difference between two strings. + * + * @return array + */ + private function diffLines(string $a, string $b): array + { + if ($a === $b) { + return []; + } + + $aLines = explode(PHP_EOL, $a); + $bLines = explode(PHP_EOL, $b); + $diff = []; + + for ($i = 0; $i < max(count($aLines), count($bLines)); $i++) { + if (! isset($aLines[$i]) || ! isset($bLines[$i]) || $aLines[$i] !== $bLines[$i]) { + $diff[] = $i; + } + } + + return $diff; + } + + /** + * Handle a key press and determine whether to continue. + */ + private function handleKeyPress(string $key): bool + { + if ($this->state === 'error') { + $this->state = 'active'; + } + + $this->emit('key', $key); + + if ($this->state === 'submit') { + return false; + } + + if ($key === Key::CTRL_C) { + $this->state = 'cancel'; + + return false; + } + + if ($this->validated) { + $this->validate($this->value()); + } + + return true; + } + + /** + * Validate the input. + */ + private function validate(mixed $value): void + { + $this->validated = true; + + if (($this->required ?? false) && ($value === '' || $value === [] || $value === false)) { + $this->state = 'error'; + $this->error = is_string($this->required) ? $this->required : 'Required.'; + + return; + } + + if (! isset($this->validate)) { + return; + } + + $error = ($this->validate)($value); + + if (! is_string($error) && ! is_null($error)) { + throw new \RuntimeException('The validator must return a string or null.'); + } + + if (is_string($error) && strlen($error) > 0) { + $this->state = 'error'; + $this->error = $error; + } + } + + /** + * Check whether the environment can support the prompt. + */ + private function checkEnvironment(): void + { + if (PHP_OS_FAMILY === 'Windows') { + throw new RuntimeException('Prompts is not currently supported on Windows. Please use WSL or configure a fallback.'); + } + } +} diff --git a/core/vendor/laravel/prompts/src/SearchPrompt.php b/core/vendor/laravel/prompts/src/SearchPrompt.php new file mode 100644 index 0000000000..80cc7e94ba --- /dev/null +++ b/core/vendor/laravel/prompts/src/SearchPrompt.php @@ -0,0 +1,178 @@ +|null + */ + protected ?array $matches = null; + + /** + * Create a new SearchPrompt instance. + * + * @param Closure(string): array $options + */ + public function __construct( + public string $label, + public Closure $options, + public string $placeholder = '', + public int $scroll = 5, + public ?Closure $validate = null, + public string $hint = '' + ) { + $this->trackTypedValue(submit: false); + + $this->on('key', fn ($key) => match ($key) { + Key::UP, Key::UP_ARROW, Key::SHIFT_TAB => $this->highlightPrevious(), + Key::DOWN, Key::DOWN_ARROW, Key::TAB => $this->highlightNext(), + Key::ENTER => $this->highlighted !== null ? $this->submit() : $this->search(), + Key::LEFT, Key::LEFT_ARROW, Key::RIGHT, Key::RIGHT_ARROW => $this->highlighted = null, + default => $this->search(), + }); + } + + /** + * Perform the search. + */ + protected function search(): void + { + $this->state = 'searching'; + $this->highlighted = null; + $this->render(); + $this->matches = null; + $this->state = 'active'; + } + + /** + * Get the entered value with a virtual cursor. + */ + public function valueWithCursor(int $maxWidth): string + { + if ($this->highlighted !== null) { + return $this->typedValue === '' + ? $this->dim($this->truncate($this->placeholder, $maxWidth)) + : $this->truncate($this->typedValue, $maxWidth); + } + + if ($this->typedValue === '') { + return $this->dim($this->addCursor($this->placeholder, 0, $maxWidth)); + } + + return $this->addCursor($this->typedValue, $this->cursorPosition, $maxWidth); + } + + /** + * Get options that match the input. + * + * @return array + */ + public function matches(): array + { + if (is_array($this->matches)) { + return $this->matches; + } + + return $this->matches = ($this->options)($this->typedValue); + } + + /** + * The currently visible matches. + * + * @return array + */ + public function visible(): array + { + return array_slice($this->matches(), $this->firstVisible, $this->scroll, preserve_keys: true); + } + + /** + * Highlight the previous entry, or wrap around to the last entry. + */ + protected function highlightPrevious(): void + { + if ($this->matches === []) { + $this->highlighted = null; + } elseif ($this->highlighted === null) { + $this->highlighted = count($this->matches) - 1; + } elseif ($this->highlighted === 0) { + $this->highlighted = null; + } else { + $this->highlighted = $this->highlighted - 1; + } + + if ($this->highlighted < $this->firstVisible) { + $this->firstVisible--; + } elseif ($this->highlighted === count($this->matches) - 1) { + $this->firstVisible = count($this->matches) - min($this->scroll, count($this->matches)); + } + } + + /** + * Highlight the next entry, or wrap around to the first entry. + */ + protected function highlightNext(): void + { + if ($this->matches === []) { + $this->highlighted = null; + } elseif ($this->highlighted === null) { + $this->highlighted = 0; + } else { + $this->highlighted = $this->highlighted === count($this->matches) - 1 ? null : $this->highlighted + 1; + } + + if ($this->highlighted > $this->firstVisible + $this->scroll - 1) { + $this->firstVisible++; + } elseif ($this->highlighted === 0 || $this->highlighted === null) { + $this->firstVisible = 0; + } + } + + /** + * Get the current search query. + */ + public function searchValue(): string + { + return $this->typedValue; + } + + /** + * Get the selected value. + */ + public function value(): int|string|null + { + if ($this->matches === null || $this->highlighted === null) { + return null; + } + + return array_is_list($this->matches) + ? $this->matches[$this->highlighted] + : array_keys($this->matches)[$this->highlighted]; + } + + /** + * Get the selected label. + */ + public function label(): ?string + { + return $this->matches[array_keys($this->matches)[$this->highlighted]] ?? null; + } +} diff --git a/core/vendor/laravel/prompts/src/SelectPrompt.php b/core/vendor/laravel/prompts/src/SelectPrompt.php new file mode 100644 index 0000000000..d8cb24d86c --- /dev/null +++ b/core/vendor/laravel/prompts/src/SelectPrompt.php @@ -0,0 +1,119 @@ + + */ + public array $options; + + /** + * Create a new SelectPrompt instance. + * + * @param array|Collection $options + */ + public function __construct( + public string $label, + array|Collection $options, + public int|string|null $default = null, + public int $scroll = 5, + public ?Closure $validate = null, + public string $hint = '' + ) { + $this->options = $options instanceof Collection ? $options->all() : $options; + + if ($this->default) { + if (array_is_list($this->options)) { + $this->highlighted = array_search($this->default, $this->options) ?: 0; + } else { + $this->highlighted = array_search($this->default, array_keys($this->options)) ?: 0; + } + } + + $this->on('key', fn ($key) => match ($key) { + Key::UP, Key::UP_ARROW, Key::LEFT, Key::LEFT_ARROW, Key::SHIFT_TAB, 'k', 'h' => $this->highlightPrevious(), + Key::DOWN, Key::DOWN_ARROW, Key::RIGHT, Key::RIGHT_ARROW, Key::TAB, 'j', 'l' => $this->highlightNext(), + Key::ENTER => $this->submit(), + default => null, + }); + } + + /** + * Get the selected value. + */ + public function value(): int|string|null + { + if (array_is_list($this->options)) { + return $this->options[$this->highlighted] ?? null; + } else { + return array_keys($this->options)[$this->highlighted]; + } + } + + /** + * Get the selected label. + */ + public function label(): ?string + { + if (array_is_list($this->options)) { + return $this->options[$this->highlighted] ?? null; + } else { + return $this->options[array_keys($this->options)[$this->highlighted]] ?? null; + } + } + + /** + * The currently visible options. + * + * @return array + */ + public function visible(): array + { + return array_slice($this->options, $this->firstVisible, $this->scroll, preserve_keys: true); + } + + /** + * Highlight the previous entry, or wrap around to the last entry. + */ + protected function highlightPrevious(): void + { + $this->highlighted = $this->highlighted === 0 ? count($this->options) - 1 : $this->highlighted - 1; + + if ($this->highlighted < $this->firstVisible) { + $this->firstVisible--; + } elseif ($this->highlighted === count($this->options) - 1) { + $this->firstVisible = count($this->options) - min($this->scroll, count($this->options)); + } + } + + /** + * Highlight the next entry, or wrap around to the first entry. + */ + protected function highlightNext(): void + { + $this->highlighted = $this->highlighted === count($this->options) - 1 ? 0 : $this->highlighted + 1; + + if ($this->highlighted > $this->firstVisible + $this->scroll - 1) { + $this->firstVisible++; + } elseif ($this->highlighted === 0) { + $this->firstVisible = 0; + } + } +} diff --git a/core/vendor/laravel/prompts/src/Spinner.php b/core/vendor/laravel/prompts/src/Spinner.php new file mode 100644 index 0000000000..6f5f7326ba --- /dev/null +++ b/core/vendor/laravel/prompts/src/Spinner.php @@ -0,0 +1,126 @@ +capturePreviousNewLines(); + + if (! function_exists('pcntl_fork')) { + $this->renderStatically($callback); + } + + $this->hideCursor(); + + $originalAsync = pcntl_async_signals(true); + + pcntl_signal(SIGINT, function () { + $this->showCursor(); + exit(); + }); + + try { + $this->render(); + + $pid = pcntl_fork(); + + if ($pid === 0) { + while (true) { // @phpstan-ignore-line + $this->render(); + + $this->count++; + + usleep($this->interval * 1000); + } + } else { + $result = $callback(); + posix_kill($pid, SIGHUP); + $lines = explode(PHP_EOL, $this->prevFrame); + $this->moveCursor(-999, -count($lines) + 1); + $this->eraseDown(); + $this->showCursor(); + pcntl_async_signals($originalAsync); + pcntl_signal(SIGINT, SIG_DFL); + + return $result; + } + } catch (\Throwable $e) { + $this->showCursor(); + pcntl_async_signals($originalAsync); + pcntl_signal(SIGINT, SIG_DFL); + + throw $e; + } + } + + /** + * Render a static version of the spinner. + * + * @template TReturn of mixed + * + * @param \Closure(): TReturn $callback + * @return TReturn + */ + protected function renderStatically(Closure $callback): mixed + { + $this->static = true; + + $this->render(); + + return $callback(); + } + + /** + * Disable prompting for input. + * + * @throws \RuntimeException + */ + public function prompt(): never + { + throw new RuntimeException('Spinner cannot be prompted.'); + } + + /** + * Get the current value of the prompt. + */ + public function value(): bool + { + return true; + } +} diff --git a/core/vendor/laravel/prompts/src/SuggestPrompt.php b/core/vendor/laravel/prompts/src/SuggestPrompt.php new file mode 100644 index 0000000000..6e1f423726 --- /dev/null +++ b/core/vendor/laravel/prompts/src/SuggestPrompt.php @@ -0,0 +1,169 @@ +|Closure(string): array + */ + public array|Closure $options; + + /** + * The cache of matches. + * + * @var array|null + */ + protected ?array $matches = null; + + /** + * Create a new SuggestPrompt instance. + * + * @param array|Collection|Closure(string): array $options + */ + public function __construct( + public string $label, + array|Collection|Closure $options, + public string $placeholder = '', + public string $default = '', + public int $scroll = 5, + public bool|string $required = false, + public ?Closure $validate = null, + public string $hint = '' + ) { + $this->options = $options instanceof Collection ? $options->all() : $options; + + $this->on('key', fn ($key) => match ($key) { + Key::UP, Key::UP_ARROW, Key::SHIFT_TAB => $this->highlightPrevious(), + Key::DOWN, Key::DOWN_ARROW, Key::TAB => $this->highlightNext(), + Key::ENTER => $this->selectHighlighted(), + Key::LEFT, Key::LEFT_ARROW, Key::RIGHT, Key::RIGHT_ARROW => $this->highlighted = null, + default => (function () { + $this->highlighted = null; + $this->matches = null; + })(), + }); + + $this->trackTypedValue($default); + } + + /** + * Get the entered value with a virtual cursor. + */ + public function valueWithCursor(int $maxWidth): string + { + if ($this->highlighted !== null) { + return $this->value() === '' + ? $this->dim($this->truncate($this->placeholder, $maxWidth)) + : $this->truncate($this->value(), $maxWidth); + } + + if ($this->value() === '') { + return $this->dim($this->addCursor($this->placeholder, 0, $maxWidth)); + } + + return $this->addCursor($this->value(), $this->cursorPosition, $maxWidth); + } + + /** + * Get options that match the input. + * + * @return array + */ + public function matches(): array + { + if (is_array($this->matches)) { + return $this->matches; + } + + if ($this->options instanceof Closure) { + return $this->matches = array_values(($this->options)($this->value())); + } + + return $this->matches = array_values(array_filter($this->options, function ($option) { + return str_starts_with(strtolower($option), strtolower($this->value())); + })); + } + + /** + * The current visible matches. + * + * @return array + */ + public function visible(): array + { + return array_slice($this->matches(), $this->firstVisible, $this->scroll, preserve_keys: true); + } + + /** + * Highlight the previous entry, or wrap around to the last entry. + */ + protected function highlightPrevious(): void + { + if ($this->matches() === []) { + $this->highlighted = null; + } elseif ($this->highlighted === null) { + $this->highlighted = count($this->matches()) - 1; + } elseif ($this->highlighted === 0) { + $this->highlighted = null; + } else { + $this->highlighted = $this->highlighted - 1; + } + + if ($this->highlighted < $this->firstVisible) { + $this->firstVisible--; + } elseif ($this->highlighted === count($this->matches()) - 1) { + $this->firstVisible = count($this->matches()) - min($this->scroll, count($this->matches())); + } + } + + /** + * Highlight the next entry, or wrap around to the first entry. + */ + protected function highlightNext(): void + { + if ($this->matches() === []) { + $this->highlighted = null; + } elseif ($this->highlighted === null) { + $this->highlighted = 0; + } else { + $this->highlighted = $this->highlighted === count($this->matches()) - 1 ? null : $this->highlighted + 1; + } + + if ($this->highlighted > $this->firstVisible + $this->scroll - 1) { + $this->firstVisible++; + } elseif ($this->highlighted === 0 || $this->highlighted === null) { + $this->firstVisible = 0; + } + } + + /** + * Select the highlighted entry. + */ + protected function selectHighlighted(): void + { + if ($this->highlighted === null) { + return; + } + + $this->typedValue = $this->matches()[$this->highlighted]; + } +} diff --git a/core/vendor/laravel/prompts/src/Terminal.php b/core/vendor/laravel/prompts/src/Terminal.php new file mode 100644 index 0000000000..2575984c2c --- /dev/null +++ b/core/vendor/laravel/prompts/src/Terminal.php @@ -0,0 +1,79 @@ +initialTtyMode ??= (shell_exec('stty -g') ?: null); + + shell_exec("stty $mode"); + } + + /** + * Restore the initial TTY mode. + */ + public function restoreTty(): void + { + if ($this->initialTtyMode) { + shell_exec("stty {$this->initialTtyMode}"); + + $this->initialTtyMode = null; + } + } + + /** + * Get the number of columns in the terminal. + */ + public function cols(): int + { + return $this->cols ??= (new SymfonyTerminal())->getWidth(); + } + + /** + * Get the number of lines in the terminal. + */ + public function lines(): int + { + return $this->lines ??= (new SymfonyTerminal())->getHeight(); + } + + /** + * Exit the interactive session. + */ + public function exit(): void + { + exit(1); + } +} diff --git a/core/vendor/laravel/prompts/src/TextPrompt.php b/core/vendor/laravel/prompts/src/TextPrompt.php new file mode 100644 index 0000000000..2588f7b08b --- /dev/null +++ b/core/vendor/laravel/prompts/src/TextPrompt.php @@ -0,0 +1,36 @@ +trackTypedValue($default); + } + + /** + * Get the entered value with a virtual cursor. + */ + public function valueWithCursor(int $maxWidth): string + { + if ($this->value() === '') { + return $this->dim($this->addCursor($this->placeholder, 0, $maxWidth)); + } + + return $this->addCursor($this->value(), $this->cursorPosition, $maxWidth); + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/Concerns/DrawsBoxes.php b/core/vendor/laravel/prompts/src/Themes/Default/Concerns/DrawsBoxes.php new file mode 100644 index 0000000000..5bdb038829 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/Concerns/DrawsBoxes.php @@ -0,0 +1,89 @@ +minWidth = min($this->minWidth, Prompt::terminal()->cols() - 6); + + $bodyLines = collect(explode(PHP_EOL, $body)); + $footerLines = collect(explode(PHP_EOL, $footer))->filter(); + $width = $this->longest( + $bodyLines + ->merge($footerLines) + ->push($title) + ->toArray() + ); + + $topBorder = str_repeat('─', $width - mb_strwidth($this->stripEscapeSequences($title))); + $bottomBorder = str_repeat('─', $width + 2); + + $this->line("{$this->{$color}(' ┌')} {$title} {$this->{$color}($topBorder.'┐')}"); + + $bodyLines->each(function ($line) use ($width, $color) { + $this->line("{$this->{$color}(' │')} {$this->pad($line, $width)} {$this->{$color}('│')}"); + }); + + if ($footerLines->isNotEmpty()) { + $this->line($this->{$color}(' ├'.$bottomBorder.'┤')); + + $footerLines->each(function ($line) use ($width, $color) { + $this->line("{$this->{$color}(' │')} {$this->pad($line, $width)} {$this->{$color}('│')}"); + }); + } + + $this->line($this->{$color}(' └'.$bottomBorder.'┘')); + + return $this; + } + + /** + * Get the length of the longest line. + * + * @param array $lines + */ + protected function longest(array $lines, int $padding = 0): int + { + return max( + $this->minWidth, + collect($lines) + ->map(fn ($line) => mb_strwidth($this->stripEscapeSequences($line)) + $padding) + ->max() + ); + } + + /** + * Pad text ignoring ANSI escape sequences. + */ + protected function pad(string $text, int $length): string + { + $rightPadding = str_repeat(' ', max(0, $length - mb_strwidth($this->stripEscapeSequences($text)))); + + return "{$text}{$rightPadding}"; + } + + /** + * Strip ANSI escape sequences from the given text. + */ + protected function stripEscapeSequences(string $text): string + { + $text = preg_replace("/\e[^m]*m/", '', $text); + + return preg_replace("/<(?:(?:[fb]g|options)=[a-z,;]+)+>(.*?)<\/>/i", '$1', $text); + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/Concerns/DrawsScrollbars.php b/core/vendor/laravel/prompts/src/Themes/Default/Concerns/DrawsScrollbars.php new file mode 100644 index 0000000000..1383699418 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/Concerns/DrawsScrollbars.php @@ -0,0 +1,55 @@ + $visible + * @return \Illuminate\Support\Collection + */ + protected function scrollbar(Collection $visible, int $firstVisible, int $height, int $total, int $width, string $color = 'cyan'): Collection + { + if ($height >= $total) { + return $visible; + } + + $scrollPosition = $this->scrollPosition($firstVisible, $height, $total); + + return $visible + ->values() + ->map(fn ($line) => $this->pad($line, $width)) + ->map(fn ($line, $index) => match ($index) { + $scrollPosition => preg_replace('/.$/', $this->{$color}('┃'), $line), + default => preg_replace('/.$/', $this->gray('│'), $line), + }); + } + + /** + * Return the position where the scrollbar "handle" should be rendered. + */ + protected function scrollPosition(int $firstVisible, int $height, int $total): int + { + if ($firstVisible === 0) { + return 0; + } + + $maxPosition = $total - $height; + + if ($firstVisible === $maxPosition) { + return $height - 1; + } + + if ($height <= 2) { + return -1; + } + + $percent = $firstVisible / $maxPosition; + + return (int) round($percent * ($height - 3)) + 1; + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/ConfirmPromptRenderer.php b/core/vendor/laravel/prompts/src/Themes/Default/ConfirmPromptRenderer.php new file mode 100644 index 0000000000..906329c714 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/ConfirmPromptRenderer.php @@ -0,0 +1,71 @@ +state) { + 'submit' => $this + ->box( + $this->dim($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->truncate($prompt->label(), $prompt->terminal()->cols() - 6) + ), + + 'cancel' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $this->renderOptions($prompt), + color: 'red' + ) + ->error('Cancelled.'), + + 'error' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $this->renderOptions($prompt), + color: 'yellow', + ) + ->warning($this->truncate($prompt->error, $prompt->terminal()->cols() - 5)), + + default => $this + ->box( + $this->cyan($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->renderOptions($prompt), + ) + ->when( + $prompt->hint, + fn () => $this->hint($prompt->hint), + fn () => $this->newLine() // Space for errors + ), + }; + } + + /** + * Render the confirm prompt options. + */ + protected function renderOptions(ConfirmPrompt $prompt): string + { + $length = (int) floor(($prompt->terminal()->cols() - 14) / 2); + $yes = $this->truncate($prompt->yes, $length); + $no = $this->truncate($prompt->no, $length); + + if ($prompt->state === 'cancel') { + return $this->dim($prompt->confirmed + ? "● {$this->strikethrough($yes)} / ○ {$this->strikethrough($no)}" + : "○ {$this->strikethrough($yes)} / ● {$this->strikethrough($no)}"); + } + + return $prompt->confirmed + ? "{$this->green('●')} {$yes} {$this->dim('/ ○ '.$no)}" + : "{$this->dim('○ '.$yes.' /')} {$this->green('●')} {$no}"; + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/MultiSelectPromptRenderer.php b/core/vendor/laravel/prompts/src/Themes/Default/MultiSelectPromptRenderer.php new file mode 100644 index 0000000000..d8a6c7ef87 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/MultiSelectPromptRenderer.php @@ -0,0 +1,112 @@ +scroll = min($prompt->scroll, $prompt->terminal()->lines() - 5); + + return match ($prompt->state) { + 'submit' => $this + ->box( + $this->dim($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->renderSelectedOptions($prompt) + ), + + 'cancel' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $this->renderOptions($prompt), + color: 'red', + ) + ->error('Cancelled.'), + + 'error' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $this->renderOptions($prompt), + color: 'yellow', + ) + ->warning($this->truncate($prompt->error, $prompt->terminal()->cols() - 5)), + + default => $this + ->box( + $this->cyan($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->renderOptions($prompt), + ) + ->when( + $prompt->hint, + fn () => $this->hint($prompt->hint), + fn () => $this->newLine() // Space for errors + ), + }; + } + + /** + * Render the options. + */ + protected function renderOptions(MultiSelectPrompt $prompt): string + { + return $this->scrollbar( + collect($prompt->visible()) + ->map(fn ($label) => $this->truncate($label, $prompt->terminal()->cols() - 12)) + ->map(function ($label, $key) use ($prompt) { + $index = array_search($key, array_keys($prompt->options)); + $active = $index === $prompt->highlighted; + if (array_is_list($prompt->options)) { + $value = $prompt->options[$index]; + } else { + $value = array_keys($prompt->options)[$index]; + } + $selected = in_array($value, $prompt->value()); + + if ($prompt->state === 'cancel') { + return $this->dim(match (true) { + $active && $selected => "› ◼ {$this->strikethrough($label)} ", + $active => "› ◻ {$this->strikethrough($label)} ", + $selected => " ◼ {$this->strikethrough($label)} ", + default => " ◻ {$this->strikethrough($label)} ", + }); + } + + return match (true) { + $active && $selected => "{$this->cyan('› ◼')} {$label} ", + $active => "{$this->cyan('›')} ◻ {$label} ", + $selected => " {$this->cyan('◼')} {$this->dim($label)} ", + default => " {$this->dim('◻')} {$this->dim($label)} ", + }; + }) + ->values(), + $prompt->firstVisible, + $prompt->scroll, + count($prompt->options), + min($this->longest($prompt->options, padding: 6), $prompt->terminal()->cols() - 6), + $prompt->state === 'cancel' ? 'dim' : 'cyan' + )->implode(PHP_EOL); + } + + /** + * Render the selected options. + */ + protected function renderSelectedOptions(MultiSelectPrompt $prompt): string + { + if (count($prompt->labels()) === 0) { + return $this->gray('None'); + } + + return implode("\n", array_map( + fn ($label) => $this->truncate($label, $prompt->terminal()->cols() - 6), + $prompt->labels() + )); + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/NoteRenderer.php b/core/vendor/laravel/prompts/src/Themes/Default/NoteRenderer.php new file mode 100644 index 0000000000..2787c70a03 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/NoteRenderer.php @@ -0,0 +1,56 @@ +message)); + + switch ($note->type) { + case 'intro': + case 'outro': + $lines = $lines->map(fn ($line) => " {$line} "); + $longest = $lines->map(fn ($line) => strlen($line))->max(); + + $lines + ->each(function ($line) use ($longest) { + $line = str_pad($line, $longest, ' '); + $this->line(" {$this->bgCyan($this->black($line))}"); + }); + + return $this; + + case 'warning': + $lines->each(fn ($line) => $this->line($this->yellow(" {$line}"))); + + return $this; + + case 'error': + $lines->each(fn ($line) => $this->line($this->red(" {$line}"))); + + return $this; + + case 'alert': + $lines->each(fn ($line) => $this->line(" {$this->bgRed($this->white(" {$line} "))}")); + + return $this; + + case 'info': + $lines->each(fn ($line) => $this->line($this->green(" {$line}"))); + + return $this; + + default: + $lines->each(fn ($line) => $this->line(" {$line}")); + + return $this; + } + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/PasswordPromptRenderer.php b/core/vendor/laravel/prompts/src/Themes/Default/PasswordPromptRenderer.php new file mode 100644 index 0000000000..a7d801ac48 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/PasswordPromptRenderer.php @@ -0,0 +1,53 @@ +terminal()->cols() - 6; + + return match ($prompt->state) { + 'submit' => $this + ->box( + $this->dim($prompt->label), + $this->truncate($prompt->masked(), $maxWidth), + ), + + 'cancel' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $this->strikethrough($this->dim($this->truncate($prompt->masked() ?: $prompt->placeholder, $maxWidth))), + color: 'red', + ) + ->error('Cancelled.'), + + 'error' => $this + ->box( + $this->dim($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $prompt->maskedWithCursor($maxWidth), + color: 'yellow', + ) + ->warning($this->truncate($prompt->error, $prompt->terminal()->cols() - 5)), + + default => $this + ->box( + $this->cyan($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $prompt->maskedWithCursor($maxWidth), + ) + ->when( + $prompt->hint, + fn () => $this->hint($prompt->hint), + fn () => $this->newLine() // Space for errors + ), + }; + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/Renderer.php b/core/vendor/laravel/prompts/src/Themes/Default/Renderer.php new file mode 100644 index 0000000000..e50efa89a7 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/Renderer.php @@ -0,0 +1,118 @@ +checkTerminalSize($prompt); + } + + /** + * Render a line of output. + */ + protected function line(string $message): self + { + $this->output .= $message.PHP_EOL; + + return $this; + } + + /** + * Render a new line. + */ + protected function newLine(int $count = 1): self + { + $this->output .= str_repeat(PHP_EOL, $count); + + return $this; + } + + /** + * Render a warning message. + */ + protected function warning(string $message): self + { + return $this->line($this->yellow(" ⚠ {$message}")); + } + + /** + * Render an error message. + */ + protected function error(string $message): self + { + return $this->line($this->red(" ⚠ {$message}")); + } + + /** + * Render an hint message. + */ + protected function hint(string $message): self + { + if ($message === '') { + return $this; + } + + $message = $this->truncate($message, $this->prompt->terminal()->cols() - 6); + + return $this->line($this->gray(" {$message}")); + } + + /** + * Apply the callback if the given "value" is truthy. + * + * @return $this + */ + protected function when(mixed $value, callable $callback, callable $default = null): self + { + if ($value) { + $callback($this); + } elseif ($default) { + $default($this); + } + + return $this; + } + + /** + * Render the output with a blank line above and below. + */ + public function __toString() + { + return str_repeat(PHP_EOL, max(2 - $this->prompt->newLinesWritten(), 0)) + .$this->output + .(in_array($this->prompt->state, ['submit', 'cancel']) ? PHP_EOL : ''); + } + + /** + * Check that the terminal is large enough to render the prompt. + */ + private function checkTerminalSize(Prompt $prompt): void + { + $required = 8; + $actual = $prompt->terminal()->lines(); + + if ($actual < $required) { + throw new RuntimeException( + "The terminal height must be at least [$required] lines but is currently [$actual]. Please increase the height or reduce the font size." + ); + } + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/SearchPromptRenderer.php b/core/vendor/laravel/prompts/src/Themes/Default/SearchPromptRenderer.php new file mode 100644 index 0000000000..7142fa578e --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/SearchPromptRenderer.php @@ -0,0 +1,126 @@ +scroll = min($prompt->scroll, $prompt->terminal()->lines() - 7); + $maxWidth = $prompt->terminal()->cols() - 6; + + return match ($prompt->state) { + 'submit' => $this + ->box( + $this->dim($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->truncate($prompt->label(), $maxWidth), + ), + + 'cancel' => $this + ->box( + $this->dim($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->strikethrough($this->dim($this->truncate($prompt->searchValue() ?: $prompt->placeholder, $maxWidth))), + color: 'red', + ) + ->error('Cancelled'), + + 'error' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $prompt->valueWithCursor($maxWidth), + $this->renderOptions($prompt), + color: 'yellow', + ) + ->warning($this->truncate($prompt->error, $prompt->terminal()->cols() - 5)), + + 'searching' => $this + ->box( + $this->cyan($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->valueWithCursorAndSearchIcon($prompt, $maxWidth), + $this->renderOptions($prompt), + ) + ->hint($prompt->hint), + + default => $this + ->box( + $this->cyan($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $prompt->valueWithCursor($maxWidth), + $this->renderOptions($prompt), + ) + ->when( + $prompt->hint, + fn () => $this->hint($prompt->hint), + fn () => $this->newLine() // Space for errors + ) + ->spaceForDropdown($prompt) + }; + } + + /** + * Render the value with the cursor and a search icon. + */ + protected function valueWithCursorAndSearchIcon(SearchPrompt $prompt, int $maxWidth): string + { + return preg_replace( + '/\s$/', + $this->cyan('…'), + $this->pad($prompt->valueWithCursor($maxWidth - 1).' ', min($this->longest($prompt->matches(), padding: 2), $maxWidth)) + ); + } + + /** + * Render a spacer to prevent jumping when the suggestions are displayed. + */ + protected function spaceForDropdown(SearchPrompt $prompt): self + { + if ($prompt->searchValue() !== '') { + return $this; + } + + $this->newLine(max( + 0, + min($prompt->scroll, $prompt->terminal()->lines() - 7) - count($prompt->matches()), + )); + + if ($prompt->matches() === []) { + $this->newLine(); + } + + return $this; + } + + /** + * Render the options. + */ + protected function renderOptions(SearchPrompt $prompt): string + { + if ($prompt->searchValue() !== '' && empty($prompt->matches())) { + return $this->gray(' '.($prompt->state === 'searching' ? 'Searching...' : 'No results.')); + } + + return $this->scrollbar( + collect($prompt->visible()) + ->map(fn ($label) => $this->truncate($label, $prompt->terminal()->cols() - 10)) + ->map(function ($label, $key) use ($prompt) { + $index = array_search($key, array_keys($prompt->matches())); + + return $prompt->highlighted === $index + ? "{$this->cyan('›')} {$label} " + : " {$this->dim($label)} "; + }) + ->values(), + $prompt->firstVisible, + $prompt->scroll, + count($prompt->matches()), + min($this->longest($prompt->matches(), padding: 4), $prompt->terminal()->cols() - 6) + )->implode(PHP_EOL); + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/SelectPromptRenderer.php b/core/vendor/laravel/prompts/src/Themes/Default/SelectPromptRenderer.php new file mode 100644 index 0000000000..a7b73433b7 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/SelectPromptRenderer.php @@ -0,0 +1,86 @@ +scroll = min($prompt->scroll, $prompt->terminal()->lines() - 5); + $maxWidth = $prompt->terminal()->cols() - 6; + + return match ($prompt->state) { + 'submit' => $this + ->box( + $this->dim($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->truncate($prompt->label(), $maxWidth), + ), + + 'cancel' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $this->renderOptions($prompt), + color: 'red', + ) + ->error('Cancelled.'), + + 'error' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $this->renderOptions($prompt), + color: 'yellow', + ) + ->warning($this->truncate($prompt->error, $prompt->terminal()->cols() - 5)), + + default => $this + ->box( + $this->cyan($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->renderOptions($prompt), + ) + ->when( + $prompt->hint, + fn () => $this->hint($prompt->hint), + fn () => $this->newLine() // Space for errors + ), + }; + } + + /** + * Render the options. + */ + protected function renderOptions(SelectPrompt $prompt): string + { + return $this->scrollbar( + collect($prompt->visible()) + ->map(fn ($label) => $this->truncate($label, $prompt->terminal()->cols() - 12)) + ->map(function ($label, $key) use ($prompt) { + $index = array_search($key, array_keys($prompt->options)); + + if ($prompt->state === 'cancel') { + return $this->dim($prompt->highlighted === $index + ? "› ● {$this->strikethrough($label)} " + : " ○ {$this->strikethrough($label)} " + ); + } + + return $prompt->highlighted === $index + ? "{$this->cyan('›')} {$this->cyan('●')} {$label} " + : " {$this->dim('○')} {$this->dim($label)} "; + }) + ->values(), + $prompt->firstVisible, + $prompt->scroll, + count($prompt->options), + min($this->longest($prompt->options, padding: 6), $prompt->terminal()->cols() - 6), + $prompt->state === 'cancel' ? 'dim' : 'cyan' + )->implode(PHP_EOL); + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/SpinnerRenderer.php b/core/vendor/laravel/prompts/src/Themes/Default/SpinnerRenderer.php new file mode 100644 index 0000000000..c68aef4fca --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/SpinnerRenderer.php @@ -0,0 +1,41 @@ + + */ + protected array $frames = ['⠂', '⠒', '⠐', '⠰', '⠠', '⠤', '⠄', '⠆']; + + /** + * The frame to render when the spinner is static. + */ + protected string $staticFrame = '⠶'; + + /** + * The interval between frames. + */ + protected int $interval = 75; + + /** + * Render the spinner. + */ + public function __invoke(Spinner $spinner): string + { + if ($spinner->static) { + return $this->line(" {$this->cyan($this->staticFrame)} {$spinner->message}"); + } + + $spinner->interval = $this->interval; + + $frame = $this->frames[$spinner->count % count($this->frames)]; + + return $this->line(" {$this->cyan($frame)} {$spinner->message}"); + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/SuggestPromptRenderer.php b/core/vendor/laravel/prompts/src/Themes/Default/SuggestPromptRenderer.php new file mode 100644 index 0000000000..be04221e13 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/SuggestPromptRenderer.php @@ -0,0 +1,114 @@ +scroll = min($prompt->scroll, $prompt->terminal()->lines() - 7); + $maxWidth = $prompt->terminal()->cols() - 6; + + return match ($prompt->state) { + 'submit' => $this + ->box( + $this->dim($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->truncate($prompt->value(), $maxWidth), + ), + + 'cancel' => $this + ->box( + $this->dim($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->strikethrough($this->dim($this->truncate($prompt->value() ?: $prompt->placeholder, $maxWidth))), + color: 'red', + ) + ->error('Cancelled'), + + 'error' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $this->valueWithCursorAndArrow($prompt, $maxWidth), + $this->renderOptions($prompt), + color: 'yellow', + ) + ->warning($this->truncate($prompt->error, $prompt->terminal()->cols() - 5)), + + default => $this + ->box( + $this->cyan($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->valueWithCursorAndArrow($prompt, $maxWidth), + $this->renderOptions($prompt), + ) + ->when( + $prompt->hint, + fn () => $this->hint($prompt->hint), + fn () => $this->newLine() // Space for errors + ) + ->spaceForDropdown($prompt), + }; + } + + /** + * Render the value with the cursor and an arrow. + */ + protected function valueWithCursorAndArrow(SuggestPrompt $prompt, int $maxWidth): string + { + if ($prompt->highlighted !== null || $prompt->value() !== '' || count($prompt->matches()) === 0) { + return $prompt->valueWithCursor($maxWidth); + } + + return preg_replace( + '/\s$/', + $this->cyan('⌄'), + $this->pad($prompt->valueWithCursor($maxWidth - 1).' ', min($this->longest($prompt->matches(), padding: 2), $maxWidth)) + ); + } + + /** + * Render a spacer to prevent jumping when the suggestions are displayed. + */ + protected function spaceForDropdown(SuggestPrompt $prompt): self + { + if ($prompt->value() === '' && $prompt->highlighted === null) { + $this->newLine(min( + count($prompt->matches()), + $prompt->scroll, + $prompt->terminal()->lines() - 7 + ) + 1); + } + + return $this; + } + + /** + * Render the options. + */ + protected function renderOptions(SuggestPrompt $prompt): string + { + if (empty($prompt->matches()) || ($prompt->value() === '' && $prompt->highlighted === null)) { + return ''; + } + + return $this->scrollbar( + collect($prompt->visible()) + ->map(fn ($label) => $this->truncate($label, $prompt->terminal()->cols() - 10)) + ->map(fn ($label, $key) => $prompt->highlighted === $key + ? "{$this->cyan('›')} {$label} " + : " {$this->dim($label)} " + ), + $prompt->firstVisible, + $prompt->scroll, + count($prompt->matches()), + min($this->longest($prompt->matches(), padding: 4), $prompt->terminal()->cols() - 6), + $prompt->state === 'cancel' ? 'dim' : 'cyan' + )->implode(PHP_EOL); + } +} diff --git a/core/vendor/laravel/prompts/src/Themes/Default/TextPromptRenderer.php b/core/vendor/laravel/prompts/src/Themes/Default/TextPromptRenderer.php new file mode 100644 index 0000000000..f293ec4899 --- /dev/null +++ b/core/vendor/laravel/prompts/src/Themes/Default/TextPromptRenderer.php @@ -0,0 +1,53 @@ +terminal()->cols() - 6; + + return match ($prompt->state) { + 'submit' => $this + ->box( + $this->dim($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $this->truncate($prompt->value(), $maxWidth), + ), + + 'cancel' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $this->strikethrough($this->dim($this->truncate($prompt->value() ?: $prompt->placeholder, $maxWidth))), + color: 'red', + ) + ->error('Cancelled.'), + + 'error' => $this + ->box( + $this->truncate($prompt->label, $prompt->terminal()->cols() - 6), + $prompt->valueWithCursor($maxWidth), + color: 'yellow', + ) + ->warning($this->truncate($prompt->error, $prompt->terminal()->cols() - 5)), + + default => $this + ->box( + $this->cyan($this->truncate($prompt->label, $prompt->terminal()->cols() - 6)), + $prompt->valueWithCursor($maxWidth), + ) + ->when( + $prompt->hint, + fn () => $this->hint($prompt->hint), + fn () => $this->newLine() // Space for errors + ) + }; + } +} diff --git a/core/vendor/laravel/prompts/src/helpers.php b/core/vendor/laravel/prompts/src/helpers.php new file mode 100644 index 0000000000..bc058fad6d --- /dev/null +++ b/core/vendor/laravel/prompts/src/helpers.php @@ -0,0 +1,141 @@ +prompt(); +} + +/** + * Prompt the user for input, hiding the value. + */ +function password(string $label, string $placeholder = '', bool|string $required = false, Closure $validate = null, string $hint = ''): string +{ + return (new PasswordPrompt($label, $placeholder, $required, $validate, $hint))->prompt(); +} + +/** + * Prompt the user to select an option. + * + * @param array|Collection $options + */ +function select(string $label, array|Collection $options, int|string $default = null, int $scroll = 5, Closure $validate = null, string $hint = ''): int|string +{ + return (new SelectPrompt($label, $options, $default, $scroll, $validate, $hint))->prompt(); +} + +/** + * Prompt the user to select multiple options. + * + * @param array|Collection $options + * @param array|Collection $default + * @return array + */ +function multiselect(string $label, array|Collection $options, array|Collection $default = [], int $scroll = 5, bool|string $required = false, Closure $validate = null, string $hint = 'Use the space bar to select options.'): array +{ + return (new MultiSelectPrompt($label, $options, $default, $scroll, $required, $validate, $hint))->prompt(); +} + +/** + * Prompt the user to confirm an action. + */ +function confirm(string $label, bool $default = true, string $yes = 'Yes', string $no = 'No', bool|string $required = false, Closure $validate = null, string $hint = ''): bool +{ + return (new ConfirmPrompt($label, $default, $yes, $no, $required, $validate, $hint))->prompt(); +} + +/** + * Prompt the user for text input with auto-completion. + * + * @param array|Collection|Closure(string): array $options + */ +function suggest(string $label, array|Collection|Closure $options, string $placeholder = '', string $default = '', int $scroll = 5, bool|string $required = false, Closure $validate = null, string $hint = ''): string +{ + return (new SuggestPrompt($label, $options, $placeholder, $default, $scroll, $required, $validate, $hint))->prompt(); +} + +/** + * Allow the user to search for an option. + * + * @param Closure(string): array $options + */ +function search(string $label, Closure $options, string $placeholder = '', int $scroll = 5, Closure $validate = null, string $hint = ''): int|string +{ + return (new SearchPrompt($label, $options, $placeholder, $scroll, $validate, $hint))->prompt(); +} + +/** + * Render a spinner while the given callback is executing. + * + * @template TReturn of mixed + * + * @param \Closure(): TReturn $callback + * @return TReturn + */ +function spin(Closure $callback, string $message = ''): mixed +{ + return (new Spinner($message))->spin($callback); +} + +/** + * Display a note. + */ +function note(string $message, string $type = null): void +{ + (new Note($message, $type))->display(); +} + +/** + * Display an error. + */ +function error(string $message): void +{ + (new Note($message, 'error'))->display(); +} + +/** + * Display a warning. + */ +function warning(string $message): void +{ + (new Note($message, 'warning'))->display(); +} + +/** + * Display an alert. + */ +function alert(string $message): void +{ + (new Note($message, 'alert'))->display(); +} + +/** + * Display an informational message. + */ +function info(string $message): void +{ + (new Note($message, 'info'))->display(); +} + +/** + * Display an introduction. + */ +function intro(string $message): void +{ + (new Note($message, 'intro'))->display(); +} + +/** + * Display a closing message. + */ +function outro(string $message): void +{ + (new Note($message, 'outro'))->display(); +} diff --git a/core/vendor/league/flysystem-local/FallbackMimeTypeDetector.php b/core/vendor/league/flysystem-local/FallbackMimeTypeDetector.php new file mode 100644 index 0000000000..97b0ddc88d --- /dev/null +++ b/core/vendor/league/flysystem-local/FallbackMimeTypeDetector.php @@ -0,0 +1,51 @@ +detector->detectMimeType($path, $contents); + } + + public function detectMimeTypeFromBuffer(string $contents): ?string + { + return $this->detector->detectMimeTypeFromBuffer($contents); + } + + public function detectMimeTypeFromPath(string $path): ?string + { + return $this->detector->detectMimeTypeFromPath($path); + } + + public function detectMimeTypeFromFile(string $path): ?string + { + $mimeType = $this->detector->detectMimeTypeFromFile($path); + + if ($mimeType !== null && ! in_array($mimeType, $this->inconclusiveMimetypes)) { + return $mimeType; + } + + return $this->detector->detectMimeTypeFromPath($path); + } +} diff --git a/core/vendor/league/flysystem-local/LocalFilesystemAdapter.php b/core/vendor/league/flysystem-local/LocalFilesystemAdapter.php new file mode 100644 index 0000000000..aeb1eabf50 --- /dev/null +++ b/core/vendor/league/flysystem-local/LocalFilesystemAdapter.php @@ -0,0 +1,463 @@ +prefixer = new PathPrefixer($location, DIRECTORY_SEPARATOR); + $visibility ??= new PortableVisibilityConverter(); + $this->visibility = $visibility; + $this->rootLocation = $location; + $this->mimeTypeDetector = $mimeTypeDetector ?: new FallbackMimeTypeDetector(new FinfoMimeTypeDetector()); + + if ( ! $lazyRootCreation) { + $this->ensureRootDirectoryExists(); + } + } + + private function ensureRootDirectoryExists(): void + { + if ($this->rootLocationIsSetup) { + return; + } + + $this->ensureDirectoryExists($this->rootLocation, $this->visibility->defaultForDirectories()); + } + + public function write(string $path, string $contents, Config $config): void + { + $this->writeToFile($path, $contents, $config); + } + + public function writeStream(string $path, $contents, Config $config): void + { + $this->writeToFile($path, $contents, $config); + } + + /** + * @param resource|string $contents + */ + private function writeToFile(string $path, $contents, Config $config): void + { + $prefixedLocation = $this->prefixer->prefixPath($path); + $this->ensureRootDirectoryExists(); + $this->ensureDirectoryExists( + dirname($prefixedLocation), + $this->resolveDirectoryVisibility($config->get(Config::OPTION_DIRECTORY_VISIBILITY)) + ); + error_clear_last(); + + if (@file_put_contents($prefixedLocation, $contents, $this->writeFlags) === false) { + throw UnableToWriteFile::atLocation($path, error_get_last()['message'] ?? ''); + } + + if ($visibility = $config->get(Config::OPTION_VISIBILITY)) { + $this->setVisibility($path, (string) $visibility); + } + } + + public function delete(string $path): void + { + $location = $this->prefixer->prefixPath($path); + + if ( ! file_exists($location)) { + return; + } + + error_clear_last(); + + if ( ! @unlink($location)) { + throw UnableToDeleteFile::atLocation($location, error_get_last()['message'] ?? ''); + } + } + + public function deleteDirectory(string $prefix): void + { + $location = $this->prefixer->prefixPath($prefix); + + if ( ! is_dir($location)) { + return; + } + + $contents = $this->listDirectoryRecursively($location, RecursiveIteratorIterator::CHILD_FIRST); + + /** @var SplFileInfo $file */ + foreach ($contents as $file) { + if ( ! $this->deleteFileInfoObject($file)) { + throw UnableToDeleteDirectory::atLocation($prefix, "Unable to delete file at " . $file->getPathname()); + } + } + + unset($contents); + + if ( ! @rmdir($location)) { + throw UnableToDeleteDirectory::atLocation($prefix, error_get_last()['message'] ?? ''); + } + } + + private function listDirectoryRecursively( + string $path, + int $mode = RecursiveIteratorIterator::SELF_FIRST + ): Generator { + if ( ! is_dir($path)) { + return; + } + + yield from new RecursiveIteratorIterator( + new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), + $mode + ); + } + + protected function deleteFileInfoObject(SplFileInfo $file): bool + { + switch ($file->getType()) { + case 'dir': + return @rmdir((string) $file->getRealPath()); + case 'link': + return @unlink((string) $file->getPathname()); + default: + return @unlink((string) $file->getRealPath()); + } + } + + public function listContents(string $path, bool $deep): iterable + { + $location = $this->prefixer->prefixPath($path); + + if ( ! is_dir($location)) { + return; + } + + /** @var SplFileInfo[] $iterator */ + $iterator = $deep ? $this->listDirectoryRecursively($location) : $this->listDirectory($location); + + foreach ($iterator as $fileInfo) { + $pathName = $fileInfo->getPathname(); + + try { + if ($fileInfo->isLink()) { + if ($this->linkHandling & self::SKIP_LINKS) { + continue; + } + throw SymbolicLinkEncountered::atLocation($pathName); + } + + $path = $this->prefixer->stripPrefix($pathName); + $lastModified = $fileInfo->getMTime(); + $isDirectory = $fileInfo->isDir(); + $permissions = octdec(substr(sprintf('%o', $fileInfo->getPerms()), -4)); + $visibility = $isDirectory ? $this->visibility->inverseForDirectory($permissions) : $this->visibility->inverseForFile($permissions); + + yield $isDirectory ? new DirectoryAttributes(str_replace('\\', '/', $path), $visibility, $lastModified) : new FileAttributes( + str_replace('\\', '/', $path), + $fileInfo->getSize(), + $visibility, + $lastModified + ); + } catch (Throwable $exception) { + if (file_exists($pathName)) { + throw $exception; + } + } + } + } + + public function move(string $source, string $destination, Config $config): void + { + $sourcePath = $this->prefixer->prefixPath($source); + $destinationPath = $this->prefixer->prefixPath($destination); + + $this->ensureRootDirectoryExists(); + $this->ensureDirectoryExists( + dirname($destinationPath), + $this->resolveDirectoryVisibility($config->get(Config::OPTION_DIRECTORY_VISIBILITY)) + ); + + if ( ! @rename($sourcePath, $destinationPath)) { + throw UnableToMoveFile::fromLocationTo($sourcePath, $destinationPath); + } + } + + public function copy(string $source, string $destination, Config $config): void + { + $sourcePath = $this->prefixer->prefixPath($source); + $destinationPath = $this->prefixer->prefixPath($destination); + $this->ensureRootDirectoryExists(); + $this->ensureDirectoryExists( + dirname($destinationPath), + $this->resolveDirectoryVisibility($config->get(Config::OPTION_DIRECTORY_VISIBILITY)) + ); + + if ( ! @copy($sourcePath, $destinationPath)) { + throw UnableToCopyFile::fromLocationTo($sourcePath, $destinationPath); + } + } + + public function read(string $path): string + { + $location = $this->prefixer->prefixPath($path); + error_clear_last(); + $contents = @file_get_contents($location); + + if ($contents === false) { + throw UnableToReadFile::fromLocation($path, error_get_last()['message'] ?? ''); + } + + return $contents; + } + + public function readStream(string $path) + { + $location = $this->prefixer->prefixPath($path); + error_clear_last(); + $contents = @fopen($location, 'rb'); + + if ($contents === false) { + throw UnableToReadFile::fromLocation($path, error_get_last()['message'] ?? ''); + } + + return $contents; + } + + protected function ensureDirectoryExists(string $dirname, int $visibility): void + { + if (is_dir($dirname)) { + return; + } + + error_clear_last(); + + if ( ! @mkdir($dirname, $visibility, true)) { + $mkdirError = error_get_last(); + } + + clearstatcache(true, $dirname); + + if ( ! is_dir($dirname)) { + $errorMessage = isset($mkdirError['message']) ? $mkdirError['message'] : ''; + + throw UnableToCreateDirectory::atLocation($dirname, $errorMessage); + } + } + + public function fileExists(string $location): bool + { + $location = $this->prefixer->prefixPath($location); + + return is_file($location); + } + + public function directoryExists(string $location): bool + { + $location = $this->prefixer->prefixPath($location); + + return is_dir($location); + } + + public function createDirectory(string $path, Config $config): void + { + $this->ensureRootDirectoryExists(); + $location = $this->prefixer->prefixPath($path); + $visibility = $config->get(Config::OPTION_VISIBILITY, $config->get(Config::OPTION_DIRECTORY_VISIBILITY)); + $permissions = $this->resolveDirectoryVisibility($visibility); + + if (is_dir($location)) { + $this->setPermissions($location, $permissions); + + return; + } + + error_clear_last(); + + if ( ! @mkdir($location, $permissions, true)) { + throw UnableToCreateDirectory::atLocation($path, error_get_last()['message'] ?? ''); + } + } + + public function setVisibility(string $path, string $visibility): void + { + $path = $this->prefixer->prefixPath($path); + $visibility = is_dir($path) ? $this->visibility->forDirectory($visibility) : $this->visibility->forFile( + $visibility + ); + + $this->setPermissions($path, $visibility); + } + + public function visibility(string $path): FileAttributes + { + $location = $this->prefixer->prefixPath($path); + clearstatcache(false, $location); + error_clear_last(); + $fileperms = @fileperms($location); + + if ($fileperms === false) { + throw UnableToRetrieveMetadata::visibility($path, error_get_last()['message'] ?? ''); + } + + $permissions = $fileperms & 0777; + $visibility = $this->visibility->inverseForFile($permissions); + + return new FileAttributes($path, null, $visibility); + } + + private function resolveDirectoryVisibility(?string $visibility): int + { + return $visibility === null ? $this->visibility->defaultForDirectories() : $this->visibility->forDirectory( + $visibility + ); + } + + public function mimeType(string $path): FileAttributes + { + $location = $this->prefixer->prefixPath($path); + error_clear_last(); + + if ( ! is_file($location)) { + throw UnableToRetrieveMetadata::mimeType($location, 'No such file exists.'); + } + + $mimeType = $this->mimeTypeDetector->detectMimeTypeFromFile($location); + + if ($mimeType === null) { + throw UnableToRetrieveMetadata::mimeType($path, error_get_last()['message'] ?? ''); + } + + return new FileAttributes($path, null, null, null, $mimeType); + } + + public function lastModified(string $path): FileAttributes + { + $location = $this->prefixer->prefixPath($path); + error_clear_last(); + $lastModified = @filemtime($location); + + if ($lastModified === false) { + throw UnableToRetrieveMetadata::lastModified($path, error_get_last()['message'] ?? ''); + } + + return new FileAttributes($path, null, null, $lastModified); + } + + public function fileSize(string $path): FileAttributes + { + $location = $this->prefixer->prefixPath($path); + error_clear_last(); + + if (is_file($location) && ($fileSize = @filesize($location)) !== false) { + return new FileAttributes($path, $fileSize); + } + + throw UnableToRetrieveMetadata::fileSize($path, error_get_last()['message'] ?? ''); + } + + public function checksum(string $path, Config $config): string + { + $algo = $config->get('checksum_algo', 'md5'); + $location = $this->prefixer->prefixPath($path); + error_clear_last(); + $checksum = @hash_file($algo, $location); + + if ($checksum === false) { + throw new UnableToProvideChecksum(error_get_last()['message'] ?? '', $path); + } + + return $checksum; + } + + private function listDirectory(string $location): Generator + { + $iterator = new DirectoryIterator($location); + + foreach ($iterator as $item) { + if ($item->isDot()) { + continue; + } + + yield $item; + } + } + + private function setPermissions(string $location, int $visibility): void + { + error_clear_last(); + if ( ! @chmod($location, $visibility)) { + $extraMessage = error_get_last()['message'] ?? ''; + throw UnableToSetVisibility::atLocation($this->prefixer->stripPrefix($location), $extraMessage); + } + } +} diff --git a/core/vendor/league/flysystem-local/composer.json b/core/vendor/league/flysystem-local/composer.json new file mode 100644 index 0000000000..cd9ef25405 --- /dev/null +++ b/core/vendor/league/flysystem-local/composer.json @@ -0,0 +1,25 @@ +{ + "name": "league/flysystem-local", + "description": "Local filesystem adapter for Flysystem.", + "keywords": ["flysystem", "filesystem", "local", "file", "files"], + "type": "library", + "prefer-stable": true, + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "require": { + "php": "^8.0.2", + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0" + }, + "license": "MIT", + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ] +} diff --git a/core/vendor/league/flysystem/.dockerignore b/core/vendor/league/flysystem/.dockerignore new file mode 100644 index 0000000000..6b8710a711 --- /dev/null +++ b/core/vendor/league/flysystem/.dockerignore @@ -0,0 +1 @@ +.git diff --git a/core/vendor/league/flysystem/CODE_OF_CONDUCT.md b/core/vendor/league/flysystem/CODE_OF_CONDUCT.md deleted file mode 100644 index 89569c0159..0000000000 --- a/core/vendor/league/flysystem/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,76 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal -appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or - advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at info+flysystem@frankdejonge.nl. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see -https://www.contributor-covenant.org/faq diff --git a/core/vendor/league/flysystem/INFO.md b/core/vendor/league/flysystem/INFO.md new file mode 100644 index 0000000000..70c07b412b --- /dev/null +++ b/core/vendor/league/flysystem/INFO.md @@ -0,0 +1,2 @@ +View the docs at: https://flysystem.thephpleague.com/docs/ +Changelog at: https://github.com/thephpleague/flysystem/blob/3.x/CHANGELOG.md diff --git a/core/vendor/league/flysystem/LICENSE b/core/vendor/league/flysystem/LICENSE index f2684c8417..39d50b5e70 100644 --- a/core/vendor/league/flysystem/LICENSE +++ b/core/vendor/league/flysystem/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013-2019 Frank de Jonge +Copyright (c) 2013-2023 Frank de Jonge Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/league/flysystem/SECURITY.md b/core/vendor/league/flysystem/SECURITY.md deleted file mode 100644 index f5b205ed08..0000000000 --- a/core/vendor/league/flysystem/SECURITY.md +++ /dev/null @@ -1,16 +0,0 @@ -# Security Policy - -## Supported Versions - -| Version | Supported | -| ------- | ------------------ | -| 1.0.x | :white_check_mark: | -| 2.0.x | :x: | - -## Reporting a Vulnerability - -When you've encountered a security vulnerability, please disclose it securely. - -The security process is described at: -[https://flysystem.thephpleague.com/docs/security/](https://flysystem.thephpleague.com/docs/security/) - diff --git a/core/vendor/league/flysystem/composer.json b/core/vendor/league/flysystem/composer.json index 32ec81d1bc..dd87132616 100644 --- a/core/vendor/league/flysystem/composer.json +++ b/core/vendor/league/flysystem/composer.json @@ -1,68 +1,67 @@ { "name": "league/flysystem", - "type": "library", - "description": "Filesystem abstraction: Many filesystems, one API.", + "description": "File storage abstraction for PHP", "keywords": [ - "filesystem", "filesystems", "files", "storage", "dropbox", "aws", - "abstraction", "s3", "ftp", "sftp", "remote", "webdav", - "file systems", "cloud", "cloud files", "rackspace", "copy.com" - ], - "funding": [ - { - "type": "other", - "url": "https://offset.earth/frankdejonge" - } + "filesystem", "filesystems", "files", "storage", "aws", + "s3", "ftp", "sftp", "webdav", "file", "cloud" ], - "license": "MIT", - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "require": { - "php": "^7.2.5 || ^8.0", - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3" - }, - "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" + "scripts": { + "phpstan": "vendor/bin/phpstan analyse -l 6 src" }, + "type": "library", + "minimum-stability": "dev", + "prefer-stable": true, "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "League\\Flysystem\\": "src" } }, - "autoload-dev": { - "psr-4": { - "League\\Flysystem\\Stub\\": "stub/" - } + "require": { + "php": "^8.0.2", + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0" }, - "suggest": { - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-webdav": "Allows you to use WebDAV 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", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter" + "require-dev": { + "ext-zip": "*", + "ext-fileinfo": "*", + "ext-ftp": "*", + "microsoft/azure-storage-blob": "^1.1", + "phpunit/phpunit": "^9.5.11", + "phpstan/phpstan": "^0.12.26", + "phpseclib/phpseclib": "^3.0.14", + "aws/aws-sdk-php": "^3.220.0", + "composer/semver": "^3.0", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "sabre/dav": "^4.3.1" }, "conflict": { - "league/flysystem-sftp": "<1.0.6" + "symfony/http-client": "<5.2", + "guzzlehttp/ringphp": "<1.1.1", + "guzzlehttp/guzzle": "<7.0", + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "phpseclib/phpseclib": "3.0.15" }, - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" + "license": "MIT", + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" } - }, - "scripts": { - "phpstan": "php phpstan.php" - } + ], + "repositories": [ + { + "type": "package", + "package": { + "name": "league/flysystem-local", + "version": "3.0.0", + "dist": { + "type": "path", + "url": "src/Local" + } + } + } + ] } diff --git a/core/vendor/league/flysystem/deprecations.md b/core/vendor/league/flysystem/deprecations.md deleted file mode 100644 index c336a425d8..0000000000 --- a/core/vendor/league/flysystem/deprecations.md +++ /dev/null @@ -1,19 +0,0 @@ -# Deprecations - -This document lists all the planned deprecations. - -## Handlers will be removed in 2.0 - -The `Handler` type and associated calls will be removed in version 2.0. - -### Upgrade path - -You should create your own implementation for handling OOP usage, -but it's recommended to move away from using an OOP-style wrapper entirely. - -The reason for this is that it's too easy for implementation details (for -your application this is Flysystem) to leak into the application. The most -important part for Flysystem is that it improves portability and creates a -solid boundary between your application core and the infrastructure you use. -The OOP-style handling breaks this principle, therefore I want to stop -promoting it. diff --git a/core/vendor/league/flysystem/docker-compose.yml b/core/vendor/league/flysystem/docker-compose.yml new file mode 100644 index 0000000000..9a0463ac82 --- /dev/null +++ b/core/vendor/league/flysystem/docker-compose.yml @@ -0,0 +1,77 @@ +--- +version: "3" +services: + sabredav: + image: php:8.1-alpine3.15 + restart: always + volumes: + - ./:/var/www/html/ + ports: + - "4040:4040" + command: php -S 0.0.0.0:4040 /var/www/html/src/WebDAV/resources/server.php + webdav: + image: bytemark/webdav + restart: always + ports: + - "4080:80" + environment: + AUTH_TYPE: Digest + USERNAME: alice + PASSWORD: secret1234 + ANONYMOUS_METHODS: 'GET,OPTIONS' + sftp: + container_name: sftp + restart: always + image: atmoz/sftp + volumes: + - ./test_files/sftp/users.conf:/etc/sftp/users.conf + - ./test_files/sftp/ssh_host_ed25519_key:/etc/ssh/ssh_host_ed25519_key + - ./test_files/sftp/ssh_host_rsa_key:/etc/ssh/ssh_host_rsa_key + - ./test_files/sftp/id_rsa.pub:/home/bar/.ssh/keys/id_rsa.pub + ports: + - "2222:22" + sftp_eddsa_only: + container_name: sftp_eddsa_only + restart: always + image: atmoz/sftp + volumes: + - ./test_files/sftp/users.conf:/etc/sftp/users.conf + - ./test_files/sftp/sshd_custom_configs.sh:/etc/sftp.d/sshd_custom_configs.sh + - ./test_files/sftp/ssh_host_ed25519_key:/etc/ssh/ssh_host_ed25519_key + ports: + - "2223:22" + ftp: + container_name: ftp + restart: always + image: delfer/alpine-ftp-server + environment: + USERS: 'foo|pass|/home/foo/upload' + ADDRESS: 'localhost' + ports: + - "2121:21" + - "21000-21010:21000-21010" + ftpd: + container_name: ftpd + restart: always + environment: + PUBLICHOST: localhost + FTP_USER_NAME: foo + FTP_USER_PASS: pass + FTP_USER_HOME: /home/foo + image: stilliard/pure-ftpd + ports: + - "2122:21" + - "30000-30009:30000-30009" + command: "/run.sh -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -j -P localhost" + toxiproxy: + container_name: toxiproxy + restart: unless-stopped + image: ghcr.io/shopify/toxiproxy + command: "-host 0.0.0.0 -config /opt/toxiproxy/config.json" + volumes: + - ./test_files/toxiproxy/toxiproxy.json:/opt/toxiproxy/config.json:ro + ports: + - "8474:8474" # HTTP API + - "8222:8222" # SFTP + - "8121:8121" # FTP + - "8122:8122" # FTPD diff --git a/core/vendor/league/flysystem/readme.md b/core/vendor/league/flysystem/readme.md new file mode 100644 index 0000000000..62dd98ff07 --- /dev/null +++ b/core/vendor/league/flysystem/readme.md @@ -0,0 +1,55 @@ +# League\Flysystem + +[![Author](https://img.shields.io/badge/author-@frankdejonge-blue.svg)](https://twitter.com/frankdejonge) +[![Source Code](https://img.shields.io/badge/source-thephpleague/flysystem-blue.svg)](https://github.com/thephpleague/flysystem) +[![Latest Version](https://img.shields.io/github/tag/thephpleague/flysystem.svg)](https://github.com/thephpleague/flysystem/releases) +[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/thephpleague/flysystem/blob/master/LICENSE) +[![Quality Assurance](https://github.com/thephpleague/flysystem/workflows/Quality%20Assurance/badge.svg?branch=2.x)](https://github.com/thephpleague/flysystem/actions?query=workflow%3A%22Quality+Assurance%22) +[![Total Downloads](https://img.shields.io/packagist/dt/league/flysystem.svg)](https://packagist.org/packages/league/flysystem) +![php 7.2+](https://img.shields.io/badge/php-min%208.0.2-red.svg) + +## About Flysystem + +Flysystem is a file storage library for PHP. It provides one interface to +interact with many types of filesystems. When you use Flysystem, you're +not only protected from vendor lock-in, you'll also have a consistent experience +for which ever storage is right for you. + +## Getting Started + +* **[New in V3](https://flysystem.thephpleague.com/docs/what-is-new/)**: What is new in Flysystem V2/V3? +* **[Architecture](https://flysystem.thephpleague.com/docs/architecture/)**: Flysystem's internal architecture +* **[Flysystem API](https://flysystem.thephpleague.com/docs/usage/filesystem-api/)**: How to interact with your Flysystem instance +* **[Upgrade from 1x](https://flysystem.thephpleague.com/docs/upgrade-from-1.x/)**: How to upgrade from 1.x/2.x + +### Officially supported adapters + +* **[Local](https://flysystem.thephpleague.com/docs/adapter/local/)** +* **[FTP](https://flysystem.thephpleague.com/docs/adapter/ftp/)** +* **[SFTP](https://flysystem.thephpleague.com/docs/adapter/sftp-v3/)** +* **[Memory](https://flysystem.thephpleague.com/docs/adapter/in-memory/)** +* **[AWS S3](https://flysystem.thephpleague.com/docs/adapter/aws-s3-v3/)** +* **[AsyncAws S3](https://flysystem.thephpleague.com/docs/adapter/async-aws-s3/)** +* **[Google Cloud Storage](https://flysystem.thephpleague.com/docs/adapter/google-cloud-storage/)** +* **[Azure Blob Storage](https://flysystem.thephpleague.com/docs/adapter/azure-blob-storage/)** +* **[WebDAV](https://flysystem.thephpleague.com/docs/adapter/webdav/)** + +### Third party Adapters + +* **[Gitlab](https://github.com/RoyVoetman/flysystem-gitlab-storage)** +* **[Google Drive (using regular paths)](https://github.com/masbug/flysystem-google-drive-ext)** +* **[bunny.net / BunnyCDN](https://github.com/PlatformCommunity/flysystem-bunnycdn/tree/v3)** +* **[Sharepoint 365 / One Drive (Using MS Graph)](https://github.com/shitware-ltd/flysystem-msgraph)** +* **[OneDrive](https://github.com/doerffler/flysystem-onedrive)** +* **[Dropbox](https://github.com/spatie/flysystem-dropbox)** +* **[ReplicateAdapter](https://github.com/ajgarlag/flysystem-replicate)** + +You can always [create an adapter](https://flysystem.thephpleague.com/docs/advanced/creating-an-adapter/) yourself. + +## Security + +If you discover any security related issues, please email info@frankdejonge.nl instead of using the issue tracker. + +## Enjoy + +Oh, and if you've come down this far, you might as well follow me on [twitter](https://twitter.com/frankdejonge). diff --git a/core/vendor/league/flysystem/src/Adapter/AbstractAdapter.php b/core/vendor/league/flysystem/src/Adapter/AbstractAdapter.php deleted file mode 100644 index a6a8ed0267..0000000000 --- a/core/vendor/league/flysystem/src/Adapter/AbstractAdapter.php +++ /dev/null @@ -1,72 +0,0 @@ -pathPrefix = null; - - return; - } - - $this->pathPrefix = rtrim($prefix, '\\/') . $this->pathSeparator; - } - - /** - * Get the path prefix. - * - * @return string|null path prefix or null if pathPrefix is empty - */ - public function getPathPrefix() - { - return $this->pathPrefix; - } - - /** - * Prefix a path. - * - * @param string $path - * - * @return string prefixed path - */ - public function applyPathPrefix($path) - { - return $this->getPathPrefix() . ltrim($path, '\\/'); - } - - /** - * Remove a path prefix. - * - * @param string $path - * - * @return string path without the prefix - */ - public function removePathPrefix($path) - { - return substr($path, strlen((string) $this->getPathPrefix())); - } -} diff --git a/core/vendor/league/flysystem/src/Adapter/AbstractFtpAdapter.php b/core/vendor/league/flysystem/src/Adapter/AbstractFtpAdapter.php deleted file mode 100644 index 25d949ead0..0000000000 --- a/core/vendor/league/flysystem/src/Adapter/AbstractFtpAdapter.php +++ /dev/null @@ -1,705 +0,0 @@ -safeStorage = new SafeStorage(); - $this->setConfig($config); - } - - /** - * Set the config. - * - * @param array $config - * - * @return $this - */ - public function setConfig(array $config) - { - foreach ($this->configurable as $setting) { - if ( ! isset($config[$setting])) { - continue; - } - - $method = 'set' . ucfirst($setting); - - if (method_exists($this, $method)) { - $this->$method($config[$setting]); - } - } - - return $this; - } - - /** - * Returns the host. - * - * @return string - */ - public function getHost() - { - return $this->host; - } - - /** - * Set the host. - * - * @param string $host - * - * @return $this - */ - public function setHost($host) - { - $this->host = $host; - - return $this; - } - - /** - * Set the public permission value. - * - * @param int $permPublic - * - * @return $this - */ - public function setPermPublic($permPublic) - { - $this->permPublic = $permPublic; - - return $this; - } - - /** - * Set the private permission value. - * - * @param int $permPrivate - * - * @return $this - */ - public function setPermPrivate($permPrivate) - { - $this->permPrivate = $permPrivate; - - return $this; - } - - /** - * Returns the ftp port. - * - * @return int - */ - public function getPort() - { - return $this->port; - } - - /** - * Returns the root folder to work from. - * - * @return string - */ - public function getRoot() - { - return $this->root; - } - - /** - * Set the ftp port. - * - * @param int|string $port - * - * @return $this - */ - public function setPort($port) - { - $this->port = (int) $port; - - return $this; - } - - /** - * Set the root folder to work from. - * - * @param string $root - * - * @return $this - */ - public function setRoot($root) - { - $this->root = rtrim($root, '\\/') . $this->separator; - - return $this; - } - - /** - * Returns the ftp username. - * - * @return string username - */ - public function getUsername() - { - $username = $this->safeStorage->retrieveSafely('username'); - - return $username !== null ? $username : 'anonymous'; - } - - /** - * Set ftp username. - * - * @param string $username - * - * @return $this - */ - public function setUsername($username) - { - $this->safeStorage->storeSafely('username', $username); - - return $this; - } - - /** - * Returns the password. - * - * @return string password - */ - public function getPassword() - { - return $this->safeStorage->retrieveSafely('password'); - } - - /** - * Set the ftp password. - * - * @param string $password - * - * @return $this - */ - public function setPassword($password) - { - $this->safeStorage->storeSafely('password', $password); - - return $this; - } - - /** - * Returns the amount of seconds before the connection will timeout. - * - * @return int - */ - public function getTimeout() - { - return $this->timeout; - } - - /** - * Set the amount of seconds before the connection should timeout. - * - * @param int $timeout - * - * @return $this - */ - public function setTimeout($timeout) - { - $this->timeout = (int) $timeout; - - return $this; - } - - /** - * Return the FTP system type. - * - * @return string - */ - public function getSystemType() - { - return $this->systemType; - } - - /** - * Set the FTP system type (windows or unix). - * - * @param string $systemType - * - * @return $this - */ - public function setSystemType($systemType) - { - $this->systemType = strtolower($systemType); - - return $this; - } - - /** - * True to enable timestamps for FTP servers that return unix-style listings. - * - * @param bool $bool - * - * @return $this - */ - public function setEnableTimestampsOnUnixListings($bool = false) - { - $this->enableTimestampsOnUnixListings = $bool; - - return $this; - } - - /** - * @inheritdoc - */ - public function listContents($directory = '', $recursive = false) - { - return $this->listDirectoryContents($directory, $recursive); - } - - abstract protected function listDirectoryContents($directory, $recursive = false); - - /** - * Normalize a directory listing. - * - * @param array $listing - * @param string $prefix - * - * @return array directory listing - */ - protected function normalizeListing(array $listing, $prefix = '') - { - $base = $prefix; - $result = []; - $listing = $this->removeDotDirectories($listing); - - while ($item = array_shift($listing)) { - if (preg_match('#^.*:$#', $item)) { - $base = preg_replace('~^\./*|:$~', '', $item); - continue; - } - - $result[] = $this->normalizeObject($item, $base); - } - - return $this->sortListing($result); - } - - /** - * Sort a directory listing. - * - * @param array $result - * - * @return array sorted listing - */ - protected function sortListing(array $result) - { - $compare = function ($one, $two) { - return strnatcmp($one['path'], $two['path']); - }; - - usort($result, $compare); - - return $result; - } - - /** - * Normalize a file entry. - * - * @param string $item - * @param string $base - * - * @return array normalized file array - * - * @throws NotSupportedException - */ - protected function normalizeObject($item, $base) - { - $systemType = $this->systemType ?: $this->detectSystemType($item); - - if ($systemType === 'unix') { - return $this->normalizeUnixObject($item, $base); - } elseif ($systemType === 'windows') { - return $this->normalizeWindowsObject($item, $base); - } - - throw NotSupportedException::forFtpSystemType($systemType); - } - - /** - * Normalize a Unix file entry. - * - * Given $item contains: - * '-rw-r--r-- 1 ftp ftp 409 Aug 19 09:01 file1.txt' - * - * This function will return: - * [ - * 'type' => 'file', - * 'path' => 'file1.txt', - * 'visibility' => 'public', - * 'size' => 409, - * 'timestamp' => 1566205260 - * ] - * - * @param string $item - * @param string $base - * - * @return array normalized file array - */ - protected function normalizeUnixObject($item, $base) - { - $item = preg_replace('#\s+#', ' ', trim($item), 7); - - if (count(explode(' ', $item, 9)) !== 9) { - throw new RuntimeException("Metadata can't be parsed from item '$item' , not enough parts."); - } - - list($permissions, /* $number */, /* $owner */, /* $group */, $size, $month, $day, $timeOrYear, $name) = explode(' ', $item, 9); - $type = $this->detectType($permissions); - $path = $base === '' ? $name : $base . $this->separator . $name; - - if ($type === 'dir') { - $result = compact('type', 'path'); - if ($this->enableTimestampsOnUnixListings) { - $timestamp = $this->normalizeUnixTimestamp($month, $day, $timeOrYear); - $result += compact('timestamp'); - } - - return $result; - } - - $permissions = $this->normalizePermissions($permissions); - $visibility = $permissions & 0044 ? AdapterInterface::VISIBILITY_PUBLIC : AdapterInterface::VISIBILITY_PRIVATE; - $size = (int) $size; - - $result = compact('type', 'path', 'visibility', 'size'); - if ($this->enableTimestampsOnUnixListings) { - $timestamp = $this->normalizeUnixTimestamp($month, $day, $timeOrYear); - $result += compact('timestamp'); - } - - return $result; - } - - /** - * Only accurate to the minute (current year), or to the day. - * - * Inadequacies in timestamp accuracy are due to limitations of the FTP 'LIST' command - * - * Note: The 'MLSD' command is a machine-readable replacement for 'LIST' - * but many FTP servers do not support it :( - * - * @param string $month e.g. 'Aug' - * @param string $day e.g. '19' - * @param string $timeOrYear e.g. '09:01' OR '2015' - * - * @return int - */ - protected function normalizeUnixTimestamp($month, $day, $timeOrYear) - { - if (is_numeric($timeOrYear)) { - $year = $timeOrYear; - $hour = '00'; - $minute = '00'; - $seconds = '00'; - } else { - $year = date('Y'); - list($hour, $minute) = explode(':', $timeOrYear); - $seconds = '00'; - } - $dateTime = DateTime::createFromFormat('Y-M-j-G:i:s', "{$year}-{$month}-{$day}-{$hour}:{$minute}:{$seconds}"); - - return $dateTime->getTimestamp(); - } - - /** - * Normalize a Windows/DOS file entry. - * - * @param string $item - * @param string $base - * - * @return array normalized file array - */ - protected function normalizeWindowsObject($item, $base) - { - $item = preg_replace('#\s+#', ' ', trim($item), 3); - - if (count(explode(' ', $item, 4)) !== 4) { - throw new RuntimeException("Metadata can't be parsed from item '$item' , not enough parts."); - } - - list($date, $time, $size, $name) = explode(' ', $item, 4); - $path = $base === '' ? $name : $base . $this->separator . $name; - - // Check for the correct date/time format - $format = strlen($date) === 8 ? 'm-d-yH:iA' : 'Y-m-dH:i'; - $dt = DateTime::createFromFormat($format, $date . $time); - $timestamp = $dt ? $dt->getTimestamp() : (int) strtotime("$date $time"); - - if ($size === '') { - $type = 'dir'; - - return compact('type', 'path', 'timestamp'); - } - - $type = 'file'; - $visibility = AdapterInterface::VISIBILITY_PUBLIC; - $size = (int) $size; - - return compact('type', 'path', 'visibility', 'size', 'timestamp'); - } - - /** - * Get the system type from a listing item. - * - * @param string $item - * - * @return string the system type - */ - protected function detectSystemType($item) - { - return preg_match('/^[0-9]{2,4}-[0-9]{2}-[0-9]{2}/', trim($item)) ? 'windows' : 'unix'; - } - - /** - * Get the file type from the permissions. - * - * @param string $permissions - * - * @return string file type - */ - protected function detectType($permissions) - { - return substr($permissions, 0, 1) === 'd' ? 'dir' : 'file'; - } - - /** - * Normalize a permissions string. - * - * @param string $permissions - * - * @return int - */ - protected function normalizePermissions($permissions) - { - if (is_numeric($permissions)) { - return ((int) $permissions) & 0777; - } - - // remove the type identifier - $permissions = substr($permissions, 1); - - // map the string rights to the numeric counterparts - $map = ['-' => '0', 'r' => '4', 'w' => '2', 'x' => '1']; - $permissions = strtr($permissions, $map); - - // split up the permission groups - $parts = str_split($permissions, 3); - - // convert the groups - $mapper = function ($part) { - return array_sum(str_split($part)); - }; - - // converts to decimal number - return octdec(implode('', array_map($mapper, $parts))); - } - - /** - * Filter out dot-directories. - * - * @param array $list - * - * @return array - */ - public function removeDotDirectories(array $list) - { - $filter = function ($line) { - return $line !== '' && ! preg_match('#.* \.(\.)?$|^total#', $line); - }; - - return array_filter($list, $filter); - } - - /** - * @inheritdoc - */ - public function has($path) - { - return $this->getMetadata($path); - } - - /** - * @inheritdoc - */ - public function getSize($path) - { - return $this->getMetadata($path); - } - - /** - * @inheritdoc - */ - public function getVisibility($path) - { - return $this->getMetadata($path); - } - - /** - * Ensure a directory exists. - * - * @param string $dirname - */ - public function ensureDirectory($dirname) - { - $dirname = (string) $dirname; - - if ($dirname !== '' && ! $this->has($dirname)) { - $this->createDir($dirname, new Config()); - } - } - - /** - * @return mixed - */ - public function getConnection() - { - if ( ! $this->isConnected()) { - $this->disconnect(); - $this->connect(); - } - - return $this->connection; - } - - /** - * Get the public permission value. - * - * @return int - */ - public function getPermPublic() - { - return $this->permPublic; - } - - /** - * Get the private permission value. - * - * @return int - */ - public function getPermPrivate() - { - return $this->permPrivate; - } - - /** - * Disconnect on destruction. - */ - public function __destruct() - { - $this->disconnect(); - } - - /** - * Establish a connection. - */ - abstract public function connect(); - - /** - * Close the connection. - */ - abstract public function disconnect(); - - /** - * Check if a connection is active. - * - * @return bool - */ - abstract public function isConnected(); - - protected function escapePath($path) - { - return str_replace(['*', '[', ']'], ['\\*', '\\[', '\\]'], $path); - } -} diff --git a/core/vendor/league/flysystem/src/Adapter/CanOverwriteFiles.php b/core/vendor/league/flysystem/src/Adapter/CanOverwriteFiles.php deleted file mode 100644 index fd8d2161ee..0000000000 --- a/core/vendor/league/flysystem/src/Adapter/CanOverwriteFiles.php +++ /dev/null @@ -1,12 +0,0 @@ -transferMode = $mode; - - return $this; - } - - /** - * Set if Ssl is enabled. - * - * @param bool $ssl - * - * @return $this - */ - public function setSsl($ssl) - { - $this->ssl = (bool) $ssl; - - return $this; - } - - /** - * Set if passive mode should be used. - * - * @param bool $passive - */ - public function setPassive($passive = true) - { - $this->passive = $passive; - } - - /** - * @param bool $ignorePassiveAddress - */ - public function setIgnorePassiveAddress($ignorePassiveAddress) - { - $this->ignorePassiveAddress = $ignorePassiveAddress; - } - - /** - * @param bool $recurseManually - */ - public function setRecurseManually($recurseManually) - { - $this->recurseManually = $recurseManually; - } - - /** - * @param bool $utf8 - */ - public function setUtf8($utf8) - { - $this->utf8 = (bool) $utf8; - } - - /** - * Connect to the FTP server. - */ - public function connect() - { - $tries = 3; - start_connecting: - - if ($this->ssl) { - $this->connection = @ftp_ssl_connect($this->getHost(), $this->getPort(), $this->getTimeout()); - } else { - $this->connection = @ftp_connect($this->getHost(), $this->getPort(), $this->getTimeout()); - } - - if ( ! $this->connection) { - $tries--; - - if ($tries > 0) goto start_connecting; - - throw new ConnectionRuntimeException('Could not connect to host: ' . $this->getHost() . ', port:' . $this->getPort()); - } - - $this->login(); - $this->setUtf8Mode(); - $this->setConnectionPassiveMode(); - $this->setConnectionRoot(); - $this->isPureFtpd = $this->isPureFtpdServer(); - } - - /** - * Set the connection to UTF-8 mode. - */ - protected function setUtf8Mode() - { - if ($this->utf8) { - $response = ftp_raw($this->connection, "OPTS UTF8 ON"); - if (!in_array(substr($response[0], 0, 3), ['200', '202'])) { - throw new ConnectionRuntimeException( - 'Could not set UTF-8 mode for connection: ' . $this->getHost() . '::' . $this->getPort() - ); - } - } - } - - /** - * Set the connections to passive mode. - * - * @throws ConnectionRuntimeException - */ - protected function setConnectionPassiveMode() - { - if (is_bool($this->ignorePassiveAddress) && defined('FTP_USEPASVADDRESS')) { - ftp_set_option($this->connection, FTP_USEPASVADDRESS, ! $this->ignorePassiveAddress); - } - - if ( ! ftp_pasv($this->connection, $this->passive)) { - throw new ConnectionRuntimeException( - 'Could not set passive mode for connection: ' . $this->getHost() . '::' . $this->getPort() - ); - } - } - - /** - * Set the connection root. - */ - protected function setConnectionRoot() - { - $root = $this->getRoot(); - $connection = $this->connection; - - if ($root && ! ftp_chdir($connection, $root)) { - throw new InvalidRootException('Root is invalid or does not exist: ' . $this->getRoot()); - } - - // Store absolute path for further reference. - // This is needed when creating directories and - // initial root was a relative path, else the root - // would be relative to the chdir'd path. - $this->root = ftp_pwd($connection); - } - - /** - * Login. - * - * @throws ConnectionRuntimeException - */ - protected function login() - { - set_error_handler(function () { - }); - $isLoggedIn = ftp_login( - $this->connection, - $this->getUsername(), - $this->getPassword() - ); - restore_error_handler(); - - if ( ! $isLoggedIn) { - $this->disconnect(); - throw new ConnectionRuntimeException( - 'Could not login with connection: ' . $this->getHost() . '::' . $this->getPort( - ) . ', username: ' . $this->getUsername() - ); - } - } - - /** - * Disconnect from the FTP server. - */ - public function disconnect() - { - if ($this->hasFtpConnection()) { - @ftp_close($this->connection); - } - - $this->connection = null; - } - - /** - * @inheritdoc - */ - public function write($path, $contents, Config $config) - { - $stream = fopen('php://temp', 'w+b'); - fwrite($stream, $contents); - rewind($stream); - $result = $this->writeStream($path, $stream, $config); - fclose($stream); - - if ($result === false) { - return false; - } - - $result['contents'] = $contents; - $result['mimetype'] = $config->get('mimetype') ?: Util::guessMimeType($path, $contents); - - return $result; - } - - /** - * @inheritdoc - */ - public function writeStream($path, $resource, Config $config) - { - $this->ensureDirectory(Util::dirname($path)); - - if ( ! ftp_fput($this->getConnection(), $path, $resource, $this->transferMode)) { - return false; - } - - if ($visibility = $config->get('visibility')) { - $this->setVisibility($path, $visibility); - } - - $type = 'file'; - - return compact('type', 'path', 'visibility'); - } - - /** - * @inheritdoc - */ - public function update($path, $contents, Config $config) - { - return $this->write($path, $contents, $config); - } - - /** - * @inheritdoc - */ - public function updateStream($path, $resource, Config $config) - { - return $this->writeStream($path, $resource, $config); - } - - /** - * @inheritdoc - */ - public function rename($path, $newpath) - { - return ftp_rename($this->getConnection(), $path, $newpath); - } - - /** - * @inheritdoc - */ - public function delete($path) - { - return ftp_delete($this->getConnection(), $path); - } - - /** - * @inheritdoc - */ - public function deleteDir($dirname) - { - $connection = $this->getConnection(); - $contents = array_reverse($this->listDirectoryContents($dirname, false)); - - foreach ($contents as $object) { - if ($object['type'] === 'file') { - if ( ! ftp_delete($connection, $object['path'])) { - return false; - } - } elseif ( ! $this->deleteDir($object['path'])) { - return false; - } - } - - return ftp_rmdir($connection, $dirname); - } - - /** - * @inheritdoc - */ - public function createDir($dirname, Config $config) - { - $connection = $this->getConnection(); - $directories = explode('/', $dirname); - - foreach ($directories as $directory) { - if (false === $this->createActualDirectory($directory, $connection)) { - $this->setConnectionRoot(); - - return false; - } - - ftp_chdir($connection, $directory); - } - - $this->setConnectionRoot(); - - return ['type' => 'dir', 'path' => $dirname]; - } - - /** - * Create a directory. - * - * @param string $directory - * @param resource $connection - * - * @return bool - */ - protected function createActualDirectory($directory, $connection) - { - // List the current directory - $listing = ftp_nlist($connection, '.') ?: []; - - foreach ($listing as $key => $item) { - if (preg_match('~^\./.*~', $item)) { - $listing[$key] = substr($item, 2); - } - } - - if (in_array($directory, $listing, true)) { - return true; - } - - return (boolean) ftp_mkdir($connection, $directory); - } - - /** - * @inheritdoc - */ - public function getMetadata($path) - { - if ($path === '') { - return ['type' => 'dir', 'path' => '']; - } - - if (@ftp_chdir($this->getConnection(), $path) === true) { - $this->setConnectionRoot(); - - return ['type' => 'dir', 'path' => $path]; - } - - $listing = $this->ftpRawlist('-A', $path); - - if (empty($listing) || in_array('total 0', $listing, true)) { - return false; - } - - if (preg_match('/.* not found/', $listing[0])) { - return false; - } - - if (preg_match('/^total [0-9]*$/', $listing[0])) { - array_shift($listing); - } - - return $this->normalizeObject($listing[0], ''); - } - - /** - * @inheritdoc - */ - public function getMimetype($path) - { - if ( ! $metadata = $this->getMetadata($path)) { - return false; - } - - $metadata['mimetype'] = MimeType::detectByFilename($path); - - return $metadata; - } - - /** - * @inheritdoc - */ - public function getTimestamp($path) - { - $timestamp = ftp_mdtm($this->getConnection(), $path); - - return ($timestamp !== -1) ? ['path' => $path, 'timestamp' => $timestamp] : false; - } - - /** - * @inheritdoc - */ - public function read($path) - { - if ( ! $object = $this->readStream($path)) { - return false; - } - - $object['contents'] = stream_get_contents($object['stream']); - fclose($object['stream']); - unset($object['stream']); - - return $object; - } - - /** - * @inheritdoc - */ - public function readStream($path) - { - $stream = fopen('php://temp', 'w+b'); - $result = ftp_fget($this->getConnection(), $stream, $path, $this->transferMode); - rewind($stream); - - if ( ! $result) { - fclose($stream); - - return false; - } - - return ['type' => 'file', 'path' => $path, 'stream' => $stream]; - } - - /** - * @inheritdoc - */ - public function setVisibility($path, $visibility) - { - $mode = $visibility === AdapterInterface::VISIBILITY_PUBLIC ? $this->getPermPublic() : $this->getPermPrivate(); - - if ( ! ftp_chmod($this->getConnection(), $mode, $path)) { - return false; - } - - return compact('path', 'visibility'); - } - - /** - * @inheritdoc - * - * @param string $directory - */ - protected function listDirectoryContents($directory, $recursive = true) - { - if ($recursive && $this->recurseManually) { - return $this->listDirectoryContentsRecursive($directory); - } - - $options = $recursive ? '-alnR' : '-aln'; - $listing = $this->ftpRawlist($options, $directory); - - return $listing ? $this->normalizeListing($listing, $directory) : []; - } - - /** - * @inheritdoc - * - * @param string $directory - */ - protected function listDirectoryContentsRecursive($directory) - { - $listing = $this->normalizeListing($this->ftpRawlist('-aln', $directory) ?: [], $directory); - $output = []; - - foreach ($listing as $item) { - $output[] = $item; - if ($item['type'] !== 'dir') { - continue; - } - $output = array_merge($output, $this->listDirectoryContentsRecursive($item['path'])); - } - - return $output; - } - - /** - * Check if the connection is open. - * - * @return bool - * - * @throws ConnectionErrorException - */ - public function isConnected() - { - return $this->hasFtpConnection() && $this->getRawExecResponseCode('NOOP') === 200; - } - - /** - * @return bool - */ - protected function isPureFtpdServer() - { - $response = ftp_raw($this->connection, 'HELP'); - - return stripos(implode(' ', $response), 'Pure-FTPd') !== false; - } - - /** - * The ftp_rawlist function with optional escaping. - * - * @param string $options - * @param string $path - * - * @return array - */ - protected function ftpRawlist($options, $path) - { - $connection = $this->getConnection(); - - if ($this->isPureFtpd) { - $path = str_replace([' ', '[', ']'], ['\ ', '\\[', '\\]'], $path); - } - - return ftp_rawlist($connection, $options . ' ' . $this->escapePath($path)); - } - - private function getRawExecResponseCode($command) - { - $response = @ftp_raw($this->connection, trim($command)) ?: []; - - return (int) preg_replace('/\D/', '', implode(' ', (array) $response)); - } - - private function hasFtpConnection(): bool - { - return is_resource($this->connection) || $this->connection instanceof \FTP\Connection; - } -} diff --git a/core/vendor/league/flysystem/src/Adapter/Ftpd.php b/core/vendor/league/flysystem/src/Adapter/Ftpd.php deleted file mode 100644 index 7e71d19f6a..0000000000 --- a/core/vendor/league/flysystem/src/Adapter/Ftpd.php +++ /dev/null @@ -1,48 +0,0 @@ - 'dir', 'path' => '']; - } - - if (@ftp_chdir($this->getConnection(), $path) === true) { - $this->setConnectionRoot(); - - return ['type' => 'dir', 'path' => $path]; - } - - $object = ftp_raw($this->getConnection(), 'STAT ' . $this->escapePath($path)); - - if ( ! $object || count($object) < 3) { - return false; - } - - if (substr($object[1], 0, 5) === "ftpd:") { - return false; - } - - return $this->normalizeObject($object[1], ''); - } - - /** - * @inheritdoc - */ - protected function listDirectoryContents($directory, $recursive = true) - { - $listing = ftp_rawlist($this->getConnection(), $this->escapePath($directory), $recursive); - - if ($listing === false || ( ! empty($listing) && substr($listing[0], 0, 5) === "ftpd:")) { - return []; - } - - return $this->normalizeListing($listing, $directory); - } -} diff --git a/core/vendor/league/flysystem/src/Adapter/Local.php b/core/vendor/league/flysystem/src/Adapter/Local.php deleted file mode 100644 index 747c463ecb..0000000000 --- a/core/vendor/league/flysystem/src/Adapter/Local.php +++ /dev/null @@ -1,533 +0,0 @@ - [ - 'public' => 0644, - 'private' => 0600, - ], - 'dir' => [ - 'public' => 0755, - 'private' => 0700, - ], - ]; - - /** - * @var string - */ - protected $pathSeparator = DIRECTORY_SEPARATOR; - - /** - * @var array - */ - protected $permissionMap; - - /** - * @var int - */ - protected $writeFlags; - - /** - * @var int - */ - private $linkHandling; - - /** - * Constructor. - * - * @param string $root - * @param int $writeFlags - * @param int $linkHandling - * @param array $permissions - * - * @throws LogicException - */ - public function __construct($root, $writeFlags = LOCK_EX, $linkHandling = self::DISALLOW_LINKS, array $permissions = []) - { - $root = is_link($root) ? realpath($root) : $root; - $this->permissionMap = array_replace_recursive(static::$permissions, $permissions); - $this->ensureDirectory($root); - - if ( ! is_dir($root) || ! is_readable($root)) { - throw new LogicException('The root path ' . $root . ' is not readable.'); - } - - $this->setPathPrefix($root); - $this->writeFlags = $writeFlags; - $this->linkHandling = $linkHandling; - } - - /** - * Ensure the root directory exists. - * - * @param string $root root directory path - * - * @return void - * - * @throws Exception in case the root directory can not be created - */ - protected function ensureDirectory($root) - { - if ( ! is_dir($root)) { - $umask = umask(0); - - if ( ! @mkdir($root, $this->permissionMap['dir']['public'], true)) { - $mkdirError = error_get_last(); - } - - umask($umask); - clearstatcache(false, $root); - - if ( ! is_dir($root)) { - $errorMessage = isset($mkdirError['message']) ? $mkdirError['message'] : ''; - throw new Exception(sprintf('Impossible to create the root directory "%s". %s', $root, $errorMessage)); - } - } - } - - /** - * @inheritdoc - */ - public function has($path) - { - $location = $this->applyPathPrefix($path); - - return file_exists($location); - } - - /** - * @inheritdoc - */ - public function write($path, $contents, Config $config) - { - $location = $this->applyPathPrefix($path); - $this->ensureDirectory(dirname($location)); - - if (($size = file_put_contents($location, $contents, $this->writeFlags)) === false) { - return false; - } - - $type = 'file'; - $result = compact('contents', 'type', 'size', 'path'); - - if ($visibility = $config->get('visibility')) { - $result['visibility'] = $visibility; - $this->setVisibility($path, $visibility); - } - - return $result; - } - - /** - * @inheritdoc - */ - public function writeStream($path, $resource, Config $config) - { - $location = $this->applyPathPrefix($path); - $this->ensureDirectory(dirname($location)); - $stream = fopen($location, 'w+b'); - - if ( ! $stream || stream_copy_to_stream($resource, $stream) === false || ! fclose($stream)) { - return false; - } - - $type = 'file'; - $result = compact('type', 'path'); - - if ($visibility = $config->get('visibility')) { - $this->setVisibility($path, $visibility); - $result['visibility'] = $visibility; - } - - return $result; - } - - /** - * @inheritdoc - */ - public function readStream($path) - { - $location = $this->applyPathPrefix($path); - $stream = fopen($location, 'rb'); - - return ['type' => 'file', 'path' => $path, 'stream' => $stream]; - } - - /** - * @inheritdoc - */ - public function updateStream($path, $resource, Config $config) - { - return $this->writeStream($path, $resource, $config); - } - - /** - * @inheritdoc - */ - public function update($path, $contents, Config $config) - { - $location = $this->applyPathPrefix($path); - $size = file_put_contents($location, $contents, $this->writeFlags); - - if ($size === false) { - return false; - } - - $type = 'file'; - - $result = compact('type', 'path', 'size', 'contents'); - - if ($visibility = $config->get('visibility')) { - $this->setVisibility($path, $visibility); - $result['visibility'] = $visibility; - } - - return $result; - } - - /** - * @inheritdoc - */ - public function read($path) - { - $location = $this->applyPathPrefix($path); - $contents = @file_get_contents($location); - - if ($contents === false) { - return false; - } - - return ['type' => 'file', 'path' => $path, 'contents' => $contents]; - } - - /** - * @inheritdoc - */ - public function rename($path, $newpath) - { - $location = $this->applyPathPrefix($path); - $destination = $this->applyPathPrefix($newpath); - $parentDirectory = $this->applyPathPrefix(Util::dirname($newpath)); - $this->ensureDirectory($parentDirectory); - - return rename($location, $destination); - } - - /** - * @inheritdoc - */ - public function copy($path, $newpath) - { - $location = $this->applyPathPrefix($path); - $destination = $this->applyPathPrefix($newpath); - $this->ensureDirectory(dirname($destination)); - - return copy($location, $destination); - } - - /** - * @inheritdoc - */ - public function delete($path) - { - $location = $this->applyPathPrefix($path); - - return @unlink($location); - } - - /** - * @inheritdoc - */ - public function listContents($directory = '', $recursive = false) - { - $result = []; - $location = $this->applyPathPrefix($directory); - - if ( ! is_dir($location)) { - return []; - } - - $iterator = $recursive ? $this->getRecursiveDirectoryIterator($location) : $this->getDirectoryIterator($location); - - foreach ($iterator as $file) { - $path = $this->getFilePath($file); - - if (preg_match('#(^|/|\\\\)\.{1,2}$#', $path)) { - continue; - } - - $result[] = $this->normalizeFileInfo($file); - } - - unset($iterator); - - return array_filter($result); - } - - /** - * @inheritdoc - */ - public function getMetadata($path) - { - $location = $this->applyPathPrefix($path); - clearstatcache(false, $location); - $info = new SplFileInfo($location); - - return $this->normalizeFileInfo($info); - } - - /** - * @inheritdoc - */ - public function getSize($path) - { - return $this->getMetadata($path); - } - - /** - * @inheritdoc - */ - public function getMimetype($path) - { - $location = $this->applyPathPrefix($path); - $finfo = new Finfo(FILEINFO_MIME_TYPE); - $mimetype = $finfo->file($location); - - if (in_array($mimetype, ['application/octet-stream', 'inode/x-empty', 'application/x-empty'])) { - $mimetype = Util\MimeType::detectByFilename($location); - } - - return ['path' => $path, 'type' => 'file', 'mimetype' => $mimetype]; - } - - /** - * @inheritdoc - */ - public function getTimestamp($path) - { - return $this->getMetadata($path); - } - - /** - * @inheritdoc - */ - public function getVisibility($path) - { - $location = $this->applyPathPrefix($path); - clearstatcache(false, $location); - $permissions = octdec(substr(sprintf('%o', fileperms($location)), -4)); - $type = is_dir($location) ? 'dir' : 'file'; - - foreach ($this->permissionMap[$type] as $visibility => $visibilityPermissions) { - if ($visibilityPermissions == $permissions) { - return compact('path', 'visibility'); - } - } - - $visibility = substr(sprintf('%o', fileperms($location)), -4); - - return compact('path', 'visibility'); - } - - /** - * @inheritdoc - */ - public function setVisibility($path, $visibility) - { - $location = $this->applyPathPrefix($path); - $type = is_dir($location) ? 'dir' : 'file'; - $success = chmod($location, $this->permissionMap[$type][$visibility]); - - if ($success === false) { - return false; - } - - return compact('path', 'visibility'); - } - - /** - * @inheritdoc - */ - public function createDir($dirname, Config $config) - { - $location = $this->applyPathPrefix($dirname); - $umask = umask(0); - $visibility = $config->get('visibility', 'public'); - $return = ['path' => $dirname, 'type' => 'dir']; - - if ( ! is_dir($location)) { - if (false === @mkdir($location, $this->permissionMap['dir'][$visibility], true) - || false === is_dir($location)) { - $return = false; - } - } - - umask($umask); - - return $return; - } - - /** - * @inheritdoc - */ - public function deleteDir($dirname) - { - $location = $this->applyPathPrefix($dirname); - - if ( ! is_dir($location)) { - return false; - } - - $contents = $this->getRecursiveDirectoryIterator($location, RecursiveIteratorIterator::CHILD_FIRST); - - /** @var SplFileInfo $file */ - foreach ($contents as $file) { - $this->guardAgainstUnreadableFileInfo($file); - $this->deleteFileInfoObject($file); - } - - unset($contents); - - return rmdir($location); - } - - /** - * @param SplFileInfo $file - */ - protected function deleteFileInfoObject(SplFileInfo $file) - { - switch ($file->getType()) { - case 'dir': - rmdir($file->getRealPath()); - break; - case 'link': - unlink($file->getPathname()); - break; - default: - unlink($file->getRealPath()); - } - } - - /** - * Normalize the file info. - * - * @param SplFileInfo $file - * - * @return array|void - * - * @throws NotSupportedException - */ - protected function normalizeFileInfo(SplFileInfo $file) - { - if ( ! $file->isLink()) { - return $this->mapFileInfo($file); - } - - if ($this->linkHandling & self::DISALLOW_LINKS) { - throw NotSupportedException::forLink($file); - } - } - - /** - * Get the normalized path from a SplFileInfo object. - * - * @param SplFileInfo $file - * - * @return string - */ - protected function getFilePath(SplFileInfo $file) - { - $location = $file->getPathname(); - $path = $this->removePathPrefix($location); - - return trim(str_replace('\\', '/', $path), '/'); - } - - /** - * @param string $path - * @param int $mode - * - * @return RecursiveIteratorIterator - */ - protected function getRecursiveDirectoryIterator($path, $mode = RecursiveIteratorIterator::SELF_FIRST) - { - return new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), - $mode - ); - } - - /** - * @param string $path - * - * @return DirectoryIterator - */ - protected function getDirectoryIterator($path) - { - $iterator = new DirectoryIterator($path); - - return $iterator; - } - - /** - * @param SplFileInfo $file - * - * @return array - */ - protected function mapFileInfo(SplFileInfo $file) - { - $normalized = [ - 'type' => $file->getType(), - 'path' => $this->getFilePath($file), - ]; - - $normalized['timestamp'] = $file->getMTime(); - - if ($normalized['type'] === 'file') { - $normalized['size'] = $file->getSize(); - } - - return $normalized; - } - - /** - * @param SplFileInfo $file - * - * @throws UnreadableFileException - */ - protected function guardAgainstUnreadableFileInfo(SplFileInfo $file) - { - if ( ! $file->isReadable()) { - throw UnreadableFileException::forFileInfo($file); - } - } -} diff --git a/core/vendor/league/flysystem/src/Adapter/NullAdapter.php b/core/vendor/league/flysystem/src/Adapter/NullAdapter.php deleted file mode 100644 index 2527087f7c..0000000000 --- a/core/vendor/league/flysystem/src/Adapter/NullAdapter.php +++ /dev/null @@ -1,144 +0,0 @@ -get('visibility')) { - $result['visibility'] = $visibility; - } - - return $result; - } - - /** - * @inheritdoc - */ - public function update($path, $contents, Config $config) - { - return false; - } - - /** - * @inheritdoc - */ - public function read($path) - { - return false; - } - - /** - * @inheritdoc - */ - public function rename($path, $newpath) - { - return false; - } - - /** - * @inheritdoc - */ - public function delete($path) - { - return false; - } - - /** - * @inheritdoc - */ - public function listContents($directory = '', $recursive = false) - { - return []; - } - - /** - * @inheritdoc - */ - public function getMetadata($path) - { - return false; - } - - /** - * @inheritdoc - */ - public function getSize($path) - { - return false; - } - - /** - * @inheritdoc - */ - public function getMimetype($path) - { - return false; - } - - /** - * @inheritdoc - */ - public function getTimestamp($path) - { - return false; - } - - /** - * @inheritdoc - */ - public function getVisibility($path) - { - return false; - } - - /** - * @inheritdoc - */ - public function setVisibility($path, $visibility) - { - return compact('visibility'); - } - - /** - * @inheritdoc - */ - public function createDir($dirname, Config $config) - { - return ['path' => $dirname, 'type' => 'dir']; - } - - /** - * @inheritdoc - */ - public function deleteDir($dirname) - { - return false; - } -} diff --git a/core/vendor/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php b/core/vendor/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php deleted file mode 100644 index fc0a747acb..0000000000 --- a/core/vendor/league/flysystem/src/Adapter/Polyfill/NotSupportingVisibilityTrait.php +++ /dev/null @@ -1,33 +0,0 @@ -readStream($path); - - if ($response === false || ! is_resource($response['stream'])) { - return false; - } - - $result = $this->writeStream($newpath, $response['stream'], new Config()); - - if ($result !== false && is_resource($response['stream'])) { - fclose($response['stream']); - } - - return $result !== false; - } - - // Required abstract method - - /** - * @param string $path - * - * @return resource - */ - abstract public function readStream($path); - - /** - * @param string $path - * @param resource $resource - * @param Config $config - * - * @return resource - */ - abstract public function writeStream($path, $resource, Config $config); -} diff --git a/core/vendor/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php b/core/vendor/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php deleted file mode 100644 index 2b31c01d69..0000000000 --- a/core/vendor/league/flysystem/src/Adapter/Polyfill/StreamedReadingTrait.php +++ /dev/null @@ -1,44 +0,0 @@ -read($path)) { - return false; - } - - $stream = fopen('php://temp', 'w+b'); - fwrite($stream, $data['contents']); - rewind($stream); - $data['stream'] = $stream; - unset($data['contents']); - - return $data; - } - - /** - * Reads a file. - * - * @param string $path - * - * @return array|false - * - * @see League\Flysystem\ReadInterface::read() - */ - abstract public function read($path); -} diff --git a/core/vendor/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php b/core/vendor/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php deleted file mode 100644 index 80424960c1..0000000000 --- a/core/vendor/league/flysystem/src/Adapter/Polyfill/StreamedTrait.php +++ /dev/null @@ -1,9 +0,0 @@ -stream($path, $resource, $config, 'write'); - } - - /** - * Update a file using a stream. - * - * @param string $path - * @param resource $resource - * @param Config $config Config object or visibility setting - * - * @return mixed false of file metadata - */ - public function updateStream($path, $resource, Config $config) - { - return $this->stream($path, $resource, $config, 'update'); - } - - // Required abstract methods - abstract public function write($pash, $contents, Config $config); - abstract public function update($pash, $contents, Config $config); -} diff --git a/core/vendor/league/flysystem/src/Adapter/SynologyFtp.php b/core/vendor/league/flysystem/src/Adapter/SynologyFtp.php deleted file mode 100644 index fe0d344cfe..0000000000 --- a/core/vendor/league/flysystem/src/Adapter/SynologyFtp.php +++ /dev/null @@ -1,8 +0,0 @@ -readStream($path); + $algo = (string) $config->get('checksum_algo', 'md5'); + $context = hash_init($algo); + hash_update_stream($context, $stream); + + return hash_final($context); + } catch (FilesystemException $exception) { + throw new UnableToProvideChecksum($exception->getMessage(), $path, $exception); + } + } + + /** + * @return resource + */ + abstract public function readStream(string $path); +} diff --git a/core/vendor/league/flysystem/src/ChecksumAlgoIsNotSupported.php b/core/vendor/league/flysystem/src/ChecksumAlgoIsNotSupported.php new file mode 100644 index 0000000000..5d33c0cfe6 --- /dev/null +++ b/core/vendor/league/flysystem/src/ChecksumAlgoIsNotSupported.php @@ -0,0 +1,11 @@ +settings = $settings; - } - - /** - * Get a setting. - * - * @param string $key - * @param mixed $default - * - * @return mixed config setting or default when not found - */ - public function get($key, $default = null) - { - if ( ! array_key_exists($key, $this->settings)) { - return $this->getDefault($key, $default); - } + public const OPTION_VISIBILITY = 'visibility'; + public const OPTION_DIRECTORY_VISIBILITY = 'directory_visibility'; - return $this->settings[$key]; - } - - /** - * Check if an item exists by key. - * - * @param string $key - * - * @return bool - */ - public function has($key) + public function __construct(private array $options = []) { - if (array_key_exists($key, $this->settings)) { - return true; - } - - return $this->fallback instanceof Config - ? $this->fallback->has($key) - : false; } /** - * Try to retrieve a default setting from a config fallback. - * - * @param string $key - * @param mixed $default + * @param mixed $default * - * @return mixed config setting or default when not found + * @return mixed */ - protected function getDefault($key, $default) + public function get(string $property, $default = null) { - if ( ! $this->fallback) { - return $default; - } - - return $this->fallback->get($key, $default); + return $this->options[$property] ?? $default; } - /** - * Set a setting. - * - * @param string $key - * @param mixed $value - * - * @return $this - */ - public function set($key, $value) + public function extend(array $options): Config { - $this->settings[$key] = $value; - - return $this; + return new Config(array_merge($this->options, $options)); } - /** - * Set the fallback. - * - * @param Config $fallback - * - * @return $this - */ - public function setFallback(Config $fallback) + public function withDefaults(array $defaults): Config { - $this->fallback = $fallback; - - return $this; + return new Config($this->options + $defaults); } } diff --git a/core/vendor/league/flysystem/src/ConfigAwareTrait.php b/core/vendor/league/flysystem/src/ConfigAwareTrait.php deleted file mode 100644 index 202d605dad..0000000000 --- a/core/vendor/league/flysystem/src/ConfigAwareTrait.php +++ /dev/null @@ -1,49 +0,0 @@ -config = $config ? Util::ensureConfig($config) : new Config; - } - - /** - * Get the Config. - * - * @return Config config object - */ - public function getConfig() - { - return $this->config; - } - - /** - * Convert a config array to a Config object with the correct fallback. - * - * @param array $config - * - * @return Config - */ - protected function prepareConfig(array $config) - { - $config = new Config($config); - $config->setFallback($this->getConfig()); - - return $config; - } -} diff --git a/core/vendor/league/flysystem/src/ConnectionErrorException.php b/core/vendor/league/flysystem/src/ConnectionErrorException.php deleted file mode 100644 index adb651d3db..0000000000 --- a/core/vendor/league/flysystem/src/ConnectionErrorException.php +++ /dev/null @@ -1,9 +0,0 @@ -filesystem->deleteDir($this->path); - } - - /** - * List the directory contents. - * - * @param bool $recursive - * - * @return array|bool directory contents or false - */ - public function getContents($recursive = false) - { - return $this->filesystem->listContents($this->path, $recursive); - } -} diff --git a/core/vendor/league/flysystem/src/DirectoryAttributes.php b/core/vendor/league/flysystem/src/DirectoryAttributes.php new file mode 100644 index 0000000000..7841b3cc1c --- /dev/null +++ b/core/vendor/league/flysystem/src/DirectoryAttributes.php @@ -0,0 +1,87 @@ +path = trim($this->path, '/'); + } + + public function path(): string + { + return $this->path; + } + + public function type(): string + { + return $this->type; + } + + public function visibility(): ?string + { + return $this->visibility; + } + + public function lastModified(): ?int + { + return $this->lastModified; + } + + public function extraMetadata(): array + { + return $this->extraMetadata; + } + + public function isFile(): bool + { + return false; + } + + public function isDir(): bool + { + return true; + } + + public function withPath(string $path): self + { + $clone = clone $this; + $clone->path = $path; + + return $clone; + } + + public static function fromArray(array $attributes): self + { + return new DirectoryAttributes( + $attributes[StorageAttributes::ATTRIBUTE_PATH], + $attributes[StorageAttributes::ATTRIBUTE_VISIBILITY] ?? null, + $attributes[StorageAttributes::ATTRIBUTE_LAST_MODIFIED] ?? null, + $attributes[StorageAttributes::ATTRIBUTE_EXTRA_METADATA] ?? [] + ); + } + + /** + * @inheritDoc + */ + public function jsonSerialize(): array + { + return [ + StorageAttributes::ATTRIBUTE_TYPE => $this->type, + StorageAttributes::ATTRIBUTE_PATH => $this->path, + StorageAttributes::ATTRIBUTE_VISIBILITY => $this->visibility, + StorageAttributes::ATTRIBUTE_LAST_MODIFIED => $this->lastModified, + StorageAttributes::ATTRIBUTE_EXTRA_METADATA => $this->extraMetadata, + ]; + } +} diff --git a/core/vendor/league/flysystem/src/DirectoryListing.php b/core/vendor/league/flysystem/src/DirectoryListing.php new file mode 100644 index 0000000000..1c1d4d736e --- /dev/null +++ b/core/vendor/league/flysystem/src/DirectoryListing.php @@ -0,0 +1,90 @@ + $listing + */ + public function __construct(private iterable $listing) + { + } + + /** + * @param callable(T): bool $filter + * @return DirectoryListing + */ + public function filter(callable $filter): DirectoryListing + { + $generator = (static function (iterable $listing) use ($filter): Generator { + foreach ($listing as $item) { + if ($filter($item)) { + yield $item; + } + } + })($this->listing); + + return new DirectoryListing($generator); + } + + /** + * @template R + * @param callable(T): R $mapper + * @return DirectoryListing + */ + public function map(callable $mapper): DirectoryListing + { + $generator = (static function (iterable $listing) use ($mapper): Generator { + foreach ($listing as $item) { + yield $mapper($item); + } + })($this->listing); + + return new DirectoryListing($generator); + } + + /** + * @return DirectoryListing + */ + public function sortByPath(): DirectoryListing + { + $listing = $this->toArray(); + + usort($listing, function (StorageAttributes $a, StorageAttributes $b) { + return $a->path() <=> $b->path(); + }); + + return new DirectoryListing($listing); + } + + /** + * @return Traversable + */ + public function getIterator(): Traversable + { + return $this->listing instanceof Traversable + ? $this->listing + : new ArrayIterator($this->listing); + } + + /** + * @return T[] + */ + public function toArray(): array + { + return $this->listing instanceof Traversable + ? iterator_to_array($this->listing, false) + : (array) $this->listing; + } +} diff --git a/core/vendor/league/flysystem/src/Exception.php b/core/vendor/league/flysystem/src/Exception.php deleted file mode 100644 index 4596c0a9a9..0000000000 --- a/core/vendor/league/flysystem/src/Exception.php +++ /dev/null @@ -1,8 +0,0 @@ -filesystem->has($this->path); - } - - /** - * Read the file. - * - * @return string|false file contents - */ - public function read() - { - return $this->filesystem->read($this->path); - } - - /** - * Read the file as a stream. - * - * @return resource|false file stream - */ - public function readStream() - { - return $this->filesystem->readStream($this->path); - } - - /** - * Write the new file. - * - * @param string $content - * - * @return bool success boolean - */ - public function write($content) - { - return $this->filesystem->write($this->path, $content); - } - - /** - * Write the new file using a stream. - * - * @param resource $resource - * - * @return bool success boolean - */ - public function writeStream($resource) - { - return $this->filesystem->writeStream($this->path, $resource); - } - - /** - * Update the file contents. - * - * @param string $content - * - * @return bool success boolean - */ - public function update($content) - { - return $this->filesystem->update($this->path, $content); - } - - /** - * Update the file contents with a stream. - * - * @param resource $resource - * - * @return bool success boolean - */ - public function updateStream($resource) - { - return $this->filesystem->updateStream($this->path, $resource); - } - - /** - * Create the file or update if exists. - * - * @param string $content - * - * @return bool success boolean - */ - public function put($content) - { - return $this->filesystem->put($this->path, $content); - } - - /** - * Create the file or update if exists using a stream. - * - * @param resource $resource - * - * @return bool success boolean - */ - public function putStream($resource) - { - return $this->filesystem->putStream($this->path, $resource); - } - - /** - * Rename the file. - * - * @param string $newpath - * - * @return bool success boolean - */ - public function rename($newpath) - { - if ($this->filesystem->rename($this->path, $newpath)) { - $this->path = $newpath; - - return true; - } - - return false; - } - - /** - * Copy the file. - * - * @param string $newpath - * - * @return File|false new file or false - */ - public function copy($newpath) - { - if ($this->filesystem->copy($this->path, $newpath)) { - return new File($this->filesystem, $newpath); - } - - return false; - } - - /** - * Get the file's timestamp. - * - * @return string|false The timestamp or false on failure. - */ - public function getTimestamp() - { - return $this->filesystem->getTimestamp($this->path); - } - - /** - * Get the file's mimetype. - * - * @return string|false The file mime-type or false on failure. - */ - public function getMimetype() - { - return $this->filesystem->getMimetype($this->path); - } - - /** - * Get the file's visibility. - * - * @return string|false The visibility (public|private) or false on failure. - */ - public function getVisibility() - { - return $this->filesystem->getVisibility($this->path); - } - - /** - * Get the file's metadata. - * - * @return array|false The file metadata or false on failure. - */ - public function getMetadata() - { - return $this->filesystem->getMetadata($this->path); - } - - /** - * Get the file size. - * - * @return int|false The file size or false on failure. - */ - public function getSize() - { - return $this->filesystem->getSize($this->path); - } - - /** - * Delete the file. - * - * @return bool success boolean - */ - public function delete() - { - return $this->filesystem->delete($this->path); - } -} diff --git a/core/vendor/league/flysystem/src/FileAttributes.php b/core/vendor/league/flysystem/src/FileAttributes.php new file mode 100644 index 0000000000..42172f8c43 --- /dev/null +++ b/core/vendor/league/flysystem/src/FileAttributes.php @@ -0,0 +1,100 @@ +path = ltrim($this->path, '/'); + } + + public function type(): string + { + return $this->type; + } + + public function path(): string + { + return $this->path; + } + + public function fileSize(): ?int + { + return $this->fileSize; + } + + public function visibility(): ?string + { + return $this->visibility; + } + + public function lastModified(): ?int + { + return $this->lastModified; + } + + public function mimeType(): ?string + { + return $this->mimeType; + } + + public function extraMetadata(): array + { + return $this->extraMetadata; + } + + public function isFile(): bool + { + return true; + } + + public function isDir(): bool + { + return false; + } + + public function withPath(string $path): self + { + $clone = clone $this; + $clone->path = $path; + + return $clone; + } + + public static function fromArray(array $attributes): self + { + return new FileAttributes( + $attributes[StorageAttributes::ATTRIBUTE_PATH], + $attributes[StorageAttributes::ATTRIBUTE_FILE_SIZE] ?? null, + $attributes[StorageAttributes::ATTRIBUTE_VISIBILITY] ?? null, + $attributes[StorageAttributes::ATTRIBUTE_LAST_MODIFIED] ?? null, + $attributes[StorageAttributes::ATTRIBUTE_MIME_TYPE] ?? null, + $attributes[StorageAttributes::ATTRIBUTE_EXTRA_METADATA] ?? [] + ); + } + + public function jsonSerialize(): array + { + return [ + StorageAttributes::ATTRIBUTE_TYPE => self::TYPE_FILE, + StorageAttributes::ATTRIBUTE_PATH => $this->path, + StorageAttributes::ATTRIBUTE_FILE_SIZE => $this->fileSize, + StorageAttributes::ATTRIBUTE_VISIBILITY => $this->visibility, + StorageAttributes::ATTRIBUTE_LAST_MODIFIED => $this->lastModified, + StorageAttributes::ATTRIBUTE_MIME_TYPE => $this->mimeType, + StorageAttributes::ATTRIBUTE_EXTRA_METADATA => $this->extraMetadata, + ]; + } +} diff --git a/core/vendor/league/flysystem/src/FileExistsException.php b/core/vendor/league/flysystem/src/FileExistsException.php deleted file mode 100644 index c82e20c169..0000000000 --- a/core/vendor/league/flysystem/src/FileExistsException.php +++ /dev/null @@ -1,37 +0,0 @@ -path = $path; - - parent::__construct('File already exists at path: ' . $this->getPath(), $code, $previous); - } - - /** - * Get the path which was found. - * - * @return string - */ - public function getPath() - { - return $this->path; - } -} diff --git a/core/vendor/league/flysystem/src/FileNotFoundException.php b/core/vendor/league/flysystem/src/FileNotFoundException.php deleted file mode 100644 index 989df69bbe..0000000000 --- a/core/vendor/league/flysystem/src/FileNotFoundException.php +++ /dev/null @@ -1,37 +0,0 @@ -path = $path; - - parent::__construct('File not found at path: ' . $this->getPath(), $code, $previous); - } - - /** - * Get the path which was not found. - * - * @return string - */ - public function getPath() - { - return $this->path; - } -} diff --git a/core/vendor/league/flysystem/src/Filesystem.php b/core/vendor/league/flysystem/src/Filesystem.php index c4eaf27810..94fae15ef0 100644 --- a/core/vendor/league/flysystem/src/Filesystem.php +++ b/core/vendor/league/flysystem/src/Filesystem.php @@ -1,409 +1,239 @@ adapter = $adapter; - $this->setConfig($config); + public function __construct( + private FilesystemAdapter $adapter, + array $config = [], + PathNormalizer $pathNormalizer = null, + private ?PublicUrlGenerator $publicUrlGenerator = null, + private ?TemporaryUrlGenerator $temporaryUrlGenerator = null, + ) { + $this->config = new Config($config); + $this->pathNormalizer = $pathNormalizer ?: new WhitespacePathNormalizer(); } - /** - * Get the Adapter. - * - * @return AdapterInterface adapter - */ - public function getAdapter() + public function fileExists(string $location): bool { - return $this->adapter; + return $this->adapter->fileExists($this->pathNormalizer->normalizePath($location)); } - /** - * @inheritdoc - */ - public function has($path) + public function directoryExists(string $location): bool { - $path = Util::normalizePath($path); - - return strlen($path) === 0 ? false : (bool) $this->getAdapter()->has($path); + return $this->adapter->directoryExists($this->pathNormalizer->normalizePath($location)); } - /** - * @inheritdoc - */ - public function write($path, $contents, array $config = []) + public function has(string $location): bool { - $path = Util::normalizePath($path); - $this->assertAbsent($path); - $config = $this->prepareConfig($config); + $path = $this->pathNormalizer->normalizePath($location); - return (bool) $this->getAdapter()->write($path, $contents, $config); + return $this->adapter->fileExists($path) || $this->adapter->directoryExists($path); } - /** - * @inheritdoc - */ - public function writeStream($path, $resource, array $config = []) + public function write(string $location, string $contents, array $config = []): void { - if ( ! is_resource($resource) || get_resource_type($resource) !== 'stream') { - throw new InvalidArgumentException(__METHOD__ . ' expects argument #2 to be a valid resource.'); - } - - $path = Util::normalizePath($path); - $this->assertAbsent($path); - $config = $this->prepareConfig($config); - - Util::rewindStream($resource); - - return (bool) $this->getAdapter()->writeStream($path, $resource, $config); + $this->adapter->write( + $this->pathNormalizer->normalizePath($location), + $contents, + $this->config->extend($config) + ); } - /** - * @inheritdoc - */ - public function put($path, $contents, array $config = []) + public function writeStream(string $location, $contents, array $config = []): void { - $path = Util::normalizePath($path); - $config = $this->prepareConfig($config); - - if ( ! $this->getAdapter() instanceof CanOverwriteFiles && $this->has($path)) { - return (bool) $this->getAdapter()->update($path, $contents, $config); - } - - return (bool) $this->getAdapter()->write($path, $contents, $config); + /* @var resource $contents */ + $this->assertIsResource($contents); + $this->rewindStream($contents); + $this->adapter->writeStream( + $this->pathNormalizer->normalizePath($location), + $contents, + $this->config->extend($config) + ); } - /** - * @inheritdoc - */ - public function putStream($path, $resource, array $config = []) + public function read(string $location): string { - if ( ! is_resource($resource) || get_resource_type($resource) !== 'stream') { - throw new InvalidArgumentException(__METHOD__ . ' expects argument #2 to be a valid resource.'); - } - - $path = Util::normalizePath($path); - $config = $this->prepareConfig($config); - Util::rewindStream($resource); - - if ( ! $this->getAdapter() instanceof CanOverwriteFiles && $this->has($path)) { - return (bool) $this->getAdapter()->updateStream($path, $resource, $config); - } - - return (bool) $this->getAdapter()->writeStream($path, $resource, $config); + return $this->adapter->read($this->pathNormalizer->normalizePath($location)); } - /** - * @inheritdoc - */ - public function readAndDelete($path) + public function readStream(string $location) { - $path = Util::normalizePath($path); - $this->assertPresent($path); - $contents = $this->read($path); - - if ($contents === false) { - return false; - } - - $this->delete($path); - - return $contents; + return $this->adapter->readStream($this->pathNormalizer->normalizePath($location)); } - /** - * @inheritdoc - */ - public function update($path, $contents, array $config = []) + public function delete(string $location): void { - $path = Util::normalizePath($path); - $config = $this->prepareConfig($config); - - $this->assertPresent($path); - - return (bool) $this->getAdapter()->update($path, $contents, $config); + $this->adapter->delete($this->pathNormalizer->normalizePath($location)); } - /** - * @inheritdoc - */ - public function updateStream($path, $resource, array $config = []) + public function deleteDirectory(string $location): void { - if ( ! is_resource($resource) || get_resource_type($resource) !== 'stream') { - throw new InvalidArgumentException(__METHOD__ . ' expects argument #2 to be a valid resource.'); - } - - $path = Util::normalizePath($path); - $config = $this->prepareConfig($config); - $this->assertPresent($path); - Util::rewindStream($resource); - - return (bool) $this->getAdapter()->updateStream($path, $resource, $config); + $this->adapter->deleteDirectory($this->pathNormalizer->normalizePath($location)); } - /** - * @inheritdoc - */ - public function read($path) + public function createDirectory(string $location, array $config = []): void { - $path = Util::normalizePath($path); - $this->assertPresent($path); - - if ( ! ($object = $this->getAdapter()->read($path))) { - return false; - } - - return $object['contents']; + $this->adapter->createDirectory( + $this->pathNormalizer->normalizePath($location), + $this->config->extend($config) + ); } - /** - * @inheritdoc - */ - public function readStream($path) + public function listContents(string $location, bool $deep = self::LIST_SHALLOW): DirectoryListing { - $path = Util::normalizePath($path); - $this->assertPresent($path); - - if ( ! $object = $this->getAdapter()->readStream($path)) { - return false; - } + $path = $this->pathNormalizer->normalizePath($location); + $listing = $this->adapter->listContents($path, $deep); - return $object['stream']; + return new DirectoryListing($this->pipeListing($location, $deep, $listing)); } - /** - * @inheritdoc - */ - public function rename($path, $newpath) + private function pipeListing(string $location, bool $deep, iterable $listing): Generator { - $path = Util::normalizePath($path); - $newpath = Util::normalizePath($newpath); - $this->assertPresent($path); - $this->assertAbsent($newpath); - - return (bool) $this->getAdapter()->rename($path, $newpath); + try { + foreach ($listing as $item) { + yield $item; + } + } catch (Throwable $exception) { + throw UnableToListContents::atLocation($location, $deep, $exception); + } } - /** - * @inheritdoc - */ - public function copy($path, $newpath) + public function move(string $source, string $destination, array $config = []): void { - $path = Util::normalizePath($path); - $newpath = Util::normalizePath($newpath); - $this->assertPresent($path); - $this->assertAbsent($newpath); - - return $this->getAdapter()->copy($path, $newpath); + $this->adapter->move( + $this->pathNormalizer->normalizePath($source), + $this->pathNormalizer->normalizePath($destination), + $this->config->extend($config) + ); } - /** - * @inheritdoc - */ - public function delete($path) + public function copy(string $source, string $destination, array $config = []): void { - $path = Util::normalizePath($path); - $this->assertPresent($path); - - return $this->getAdapter()->delete($path); + $this->adapter->copy( + $this->pathNormalizer->normalizePath($source), + $this->pathNormalizer->normalizePath($destination), + $this->config->extend($config) + ); } - /** - * @inheritdoc - */ - public function deleteDir($dirname) + public function lastModified(string $path): int { - $dirname = Util::normalizePath($dirname); - - if ($dirname === '') { - throw new RootViolationException('Root directories can not be deleted.'); - } - - return (bool) $this->getAdapter()->deleteDir($dirname); + return $this->adapter->lastModified($this->pathNormalizer->normalizePath($path))->lastModified(); } - /** - * @inheritdoc - */ - public function createDir($dirname, array $config = []) + public function fileSize(string $path): int { - $dirname = Util::normalizePath($dirname); - $config = $this->prepareConfig($config); - - return (bool) $this->getAdapter()->createDir($dirname, $config); + return $this->adapter->fileSize($this->pathNormalizer->normalizePath($path))->fileSize(); } - /** - * @inheritdoc - */ - public function listContents($directory = '', $recursive = false) + public function mimeType(string $path): string { - $directory = Util::normalizePath($directory); - $contents = $this->getAdapter()->listContents($directory, $recursive); - - return (new ContentListingFormatter($directory, $recursive, $this->config->get('case_sensitive', true))) - ->formatListing($contents); + return $this->adapter->mimeType($this->pathNormalizer->normalizePath($path))->mimeType(); } - /** - * @inheritdoc - */ - public function getMimetype($path) + public function setVisibility(string $path, string $visibility): void { - $path = Util::normalizePath($path); - $this->assertPresent($path); - - if (( ! $object = $this->getAdapter()->getMimetype($path)) || ! array_key_exists('mimetype', $object)) { - return false; - } - - return $object['mimetype']; + $this->adapter->setVisibility($this->pathNormalizer->normalizePath($path), $visibility); } - /** - * @inheritdoc - */ - public function getTimestamp($path) + public function visibility(string $path): string { - $path = Util::normalizePath($path); - $this->assertPresent($path); - - if (( ! $object = $this->getAdapter()->getTimestamp($path)) || ! array_key_exists('timestamp', $object)) { - return false; - } - - return (int) $object['timestamp']; + return $this->adapter->visibility($this->pathNormalizer->normalizePath($path))->visibility(); } - /** - * @inheritdoc - */ - public function getVisibility($path) + public function publicUrl(string $path, array $config = []): string { - $path = Util::normalizePath($path); - $this->assertPresent($path); - - if (( ! $object = $this->getAdapter()->getVisibility($path)) || ! array_key_exists('visibility', $object)) { - return false; - } + $this->publicUrlGenerator ??= $this->resolvePublicUrlGenerator() + ?: throw UnableToGeneratePublicUrl::noGeneratorConfigured($path); + $config = $this->config->extend($config); - return $object['visibility']; + return $this->publicUrlGenerator->publicUrl($path, $config); } - /** - * @inheritdoc - */ - public function getSize($path) + public function temporaryUrl(string $path, DateTimeInterface $expiresAt, array $config = []): string { - $path = Util::normalizePath($path); - $this->assertPresent($path); + $generator = $this->temporaryUrlGenerator ?: $this->adapter; - if (( ! $object = $this->getAdapter()->getSize($path)) || ! array_key_exists('size', $object)) { - return false; + if ($generator instanceof TemporaryUrlGenerator) { + return $generator->temporaryUrl($path, $expiresAt, $this->config->extend($config)); } - return (int) $object['size']; + throw UnableToGenerateTemporaryUrl::noGeneratorConfigured($path); } - /** - * @inheritdoc - */ - public function setVisibility($path, $visibility) + public function checksum(string $path, array $config = []): string { - $path = Util::normalizePath($path); - $this->assertPresent($path); - - return (bool) $this->getAdapter()->setVisibility($path, $visibility); - } + $config = $this->config->extend($config); - /** - * @inheritdoc - */ - public function getMetadata($path) - { - $path = Util::normalizePath($path); - $this->assertPresent($path); + if ( ! $this->adapter instanceof ChecksumProvider) { + return $this->calculateChecksumFromStream($path, $config); + } - return $this->getAdapter()->getMetadata($path); + try { + return $this->adapter->checksum($path, $config); + } catch (ChecksumAlgoIsNotSupported) { + return $this->calculateChecksumFromStream($path, $config); + } } - /** - * @inheritdoc - */ - public function get($path, Handler $handler = null) + private function resolvePublicUrlGenerator(): ?PublicUrlGenerator { - $path = Util::normalizePath($path); - - if ( ! $handler) { - $metadata = $this->getMetadata($path); - $handler = ($metadata && $metadata['type'] === 'file') ? new File($this, $path) : new Directory($this, $path); + if ($publicUrl = $this->config->get('public_url')) { + return match (true) { + is_array($publicUrl) => new ShardedPrefixPublicUrlGenerator($publicUrl), + default => new PrefixPublicUrlGenerator($publicUrl), + }; } - $handler->setPath($path); - $handler->setFilesystem($this); + if ($this->adapter instanceof PublicUrlGenerator) { + return $this->adapter; + } - return $handler; + return null; } /** - * Assert a file is present. - * - * @param string $path path to file - * - * @throws FileNotFoundException - * - * @return void + * @param mixed $contents */ - public function assertPresent($path) + private function assertIsResource($contents): void { - if ($this->config->get('disable_asserts', false) === false && ! $this->has($path)) { - throw new FileNotFoundException($path); + if (is_resource($contents) === false) { + throw new InvalidStreamProvided( + "Invalid stream provided, expected stream resource, received " . gettype($contents) + ); + } elseif ($type = get_resource_type($contents) !== 'stream') { + throw new InvalidStreamProvided( + "Invalid stream provided, expected stream resource, received resource of type " . $type + ); } } /** - * Assert a file is absent. - * - * @param string $path path to file - * - * @throws FileExistsException - * - * @return void + * @param resource $resource */ - public function assertAbsent($path) + private function rewindStream($resource): void { - if ($this->config->get('disable_asserts', false) === false && $this->has($path)) { - throw new FileExistsException($path); + if (ftell($resource) !== 0 && stream_get_meta_data($resource)['seekable']) { + rewind($resource); } } } diff --git a/core/vendor/league/flysystem/src/FilesystemAdapter.php b/core/vendor/league/flysystem/src/FilesystemAdapter.php new file mode 100644 index 0000000000..714309f31f --- /dev/null +++ b/core/vendor/league/flysystem/src/FilesystemAdapter.php @@ -0,0 +1,115 @@ + + * + * @throws FilesystemException + */ + public function listContents(string $path, bool $deep): iterable; + + /** + * @throws UnableToMoveFile + * @throws FilesystemException + */ + public function move(string $source, string $destination, Config $config): void; + + /** + * @throws UnableToCopyFile + * @throws FilesystemException + */ + public function copy(string $source, string $destination, Config $config): void; +} diff --git a/core/vendor/league/flysystem/src/FilesystemException.php b/core/vendor/league/flysystem/src/FilesystemException.php index 3121e533d7..f9d60185fc 100644 --- a/core/vendor/league/flysystem/src/FilesystemException.php +++ b/core/vendor/league/flysystem/src/FilesystemException.php @@ -1,7 +1,11 @@ + * + * @throws FilesystemException + * @throws UnableToListContents + */ + public function listContents(string $location, bool $deep = self::LIST_SHALLOW): DirectoryListing; + + /** + * @throws UnableToRetrieveMetadata + * @throws FilesystemException + */ + public function lastModified(string $path): int; + + /** + * @throws UnableToRetrieveMetadata + * @throws FilesystemException + */ + public function fileSize(string $path): int; + + /** + * @throws UnableToRetrieveMetadata + * @throws FilesystemException + */ + public function mimeType(string $path): string; + + /** + * @throws UnableToRetrieveMetadata + * @throws FilesystemException + */ + public function visibility(string $path): string; +} diff --git a/core/vendor/league/flysystem/src/FilesystemWriter.php b/core/vendor/league/flysystem/src/FilesystemWriter.php new file mode 100644 index 0000000000..a24bb0fcf0 --- /dev/null +++ b/core/vendor/league/flysystem/src/FilesystemWriter.php @@ -0,0 +1,58 @@ +path = $path; - $this->filesystem = $filesystem; - } - - /** - * Check whether the entree is a directory. - * - * @return bool - */ - public function isDir() - { - return $this->getType() === 'dir'; - } - - /** - * Check whether the entree is a file. - * - * @return bool - */ - public function isFile() - { - return $this->getType() === 'file'; - } - - /** - * Retrieve the entree type (file|dir). - * - * @return string file or dir - */ - public function getType() - { - $metadata = $this->filesystem->getMetadata($this->path); - - return $metadata ? $metadata['type'] : 'dir'; - } - - /** - * Set the Filesystem object. - * - * @param FilesystemInterface $filesystem - * - * @return $this - */ - public function setFilesystem(FilesystemInterface $filesystem) - { - $this->filesystem = $filesystem; - - return $this; - } - - /** - * Retrieve the Filesystem object. - * - * @return FilesystemInterface - */ - public function getFilesystem() - { - return $this->filesystem; - } - - /** - * Set the entree path. - * - * @param string $path - * - * @return $this - */ - public function setPath($path) - { - $this->path = $path; - - return $this; - } - - /** - * Retrieve the entree path. - * - * @return string path - */ - public function getPath() - { - return $this->path; - } - - /** - * Plugins pass-through. - * - * @param string $method - * @param array $arguments - * - * @return mixed - */ - public function __call($method, array $arguments) - { - array_unshift($arguments, $this->path); - $callback = [$this->filesystem, $method]; - - try { - return call_user_func_array($callback, $arguments); - } catch (BadMethodCallException $e) { - throw new BadMethodCallException( - 'Call to undefined method ' - . get_called_class() - . '::' . $method - ); - } - } -} diff --git a/core/vendor/league/flysystem/src/InvalidRootException.php b/core/vendor/league/flysystem/src/InvalidRootException.php deleted file mode 100644 index 468d1d58c1..0000000000 --- a/core/vendor/league/flysystem/src/InvalidRootException.php +++ /dev/null @@ -1,9 +0,0 @@ - */ - protected $filesystems = []; + private $filesystems = []; /** - * Constructor. + * MountManager constructor. * - * @param FilesystemInterface[] $filesystems [:prefix => Filesystem,] - * - * @throws InvalidArgumentException + * @param array $filesystems */ public function __construct(array $filesystems = []) { $this->mountFilesystems($filesystems); } - /** - * Mount filesystems. - * - * @param FilesystemInterface[] $filesystems [:prefix => Filesystem,] - * - * @throws InvalidArgumentException - * - * @return $this - */ - public function mountFilesystems(array $filesystems) + public function fileExists(string $location): bool { - foreach ($filesystems as $prefix => $filesystem) { - $this->mountFilesystem($prefix, $filesystem); - } + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - return $this; + try { + return $filesystem->fileExists($path); + } catch (Throwable $exception) { + throw UnableToCheckFileExistence::forLocation($location, $exception); + } } - /** - * Mount filesystems. - * - * @param string $prefix - * @param FilesystemInterface $filesystem - * - * @throws InvalidArgumentException - * - * @return $this - */ - public function mountFilesystem($prefix, FilesystemInterface $filesystem) + public function has(string $location): bool { - if ( ! is_string($prefix)) { - throw new InvalidArgumentException(__METHOD__ . ' expects argument #1 to be a string.'); - } + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - $this->filesystems[$prefix] = $filesystem; - - return $this; + try { + return $filesystem->fileExists($path) || $filesystem->directoryExists($path); + } catch (Throwable $exception) { + throw UnableToCheckExistence::forLocation($location, $exception); + } } - /** - * Get the filesystem with the corresponding prefix. - * - * @param string $prefix - * - * @throws FilesystemNotFoundException - * - * @return FilesystemInterface - */ - public function getFilesystem($prefix) + public function directoryExists(string $location): bool { - if ( ! isset($this->filesystems[$prefix])) { - throw new FilesystemNotFoundException('No filesystem mounted with prefix ' . $prefix); - } + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - return $this->filesystems[$prefix]; + try { + return $filesystem->directoryExists($path); + } catch (Throwable $exception) { + throw UnableToCheckDirectoryExistence::forLocation($location, $exception); + } } - /** - * Retrieve the prefix from an arguments array. - * - * @param array $arguments - * - * @throws InvalidArgumentException - * - * @return array [:prefix, :arguments] - */ - public function filterPrefix(array $arguments) + public function read(string $location): string { - if (empty($arguments)) { - throw new InvalidArgumentException('At least one argument needed'); - } + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - $path = array_shift($arguments); - - if ( ! is_string($path)) { - throw new InvalidArgumentException('First argument should be a string'); + try { + return $filesystem->read($path); + } catch (UnableToReadFile $exception) { + throw UnableToReadFile::fromLocation($location, $exception->reason(), $exception); } - - list($prefix, $path) = $this->getPrefixAndPath($path); - array_unshift($arguments, $path); - - return [$prefix, $arguments]; } - /** - * @param string $directory - * @param bool $recursive - * - * @throws InvalidArgumentException - * @throws FilesystemNotFoundException - * - * @return array - */ - public function listContents($directory = '', $recursive = false) + public function readStream(string $location) { - list($prefix, $directory) = $this->getPrefixAndPath($directory); - $filesystem = $this->getFilesystem($prefix); - $result = $filesystem->listContents($directory, $recursive); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - foreach ($result as &$file) { - $file['filesystem'] = $prefix; + try { + return $filesystem->readStream($path); + } catch (UnableToReadFile $exception) { + throw UnableToReadFile::fromLocation($location, $exception->reason(), $exception); } - - return $result; } - /** - * Call forwarder. - * - * @param string $method - * @param array $arguments - * - * @throws InvalidArgumentException - * @throws FilesystemNotFoundException - * - * @return mixed - */ - public function __call($method, $arguments) + public function listContents(string $location, bool $deep = self::LIST_SHALLOW): DirectoryListing { - list($prefix, $arguments) = $this->filterPrefix($arguments); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path, $mountIdentifier] = $this->determineFilesystemAndPath($location); - return $this->invokePluginOnFilesystem($method, $arguments, $prefix); + return + $filesystem + ->listContents($path, $deep) + ->map( + function (StorageAttributes $attributes) use ($mountIdentifier) { + return $attributes->withPath(sprintf('%s://%s', $mountIdentifier, $attributes->path())); + } + ); } - /** - * @param string $from - * @param string $to - * @param array $config - * - * @throws InvalidArgumentException - * @throws FilesystemNotFoundException - * @throws FileExistsException - * - * @return bool - */ - public function copy($from, $to, array $config = []) + public function lastModified(string $location): int { - list($prefixFrom, $from) = $this->getPrefixAndPath($from); - - $buffer = $this->getFilesystem($prefixFrom)->readStream($from); - - if ($buffer === false) { - return false; - } - - list($prefixTo, $to) = $this->getPrefixAndPath($to); - - $result = $this->getFilesystem($prefixTo)->writeStream($to, $buffer, $config); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - if (is_resource($buffer)) { - fclose($buffer); + try { + return $filesystem->lastModified($path); + } catch (UnableToRetrieveMetadata $exception) { + throw UnableToRetrieveMetadata::lastModified($location, $exception->reason(), $exception); } - - return $result; } - /** - * List with plugin adapter. - * - * @param array $keys - * @param string $directory - * @param bool $recursive - * - * @throws InvalidArgumentException - * @throws FilesystemNotFoundException - * - * @return array - */ - public function listWith(array $keys = [], $directory = '', $recursive = false) + public function fileSize(string $location): int { - list($prefix, $directory) = $this->getPrefixAndPath($directory); - $arguments = [$keys, $directory, $recursive]; + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - return $this->invokePluginOnFilesystem('listWith', $arguments, $prefix); + try { + return $filesystem->fileSize($path); + } catch (UnableToRetrieveMetadata $exception) { + throw UnableToRetrieveMetadata::fileSize($location, $exception->reason(), $exception); + } } - /** - * Move a file. - * - * @param string $from - * @param string $to - * @param array $config - * - * @throws InvalidArgumentException - * @throws FilesystemNotFoundException - * - * @return bool - */ - public function move($from, $to, array $config = []) + public function mimeType(string $location): string { - list($prefixFrom, $pathFrom) = $this->getPrefixAndPath($from); - list($prefixTo, $pathTo) = $this->getPrefixAndPath($to); - - if ($prefixFrom === $prefixTo) { - $filesystem = $this->getFilesystem($prefixFrom); - $renamed = $filesystem->rename($pathFrom, $pathTo); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - if ($renamed && isset($config['visibility'])) { - return $filesystem->setVisibility($pathTo, $config['visibility']); - } - - return $renamed; - } - - $copied = $this->copy($from, $to, $config); - - if ($copied) { - return $this->delete($from); + try { + return $filesystem->mimeType($path); + } catch (UnableToRetrieveMetadata $exception) { + throw UnableToRetrieveMetadata::mimeType($location, $exception->reason(), $exception); } - - return false; } - /** - * Invoke a plugin on a filesystem mounted on a given prefix. - * - * @param string $method - * @param array $arguments - * @param string $prefix - * - * @throws FilesystemNotFoundException - * - * @return mixed - */ - public function invokePluginOnFilesystem($method, $arguments, $prefix) + public function visibility(string $location): string { - $filesystem = $this->getFilesystem($prefix); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); try { - return $this->invokePlugin($method, $arguments, $filesystem); - } catch (PluginNotFoundException $e) { - // Let it pass, it's ok, don't panic. + return $filesystem->visibility($path); + } catch (UnableToRetrieveMetadata $exception) { + throw UnableToRetrieveMetadata::visibility($location, $exception->reason(), $exception); } - - $callback = [$filesystem, $method]; - - return call_user_func_array($callback, $arguments); } - /** - * @param string $path - * - * @throws InvalidArgumentException - * - * @return string[] [:prefix, :path] - */ - protected function getPrefixAndPath($path) + public function write(string $location, string $contents, array $config = []): void { - if (strpos($path, '://') < 1) { - throw new InvalidArgumentException('No prefix detected in path: ' . $path); - } + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - return explode('://', $path, 2); + try { + $filesystem->write($path, $contents, $config); + } catch (UnableToWriteFile $exception) { + throw UnableToWriteFile::atLocation($location, $exception->reason(), $exception); + } } - /** - * Check whether a file exists. - * - * @param string $path - * - * @return bool - */ - public function has($path) + public function writeStream(string $location, $contents, array $config = []): void { - list($prefix, $path) = $this->getPrefixAndPath($path); - - return $this->getFilesystem($prefix)->has($path); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); + $filesystem->writeStream($path, $contents, $config); } - /** - * Read a file. - * - * @param string $path The path to the file. - * - * @throws FileNotFoundException - * - * @return string|false The file contents or false on failure. - */ - public function read($path) + public function setVisibility(string $path, string $visibility): void { - list($prefix, $path) = $this->getPrefixAndPath($path); - - return $this->getFilesystem($prefix)->read($path); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($path); + $filesystem->setVisibility($path, $visibility); } - /** - * Retrieves a read-stream for a path. - * - * @param string $path The path to the file. - * - * @throws FileNotFoundException - * - * @return resource|false The path resource or false on failure. - */ - public function readStream($path) + public function delete(string $location): void { - list($prefix, $path) = $this->getPrefixAndPath($path); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - return $this->getFilesystem($prefix)->readStream($path); + try { + $filesystem->delete($path); + } catch (UnableToDeleteFile $exception) { + throw UnableToDeleteFile::atLocation($location, $exception->reason(), $exception); + } } - /** - * Get a file's metadata. - * - * @param string $path The path to the file. - * - * @throws FileNotFoundException - * - * @return array|false The file metadata or false on failure. - */ - public function getMetadata($path) + public function deleteDirectory(string $location): void { - list($prefix, $path) = $this->getPrefixAndPath($path); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - return $this->getFilesystem($prefix)->getMetadata($path); + try { + $filesystem->deleteDirectory($path); + } catch (UnableToDeleteDirectory $exception) { + throw UnableToDeleteDirectory::atLocation($location, $exception->reason(), $exception); + } } - /** - * Get a file's size. - * - * @param string $path The path to the file. - * - * @throws FileNotFoundException - * - * @return int|false The file size or false on failure. - */ - public function getSize($path) + public function createDirectory(string $location, array $config = []): void { - list($prefix, $path) = $this->getPrefixAndPath($path); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($location); - return $this->getFilesystem($prefix)->getSize($path); + try { + $filesystem->createDirectory($path, $config); + } catch (UnableToCreateDirectory $exception) { + throw UnableToCreateDirectory::dueToFailure($location, $exception); + } } - /** - * Get a file's mime-type. - * - * @param string $path The path to the file. - * - * @throws FileNotFoundException - * - * @return string|false The file mime-type or false on failure. - */ - public function getMimetype($path) + public function move(string $source, string $destination, array $config = []): void { - list($prefix, $path) = $this->getPrefixAndPath($path); + /** @var FilesystemOperator $sourceFilesystem */ + /* @var FilesystemOperator $destinationFilesystem */ + [$sourceFilesystem, $sourcePath] = $this->determineFilesystemAndPath($source); + [$destinationFilesystem, $destinationPath] = $this->determineFilesystemAndPath($destination); - return $this->getFilesystem($prefix)->getMimetype($path); + $sourceFilesystem === $destinationFilesystem ? $this->moveInTheSameFilesystem( + $sourceFilesystem, + $sourcePath, + $destinationPath, + $source, + $destination + ) : $this->moveAcrossFilesystems($source, $destination, $config); } - /** - * Get a file's timestamp. - * - * @param string $path The path to the file. - * - * @throws FileNotFoundException - * - * @return string|false The timestamp or false on failure. - */ - public function getTimestamp($path) + public function copy(string $source, string $destination, array $config = []): void { - list($prefix, $path) = $this->getPrefixAndPath($path); + /** @var FilesystemOperator $sourceFilesystem */ + /* @var FilesystemOperator $destinationFilesystem */ + [$sourceFilesystem, $sourcePath] = $this->determineFilesystemAndPath($source); + [$destinationFilesystem, $destinationPath] = $this->determineFilesystemAndPath($destination); - return $this->getFilesystem($prefix)->getTimestamp($path); + $sourceFilesystem === $destinationFilesystem ? $this->copyInSameFilesystem( + $sourceFilesystem, + $sourcePath, + $destinationPath, + $source, + $destination + ) : $this->copyAcrossFilesystem( + $config['visibility'] ?? null, + $sourceFilesystem, + $sourcePath, + $destinationFilesystem, + $destinationPath, + $source, + $destination + ); } - /** - * Get a file's visibility. - * - * @param string $path The path to the file. - * - * @throws FileNotFoundException - * - * @return string|false The visibility (public|private) or false on failure. - */ - public function getVisibility($path) + public function publicUrl(string $path, array $config = []): string { - list($prefix, $path) = $this->getPrefixAndPath($path); - - return $this->getFilesystem($prefix)->getVisibility($path); - } + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($path); - /** - * Write a new file. - * - * @param string $path The path of the new file. - * @param string $contents The file contents. - * @param array $config An optional configuration array. - * - * @throws FileExistsException - * - * @return bool True on success, false on failure. - */ - public function write($path, $contents, array $config = []) - { - list($prefix, $path) = $this->getPrefixAndPath($path); + if ( ! method_exists($filesystem, 'publicUrl')) { + throw new UnableToGeneratePublicUrl(sprintf('%s does not support generating public urls.', $filesystem::class), $path); + } - return $this->getFilesystem($prefix)->write($path, $contents, $config); + return $filesystem->publicUrl($path, $config); } - /** - * Write a new file using a stream. - * - * @param string $path The path of the new file. - * @param resource $resource The file handle. - * @param array $config An optional configuration array. - * - * @throws InvalidArgumentException If $resource is not a file handle. - * @throws FileExistsException - * - * @return bool True on success, false on failure. - */ - public function writeStream($path, $resource, array $config = []) + public function temporaryUrl(string $path, DateTimeInterface $expiresAt, array $config = []): string { - list($prefix, $path) = $this->getPrefixAndPath($path); - - return $this->getFilesystem($prefix)->writeStream($path, $resource, $config); - } + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($path); - /** - * Update an existing file. - * - * @param string $path The path of the existing file. - * @param string $contents The file contents. - * @param array $config An optional configuration array. - * - * @throws FileNotFoundException - * - * @return bool True on success, false on failure. - */ - public function update($path, $contents, array $config = []) - { - list($prefix, $path) = $this->getPrefixAndPath($path); + if ( ! method_exists($filesystem, 'temporaryUrl')) { + throw new UnableToGenerateTemporaryUrl(sprintf('%s does not support generating public urls.', $filesystem::class), $path); + } - return $this->getFilesystem($prefix)->update($path, $contents, $config); + return $filesystem->temporaryUrl($path, $expiresAt, $config); } - /** - * Update an existing file using a stream. - * - * @param string $path The path of the existing file. - * @param resource $resource The file handle. - * @param array $config An optional configuration array. - * - * @throws InvalidArgumentException If $resource is not a file handle. - * @throws FileNotFoundException - * - * @return bool True on success, false on failure. - */ - public function updateStream($path, $resource, array $config = []) + public function checksum(string $path, array $config = []): string { - list($prefix, $path) = $this->getPrefixAndPath($path); + /** @var FilesystemOperator $filesystem */ + [$filesystem, $path] = $this->determineFilesystemAndPath($path); - return $this->getFilesystem($prefix)->updateStream($path, $resource, $config); - } - - /** - * Rename a file. - * - * @param string $path Path to the existing file. - * @param string $newpath The new path of the file. - * - * @throws FileExistsException Thrown if $newpath exists. - * @throws FileNotFoundException Thrown if $path does not exist. - * - * @return bool True on success, false on failure. - */ - public function rename($path, $newpath) - { - list($prefix, $path) = $this->getPrefixAndPath($path); + if ( ! method_exists($filesystem, 'checksum')) { + throw new UnableToProvideChecksum(sprintf('%s does not support providing checksums.', $filesystem::class), $path); + } - return $this->getFilesystem($prefix)->rename($path, $newpath); + return $filesystem->checksum($path, $config); } - /** - * Delete a file. - * - * @param string $path - * - * @throws FileNotFoundException - * - * @return bool True on success, false on failure. - */ - public function delete($path) + private function mountFilesystems(array $filesystems): void { - list($prefix, $path) = $this->getPrefixAndPath($path); - - return $this->getFilesystem($prefix)->delete($path); + foreach ($filesystems as $key => $filesystem) { + $this->guardAgainstInvalidMount($key, $filesystem); + /* @var string $key */ + /* @var FilesystemOperator $filesystem */ + $this->mountFilesystem($key, $filesystem); + } } /** - * Delete a directory. - * - * @param string $dirname - * - * @throws RootViolationException Thrown if $dirname is empty. - * - * @return bool True on success, false on failure. + * @param mixed $key + * @param mixed $filesystem */ - public function deleteDir($dirname) + private function guardAgainstInvalidMount($key, $filesystem): void { - list($prefix, $dirname) = $this->getPrefixAndPath($dirname); + if ( ! is_string($key)) { + throw UnableToMountFilesystem::becauseTheKeyIsNotValid($key); + } - return $this->getFilesystem($prefix)->deleteDir($dirname); + if ( ! $filesystem instanceof FilesystemOperator) { + throw UnableToMountFilesystem::becauseTheFilesystemWasNotValid($filesystem); + } } - /** - * Create a directory. - * - * @param string $dirname The name of the new directory. - * @param array $config An optional configuration array. - * - * @return bool True on success, false on failure. - */ - public function createDir($dirname, array $config = []) + private function mountFilesystem(string $key, FilesystemOperator $filesystem): void { - list($prefix, $dirname) = $this->getPrefixAndPath($dirname); - - return $this->getFilesystem($prefix)->createDir($dirname); + $this->filesystems[$key] = $filesystem; } /** - * Set the visibility for a file. - * - * @param string $path The path to the file. - * @param string $visibility One of 'public' or 'private'. - * - * @throws FileNotFoundException + * @param string $path * - * @return bool True on success, false on failure. + * @return array{0:FilesystemOperator, 1:string} */ - public function setVisibility($path, $visibility) + private function determineFilesystemAndPath(string $path): array { - list($prefix, $path) = $this->getPrefixAndPath($path); + if (strpos($path, '://') < 1) { + throw UnableToResolveFilesystemMount::becauseTheSeparatorIsMissing($path); + } - return $this->getFilesystem($prefix)->setVisibility($path, $visibility); - } + /** @var string $mountIdentifier */ + /** @var string $mountPath */ + [$mountIdentifier, $mountPath] = explode('://', $path, 2); - /** - * Create a file or update if exists. - * - * @param string $path The path to the file. - * @param string $contents The file contents. - * @param array $config An optional configuration array. - * - * @return bool True on success, false on failure. - */ - public function put($path, $contents, array $config = []) - { - list($prefix, $path) = $this->getPrefixAndPath($path); + if ( ! array_key_exists($mountIdentifier, $this->filesystems)) { + throw UnableToResolveFilesystemMount::becauseTheMountWasNotRegistered($mountIdentifier); + } - return $this->getFilesystem($prefix)->put($path, $contents, $config); + return [$this->filesystems[$mountIdentifier], $mountPath, $mountIdentifier]; } - /** - * Create a file or update if exists. - * - * @param string $path The path to the file. - * @param resource $resource The file handle. - * @param array $config An optional configuration array. - * - * @throws InvalidArgumentException Thrown if $resource is not a resource. - * - * @return bool True on success, false on failure. - */ - public function putStream($path, $resource, array $config = []) - { - list($prefix, $path) = $this->getPrefixAndPath($path); - - return $this->getFilesystem($prefix)->putStream($path, $resource, $config); + private function copyInSameFilesystem( + FilesystemOperator $sourceFilesystem, + string $sourcePath, + string $destinationPath, + string $source, + string $destination + ): void { + try { + $sourceFilesystem->copy($sourcePath, $destinationPath); + } catch (UnableToCopyFile $exception) { + throw UnableToCopyFile::fromLocationTo($source, $destination, $exception); + } } - /** - * Read and delete a file. - * - * @param string $path The path to the file. - * - * @throws FileNotFoundException - * - * @return string|false The file contents, or false on failure. - */ - public function readAndDelete($path) - { - list($prefix, $path) = $this->getPrefixAndPath($path); + private function copyAcrossFilesystem( + ?string $visibility, + FilesystemOperator $sourceFilesystem, + string $sourcePath, + FilesystemOperator $destinationFilesystem, + string $destinationPath, + string $source, + string $destination + ): void { + try { + $visibility = $visibility ?? $sourceFilesystem->visibility($sourcePath); + $stream = $sourceFilesystem->readStream($sourcePath); + $destinationFilesystem->writeStream($destinationPath, $stream, compact('visibility')); + } catch (UnableToRetrieveMetadata | UnableToReadFile | UnableToWriteFile $exception) { + throw UnableToCopyFile::fromLocationTo($source, $destination, $exception); + } + } - return $this->getFilesystem($prefix)->readAndDelete($path); + private function moveInTheSameFilesystem( + FilesystemOperator $sourceFilesystem, + string $sourcePath, + string $destinationPath, + string $source, + string $destination + ): void { + try { + $sourceFilesystem->move($sourcePath, $destinationPath); + } catch (UnableToMoveFile $exception) { + throw UnableToMoveFile::fromLocationTo($source, $destination, $exception); + } } - /** - * Get a file/directory handler. - * - * @deprecated - * - * @param string $path The path to the file. - * @param Handler $handler An optional existing handler to populate. - * - * @return Handler Either a file or directory handler. - */ - public function get($path, Handler $handler = null) + private function moveAcrossFilesystems(string $source, string $destination, array $config = []): void { - list($prefix, $path) = $this->getPrefixAndPath($path); - - return $this->getFilesystem($prefix)->get($path); + try { + $this->copy($source, $destination, $config); + $this->delete($source); + } catch (UnableToCopyFile | UnableToDeleteFile $exception) { + throw UnableToMoveFile::fromLocationTo($source, $destination, $exception); + } } } diff --git a/core/vendor/league/flysystem/src/NotSupportedException.php b/core/vendor/league/flysystem/src/NotSupportedException.php deleted file mode 100644 index e0a989b22c..0000000000 --- a/core/vendor/league/flysystem/src/NotSupportedException.php +++ /dev/null @@ -1,37 +0,0 @@ -getPathname()); - } - - /** - * Create a new exception for a link. - * - * @param string $systemType - * - * @return static - */ - public static function forFtpSystemType($systemType) - { - $message = "The FTP system type '$systemType' is currently not supported."; - - return new static($message); - } -} diff --git a/core/vendor/league/flysystem/src/PathNormalizer.php b/core/vendor/league/flysystem/src/PathNormalizer.php new file mode 100644 index 0000000000..54da201aee --- /dev/null +++ b/core/vendor/league/flysystem/src/PathNormalizer.php @@ -0,0 +1,10 @@ +prefix = rtrim($prefix, '\\/'); + + if ($this->prefix !== '' || $prefix === $separator) { + $this->prefix .= $separator; + } + } + + public function prefixPath(string $path): string + { + return $this->prefix . ltrim($path, '\\/'); + } + + public function stripPrefix(string $path): string + { + /* @var string */ + return substr($path, strlen($this->prefix)); + } + + public function stripDirectoryPrefix(string $path): string + { + return rtrim($this->stripPrefix($path), '\\/'); + } + + public function prefixDirectoryPath(string $path): string + { + $prefixedPath = $this->prefixPath(rtrim($path, '\\/')); + + if ($prefixedPath === '' || substr($prefixedPath, -1) === $this->separator) { + return $prefixedPath; + } + + return $prefixedPath . $this->separator; + } +} diff --git a/core/vendor/league/flysystem/src/PathTraversalDetected.php b/core/vendor/league/flysystem/src/PathTraversalDetected.php new file mode 100644 index 0000000000..fef3edf189 --- /dev/null +++ b/core/vendor/league/flysystem/src/PathTraversalDetected.php @@ -0,0 +1,25 @@ +path; + } + + public static function forPath(string $path): PathTraversalDetected + { + $e = new PathTraversalDetected("Path traversal detected: {$path}"); + $e->path = $path; + + return $e; + } +} diff --git a/core/vendor/league/flysystem/src/Plugin/AbstractPlugin.php b/core/vendor/league/flysystem/src/Plugin/AbstractPlugin.php deleted file mode 100644 index 0d56789769..0000000000 --- a/core/vendor/league/flysystem/src/Plugin/AbstractPlugin.php +++ /dev/null @@ -1,24 +0,0 @@ -filesystem = $filesystem; - } -} diff --git a/core/vendor/league/flysystem/src/Plugin/EmptyDir.php b/core/vendor/league/flysystem/src/Plugin/EmptyDir.php deleted file mode 100644 index b5ae7f582d..0000000000 --- a/core/vendor/league/flysystem/src/Plugin/EmptyDir.php +++ /dev/null @@ -1,34 +0,0 @@ -filesystem->listContents($dirname, false); - - foreach ($listing as $item) { - if ($item['type'] === 'dir') { - $this->filesystem->deleteDir($item['path']); - } else { - $this->filesystem->delete($item['path']); - } - } - } -} diff --git a/core/vendor/league/flysystem/src/Plugin/ForcedCopy.php b/core/vendor/league/flysystem/src/Plugin/ForcedCopy.php deleted file mode 100644 index a41e9f3aeb..0000000000 --- a/core/vendor/league/flysystem/src/Plugin/ForcedCopy.php +++ /dev/null @@ -1,44 +0,0 @@ -filesystem->delete($newpath); - } catch (FileNotFoundException $e) { - // The destination path does not exist. That's ok. - $deleted = true; - } - - if ($deleted) { - return $this->filesystem->copy($path, $newpath); - } - - return false; - } -} diff --git a/core/vendor/league/flysystem/src/Plugin/ForcedRename.php b/core/vendor/league/flysystem/src/Plugin/ForcedRename.php deleted file mode 100644 index 3f51cd6076..0000000000 --- a/core/vendor/league/flysystem/src/Plugin/ForcedRename.php +++ /dev/null @@ -1,44 +0,0 @@ -filesystem->delete($newpath); - } catch (FileNotFoundException $e) { - // The destination path does not exist. That's ok. - $deleted = true; - } - - if ($deleted) { - return $this->filesystem->rename($path, $newpath); - } - - return false; - } -} diff --git a/core/vendor/league/flysystem/src/Plugin/GetWithMetadata.php b/core/vendor/league/flysystem/src/Plugin/GetWithMetadata.php deleted file mode 100644 index 2f13d2fd22..0000000000 --- a/core/vendor/league/flysystem/src/Plugin/GetWithMetadata.php +++ /dev/null @@ -1,51 +0,0 @@ -filesystem->getMetadata($path); - - if ( ! $object) { - return false; - } - - $keys = array_diff($metadata, array_keys($object)); - - foreach ($keys as $key) { - if ( ! method_exists($this->filesystem, $method = 'get' . ucfirst($key))) { - throw new InvalidArgumentException('Could not fetch metadata: ' . $key); - } - - $object[$key] = $this->filesystem->{$method}($path); - } - - return $object; - } -} diff --git a/core/vendor/league/flysystem/src/Plugin/ListFiles.php b/core/vendor/league/flysystem/src/Plugin/ListFiles.php deleted file mode 100644 index 9669fe7e7b..0000000000 --- a/core/vendor/league/flysystem/src/Plugin/ListFiles.php +++ /dev/null @@ -1,35 +0,0 @@ -filesystem->listContents($directory, $recursive); - - $filter = function ($object) { - return $object['type'] === 'file'; - }; - - return array_values(array_filter($contents, $filter)); - } -} diff --git a/core/vendor/league/flysystem/src/Plugin/ListPaths.php b/core/vendor/league/flysystem/src/Plugin/ListPaths.php deleted file mode 100644 index 0889d1f8d1..0000000000 --- a/core/vendor/league/flysystem/src/Plugin/ListPaths.php +++ /dev/null @@ -1,36 +0,0 @@ -filesystem->listContents($directory, $recursive); - - foreach ($contents as $object) { - $result[] = $object['path']; - } - - return $result; - } -} diff --git a/core/vendor/league/flysystem/src/Plugin/ListWith.php b/core/vendor/league/flysystem/src/Plugin/ListWith.php deleted file mode 100644 index d64debeca0..0000000000 --- a/core/vendor/league/flysystem/src/Plugin/ListWith.php +++ /dev/null @@ -1,60 +0,0 @@ -filesystem->listContents($directory, $recursive); - - foreach ($contents as $index => $object) { - if ($object['type'] === 'file') { - $missingKeys = array_diff($keys, array_keys($object)); - $contents[$index] = array_reduce($missingKeys, [$this, 'getMetadataByName'], $object); - } - } - - return $contents; - } - - /** - * Get a meta-data value by key name. - * - * @param array $object - * @param string $key - * - * @return array - */ - protected function getMetadataByName(array $object, $key) - { - $method = 'get' . ucfirst($key); - - if ( ! method_exists($this->filesystem, $method)) { - throw new \InvalidArgumentException('Could not get meta-data for key: ' . $key); - } - - $object[$key] = $this->filesystem->{$method}($object['path']); - - return $object; - } -} diff --git a/core/vendor/league/flysystem/src/Plugin/PluggableTrait.php b/core/vendor/league/flysystem/src/Plugin/PluggableTrait.php deleted file mode 100644 index 922edfe52b..0000000000 --- a/core/vendor/league/flysystem/src/Plugin/PluggableTrait.php +++ /dev/null @@ -1,97 +0,0 @@ -plugins[$plugin->getMethod()] = $plugin; - - return $this; - } - - /** - * Find a specific plugin. - * - * @param string $method - * - * @throws PluginNotFoundException - * - * @return PluginInterface - */ - protected function findPlugin($method) - { - if ( ! isset($this->plugins[$method])) { - throw new PluginNotFoundException('Plugin not found for method: ' . $method); - } - - return $this->plugins[$method]; - } - - /** - * Invoke a plugin by method name. - * - * @param string $method - * @param array $arguments - * @param FilesystemInterface $filesystem - * - * @throws PluginNotFoundException - * - * @return mixed - */ - protected function invokePlugin($method, array $arguments, FilesystemInterface $filesystem) - { - $plugin = $this->findPlugin($method); - $plugin->setFilesystem($filesystem); - $callback = [$plugin, 'handle']; - - return call_user_func_array($callback, $arguments); - } - - /** - * Plugins pass-through. - * - * @param string $method - * @param array $arguments - * - * @throws BadMethodCallException - * - * @return mixed - */ - public function __call($method, array $arguments) - { - try { - return $this->invokePlugin($method, $arguments, $this); - } catch (PluginNotFoundException $e) { - throw new BadMethodCallException( - 'Call to undefined method ' - . get_class($this) - . '::' . $method - ); - } - } -} diff --git a/core/vendor/league/flysystem/src/Plugin/PluginNotFoundException.php b/core/vendor/league/flysystem/src/Plugin/PluginNotFoundException.php deleted file mode 100644 index fd1d7e7e30..0000000000 --- a/core/vendor/league/flysystem/src/Plugin/PluginNotFoundException.php +++ /dev/null @@ -1,10 +0,0 @@ -formatPropertyName((string) $offset); + + return isset($this->{$property}); + } + + /** + * @param mixed $offset + * + * @return mixed + */ + #[\ReturnTypeWillChange] + public function offsetGet($offset) + { + $property = $this->formatPropertyName((string) $offset); + + return $this->{$property}; + } + + /** + * @param mixed $offset + * @param mixed $value + */ + #[\ReturnTypeWillChange] + public function offsetSet($offset, $value): void + { + throw new RuntimeException('Properties can not be manipulated'); + } + + /** + * @param mixed $offset + */ + #[\ReturnTypeWillChange] + public function offsetUnset($offset): void + { + throw new RuntimeException('Properties can not be manipulated'); + } +} diff --git a/core/vendor/league/flysystem/src/ReadInterface.php b/core/vendor/league/flysystem/src/ReadInterface.php deleted file mode 100644 index 898a8d5c81..0000000000 --- a/core/vendor/league/flysystem/src/ReadInterface.php +++ /dev/null @@ -1,88 +0,0 @@ -hash = spl_object_hash($this); - static::$safeStorage[$this->hash] = []; - } - - public function storeSafely($key, $value) - { - static::$safeStorage[$this->hash][$key] = $value; - } - - public function retrieveSafely($key) - { - if (array_key_exists($key, static::$safeStorage[$this->hash])) { - return static::$safeStorage[$this->hash][$key]; - } - } - - public function __destruct() - { - unset(static::$safeStorage[$this->hash]); - } -} diff --git a/core/vendor/league/flysystem/src/StorageAttributes.php b/core/vendor/league/flysystem/src/StorageAttributes.php new file mode 100644 index 0000000000..6be6235bd9 --- /dev/null +++ b/core/vendor/league/flysystem/src/StorageAttributes.php @@ -0,0 +1,40 @@ +location; + } + + public static function atLocation(string $pathName): SymbolicLinkEncountered + { + $e = new static("Unsupported symbolic link encountered at location $pathName"); + $e->location = $pathName; + + return $e; + } +} diff --git a/core/vendor/league/flysystem/src/UnableToCheckDirectoryExistence.php b/core/vendor/league/flysystem/src/UnableToCheckDirectoryExistence.php new file mode 100644 index 0000000000..73ce858b92 --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToCheckDirectoryExistence.php @@ -0,0 +1,13 @@ +source; + } + + public function destination(): string + { + return $this->destination; + } + + public static function fromLocationTo( + string $sourcePath, + string $destinationPath, + Throwable $previous = null + ): UnableToCopyFile { + $e = new static("Unable to copy file from $sourcePath to $destinationPath", 0 , $previous); + $e->source = $sourcePath; + $e->destination = $destinationPath; + + return $e; + } + + public function operation(): string + { + return FilesystemOperationFailed::OPERATION_COPY; + } +} diff --git a/core/vendor/league/flysystem/src/UnableToCreateDirectory.php b/core/vendor/league/flysystem/src/UnableToCreateDirectory.php new file mode 100644 index 0000000000..f4eead0c70 --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToCreateDirectory.php @@ -0,0 +1,50 @@ +location = $dirname; + $e->reason = $errorMessage; + + return $e; + } + + public static function dueToFailure(string $dirname, Throwable $previous): UnableToCreateDirectory + { + $reason = $previous instanceof UnableToCreateDirectory ? $previous->reason() : ''; + $message = "Unable to create a directory at $dirname. $reason"; + $e = new static(rtrim($message), 0, $previous); + $e->location = $dirname; + $e->reason = $reason ?: $message; + + return $e; + } + + public function operation(): string + { + return FilesystemOperationFailed::OPERATION_CREATE_DIRECTORY; + } + + public function reason(): string + { + return $this->reason; + } + + public function location(): string + { + return $this->location; + } +} diff --git a/core/vendor/league/flysystem/src/UnableToDeleteDirectory.php b/core/vendor/league/flysystem/src/UnableToDeleteDirectory.php new file mode 100644 index 0000000000..eeeab24b2f --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToDeleteDirectory.php @@ -0,0 +1,48 @@ +location = $location; + $e->reason = $reason; + + return $e; + } + + public function operation(): string + { + return FilesystemOperationFailed::OPERATION_DELETE_DIRECTORY; + } + + public function reason(): string + { + return $this->reason; + } + + public function location(): string + { + return $this->location; + } +} diff --git a/core/vendor/league/flysystem/src/UnableToDeleteFile.php b/core/vendor/league/flysystem/src/UnableToDeleteFile.php new file mode 100644 index 0000000000..18f7215ccb --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToDeleteFile.php @@ -0,0 +1,45 @@ +location = $location; + $e->reason = $reason; + + return $e; + } + + public function operation(): string + { + return FilesystemOperationFailed::OPERATION_DELETE; + } + + public function reason(): string + { + return $this->reason; + } + + public function location(): string + { + return $this->location; + } +} diff --git a/core/vendor/league/flysystem/src/UnableToGeneratePublicUrl.php b/core/vendor/league/flysystem/src/UnableToGeneratePublicUrl.php new file mode 100644 index 0000000000..e3648c75f1 --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToGeneratePublicUrl.php @@ -0,0 +1,26 @@ +getMessage(), $path, $exception); + } + + public static function noGeneratorConfigured(string $path, string $extraReason = ''): static + { + return new static('No generator was configured ' . $extraReason, $path); + } +} diff --git a/core/vendor/league/flysystem/src/UnableToGenerateTemporaryUrl.php b/core/vendor/league/flysystem/src/UnableToGenerateTemporaryUrl.php new file mode 100644 index 0000000000..338601c739 --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToGenerateTemporaryUrl.php @@ -0,0 +1,26 @@ +getMessage(), $path, $exception); + } + + public static function noGeneratorConfigured(string $path, string $extraReason = ''): static + { + return new static('No generator was configured ' . $extraReason, $path); + } +} diff --git a/core/vendor/league/flysystem/src/UnableToListContents.php b/core/vendor/league/flysystem/src/UnableToListContents.php new file mode 100644 index 0000000000..4f7961dd14 --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToListContents.php @@ -0,0 +1,24 @@ +getMessage(); + + return new UnableToListContents($message, 0, $previous); + } + + public function operation(): string + { + return self::OPERATION_LIST_CONTENTS; + } +} diff --git a/core/vendor/league/flysystem/src/UnableToMountFilesystem.php b/core/vendor/league/flysystem/src/UnableToMountFilesystem.php new file mode 100644 index 0000000000..bd41bc98fc --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToMountFilesystem.php @@ -0,0 +1,32 @@ +source; + } + + public function destination(): string + { + return $this->destination; + } + + public static function fromLocationTo( + string $sourcePath, + string $destinationPath, + Throwable $previous = null + ): UnableToMoveFile { + $message = $previous?->getMessage() ?? "Unable to move file from $sourcePath to $destinationPath"; + $e = new static($message, 0, $previous); + $e->source = $sourcePath; + $e->destination = $destinationPath; + + return $e; + } + + public function operation(): string + { + return FilesystemOperationFailed::OPERATION_MOVE; + } +} diff --git a/core/vendor/league/flysystem/src/UnableToProvideChecksum.php b/core/vendor/league/flysystem/src/UnableToProvideChecksum.php new file mode 100644 index 0000000000..35e0502371 --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToProvideChecksum.php @@ -0,0 +1,16 @@ +location = $location; + $e->reason = $reason; + + return $e; + } + + public function operation(): string + { + return FilesystemOperationFailed::OPERATION_READ; + } + + public function reason(): string + { + return $this->reason; + } + + public function location(): string + { + return $this->location; + } +} diff --git a/core/vendor/league/flysystem/src/UnableToResolveFilesystemMount.php b/core/vendor/league/flysystem/src/UnableToResolveFilesystemMount.php new file mode 100644 index 0000000000..91a9ee3e3d --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToResolveFilesystemMount.php @@ -0,0 +1,20 @@ +reason = $reason; + $e->location = $location; + $e->metadataType = $type; + + return $e; + } + + public function reason(): string + { + return $this->reason; + } + + public function location(): string + { + return $this->location; + } + + public function metadataType(): string + { + return $this->metadataType; + } + + public function operation(): string + { + return FilesystemOperationFailed::OPERATION_RETRIEVE_METADATA; + } +} diff --git a/core/vendor/league/flysystem/src/UnableToSetVisibility.php b/core/vendor/league/flysystem/src/UnableToSetVisibility.php new file mode 100644 index 0000000000..5862d0e0c2 --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToSetVisibility.php @@ -0,0 +1,49 @@ +reason; + } + + public static function atLocation(string $filename, string $extraMessage = '', Throwable $previous = null): self + { + $message = "Unable to set visibility for file {$filename}. $extraMessage"; + $e = new static(rtrim($message), 0, $previous); + $e->reason = $extraMessage; + $e->location = $filename; + + return $e; + } + + public function operation(): string + { + return FilesystemOperationFailed::OPERATION_SET_VISIBILITY; + } + + public function location(): string + { + return $this->location; + } +} diff --git a/core/vendor/league/flysystem/src/UnableToWriteFile.php b/core/vendor/league/flysystem/src/UnableToWriteFile.php new file mode 100644 index 0000000000..5de7866583 --- /dev/null +++ b/core/vendor/league/flysystem/src/UnableToWriteFile.php @@ -0,0 +1,45 @@ +location = $location; + $e->reason = $reason; + + return $e; + } + + public function operation(): string + { + return FilesystemOperationFailed::OPERATION_WRITE; + } + + public function reason(): string + { + return $this->reason; + } + + public function location(): string + { + return $this->location; + } +} diff --git a/core/vendor/league/flysystem/src/UnixVisibility/PortableVisibilityConverter.php b/core/vendor/league/flysystem/src/UnixVisibility/PortableVisibilityConverter.php new file mode 100644 index 0000000000..117b4d9661 --- /dev/null +++ b/core/vendor/league/flysystem/src/UnixVisibility/PortableVisibilityConverter.php @@ -0,0 +1,79 @@ +filePublic + : $this->filePrivate; + } + + public function forDirectory(string $visibility): int + { + PortableVisibilityGuard::guardAgainstInvalidInput($visibility); + + return $visibility === Visibility::PUBLIC + ? $this->directoryPublic + : $this->directoryPrivate; + } + + public function inverseForFile(int $visibility): string + { + if ($visibility === $this->filePublic) { + return Visibility::PUBLIC; + } elseif ($visibility === $this->filePrivate) { + return Visibility::PRIVATE; + } + + return Visibility::PUBLIC; // default + } + + public function inverseForDirectory(int $visibility): string + { + if ($visibility === $this->directoryPublic) { + return Visibility::PUBLIC; + } elseif ($visibility === $this->directoryPrivate) { + return Visibility::PRIVATE; + } + + return Visibility::PUBLIC; // default + } + + public function defaultForDirectories(): int + { + return $this->defaultForDirectories === Visibility::PUBLIC ? $this->directoryPublic : $this->directoryPrivate; + } + + /** + * @param array $permissionMap + */ + public static function fromArray(array $permissionMap, string $defaultForDirectories = Visibility::PRIVATE): PortableVisibilityConverter + { + return new PortableVisibilityConverter( + $permissionMap['file']['public'] ?? 0644, + $permissionMap['file']['private'] ?? 0600, + $permissionMap['dir']['public'] ?? 0755, + $permissionMap['dir']['private'] ?? 0700, + $defaultForDirectories + ); + } +} diff --git a/core/vendor/league/flysystem/src/UnixVisibility/VisibilityConverter.php b/core/vendor/league/flysystem/src/UnixVisibility/VisibilityConverter.php new file mode 100644 index 0000000000..64af86a079 --- /dev/null +++ b/core/vendor/league/flysystem/src/UnixVisibility/VisibilityConverter.php @@ -0,0 +1,14 @@ +location; + } + + public static function atLocation(string $location): UnreadableFileEncountered + { + $e = new static("Unreadable file encountered at location {$location}."); + $e->location = $location; + + return $e; + } +} diff --git a/core/vendor/league/flysystem/src/UnreadableFileException.php b/core/vendor/league/flysystem/src/UnreadableFileException.php deleted file mode 100644 index e66803383f..0000000000 --- a/core/vendor/league/flysystem/src/UnreadableFileException.php +++ /dev/null @@ -1,18 +0,0 @@ -getRealPath() - ) - ); - } -} diff --git a/core/vendor/league/flysystem/src/UrlGeneration/ChainedPublicUrlGenerator.php b/core/vendor/league/flysystem/src/UrlGeneration/ChainedPublicUrlGenerator.php new file mode 100644 index 0000000000..079375a167 --- /dev/null +++ b/core/vendor/league/flysystem/src/UrlGeneration/ChainedPublicUrlGenerator.php @@ -0,0 +1,30 @@ +generators as $generator) { + try { + return $generator->publicUrl($path, $config); + } catch (UnableToGeneratePublicUrl) { + } + } + + throw new UnableToGeneratePublicUrl('No supported public url generator found.', $path); + } +} diff --git a/core/vendor/league/flysystem/src/UrlGeneration/PrefixPublicUrlGenerator.php b/core/vendor/league/flysystem/src/UrlGeneration/PrefixPublicUrlGenerator.php new file mode 100644 index 0000000000..792171551d --- /dev/null +++ b/core/vendor/league/flysystem/src/UrlGeneration/PrefixPublicUrlGenerator.php @@ -0,0 +1,23 @@ +prefixer = new PathPrefixer($urlPrefix, '/'); + } + + public function publicUrl(string $path, Config $config): string + { + return $this->prefixer->prefixPath($path); + } +} diff --git a/core/vendor/league/flysystem/src/UrlGeneration/PublicUrlGenerator.php b/core/vendor/league/flysystem/src/UrlGeneration/PublicUrlGenerator.php new file mode 100644 index 0000000000..08c987fd26 --- /dev/null +++ b/core/vendor/league/flysystem/src/UrlGeneration/PublicUrlGenerator.php @@ -0,0 +1,16 @@ +count = count($prefixes); + + if ($this->count === 0) { + throw new InvalidArgumentException('At least one prefix is required.'); + } + + $this->prefixes = array_map(static fn (string $prefix) => new PathPrefixer($prefix, '/'), $prefixes); + } + + public function publicUrl(string $path, Config $config): string + { + $index = abs(crc32($path)) % $this->count; + + return $this->prefixes[$index]->prefixPath($path); + } +} diff --git a/core/vendor/league/flysystem/src/UrlGeneration/TemporaryUrlGenerator.php b/core/vendor/league/flysystem/src/UrlGeneration/TemporaryUrlGenerator.php new file mode 100644 index 0000000000..87074f753a --- /dev/null +++ b/core/vendor/league/flysystem/src/UrlGeneration/TemporaryUrlGenerator.php @@ -0,0 +1,16 @@ + '']; - } - - /** - * Normalize a dirname return value. - * - * @param string $dirname - * - * @return string normalized dirname - */ - public static function normalizeDirname($dirname) - { - return $dirname === '.' ? '' : $dirname; - } - - /** - * Get a normalized dirname from a path. - * - * @param string $path - * - * @return string dirname - */ - public static function dirname($path) - { - return static::normalizeDirname(dirname($path)); - } - - /** - * Map result arrays. - * - * @param array $object - * @param array $map - * - * @return array mapped result - */ - public static function map(array $object, array $map) - { - $result = []; - - foreach ($map as $from => $to) { - if ( ! isset($object[$from])) { - continue; - } - - $result[$to] = $object[$from]; - } - - return $result; - } - - /** - * Normalize path. - * - * @param string $path - * - * @throws LogicException - * - * @return string - */ - public static function normalizePath($path) - { - return static::normalizeRelativePath($path); - } - - /** - * Normalize relative directories in a path. - * - * @param string $path - * - * @throws LogicException - * - * @return string - */ - public static function normalizeRelativePath($path) - { - $path = str_replace('\\', '/', $path); - $path = static::removeFunkyWhiteSpace($path); - $parts = []; - - foreach (explode('/', $path) as $part) { - switch ($part) { - case '': - case '.': - break; - - case '..': - if (empty($parts)) { - throw new LogicException( - 'Path is outside of the defined root, path: [' . $path . ']' - ); - } - array_pop($parts); - break; - - default: - $parts[] = $part; - break; - } - } - - $path = implode('/', $parts); - - return $path; - } - - /** - * Rejects unprintable characters and invalid unicode characters. - * - * @param string $path - * - * @return string $path - */ - protected static function removeFunkyWhiteSpace($path) - { - if (preg_match('#\p{C}+#u', $path)) { - throw CorruptedPathDetected::forPath($path); - } - - return $path; - } - - /** - * Normalize prefix. - * - * @param string $prefix - * @param string $separator - * - * @return string normalized path - */ - public static function normalizePrefix($prefix, $separator) - { - return rtrim($prefix, $separator) . $separator; - } - - /** - * Get content size. - * - * @param string $contents - * - * @return int content size - */ - public static function contentSize($contents) - { - return defined('MB_OVERLOAD_STRING') ? mb_strlen($contents, '8bit') : strlen($contents); - } - - /** - * Guess MIME Type based on the path of the file and it's content. - * - * @param string $path - * @param string|resource $content - * - * @return string|null MIME Type or NULL if no extension detected - */ - public static function guessMimeType($path, $content) - { - $mimeType = MimeType::detectByContent($content); - - if ( ! (empty($mimeType) || in_array($mimeType, ['application/x-empty', 'text/plain', 'text/x-asm']))) { - return $mimeType; - } - - return MimeType::detectByFilename($path); - } - - /** - * Emulate directories. - * - * @param array $listing - * - * @return array listing with emulated directories - */ - public static function emulateDirectories(array $listing) - { - $directories = []; - $listedDirectories = []; - - foreach ($listing as $object) { - [$directories, $listedDirectories] = static::emulateObjectDirectories($object, $directories, $listedDirectories); - } - - $directories = array_diff(array_unique($directories), array_unique($listedDirectories)); - - foreach ($directories as $directory) { - $listing[] = static::pathinfo($directory) + ['type' => 'dir']; - } - - return $listing; - } - - /** - * Ensure a Config instance. - * - * @param null|array|Config $config - * - * @return Config config instance - * - * @throw LogicException - */ - public static function ensureConfig($config) - { - if ($config === null) { - return new Config(); - } - - if ($config instanceof Config) { - return $config; - } - - if (is_array($config)) { - return new Config($config); - } - - throw new LogicException('A config should either be an array or a Flysystem\Config object.'); - } - - /** - * Rewind a stream. - * - * @param resource $resource - */ - public static function rewindStream($resource) - { - if (ftell($resource) !== 0 && static::isSeekableStream($resource)) { - rewind($resource); - } - } - - public static function isSeekableStream($resource) - { - $metadata = stream_get_meta_data($resource); - - return $metadata['seekable']; - } - - /** - * Get the size of a stream. - * - * @param resource $resource - * - * @return int|null stream size - */ - public static function getStreamSize($resource) - { - $stat = fstat($resource); - - if ( ! is_array($stat) || ! isset($stat['size'])) { - return null; - } - - return $stat['size']; - } - - /** - * Emulate the directories of a single object. - * - * @param array $object - * @param array $directories - * @param array $listedDirectories - * - * @return array - */ - protected static function emulateObjectDirectories(array $object, array $directories, array $listedDirectories) - { - if ($object['type'] === 'dir') { - $listedDirectories[] = $object['path']; - } - - if ( ! isset($object['dirname']) || trim($object['dirname']) === '') { - return [$directories, $listedDirectories]; - } - - $parent = $object['dirname']; - - while (isset($parent) && trim($parent) !== '' && ! in_array($parent, $directories)) { - $directories[] = $parent; - $parent = static::dirname($parent); - } - - if (isset($object['type']) && $object['type'] === 'dir') { - $listedDirectories[] = $object['path']; - - return [$directories, $listedDirectories]; - } - - return [$directories, $listedDirectories]; - } - - /** - * Returns the trailing name component of the path. - * - * @param string $path - * - * @return string - */ - private static function basename($path) - { - $separators = DIRECTORY_SEPARATOR === '/' ? '/' : '\/'; - - $path = rtrim($path, $separators); - - $basename = preg_replace('#.*?([^' . preg_quote($separators, '#') . ']+$)#', '$1', $path); - - if (DIRECTORY_SEPARATOR === '/') { - return $basename; - } - // @codeCoverageIgnoreStart - // Extra Windows path munging. This is tested via AppVeyor, but code - // coverage is not reported. - - // Handle relative paths with drive letters. c:file.txt. - while (preg_match('#^[a-zA-Z]{1}:[^\\\/]#', $basename)) { - $basename = substr($basename, 2); - } - - // Remove colon for standalone drive letter names. - if (preg_match('#^[a-zA-Z]{1}:$#', $basename)) { - $basename = rtrim($basename, ':'); - } - - return $basename; - // @codeCoverageIgnoreEnd - } -} diff --git a/core/vendor/league/flysystem/src/Util/ContentListingFormatter.php b/core/vendor/league/flysystem/src/Util/ContentListingFormatter.php deleted file mode 100644 index ae0d3b91d2..0000000000 --- a/core/vendor/league/flysystem/src/Util/ContentListingFormatter.php +++ /dev/null @@ -1,122 +0,0 @@ -directory = rtrim($directory, '/'); - $this->recursive = $recursive; - $this->caseSensitive = $caseSensitive; - } - - /** - * Format contents listing. - * - * @param array $listing - * - * @return array - */ - public function formatListing(array $listing) - { - $listing = array_filter(array_map([$this, 'addPathInfo'], $listing), [$this, 'isEntryOutOfScope']); - - return $this->sortListing(array_values($listing)); - } - - private function addPathInfo(array $entry) - { - return $entry + Util::pathinfo($entry['path']); - } - - /** - * Determine if the entry is out of scope. - * - * @param array $entry - * - * @return bool - */ - private function isEntryOutOfScope(array $entry) - { - if (empty($entry['path']) && $entry['path'] !== '0') { - return false; - } - - if ($this->recursive) { - return $this->residesInDirectory($entry); - } - - return $this->isDirectChild($entry); - } - - /** - * Check if the entry resides within the parent directory. - * - * @param array $entry - * - * @return bool - */ - private function residesInDirectory(array $entry) - { - if ($this->directory === '') { - return true; - } - - return $this->caseSensitive - ? strpos($entry['path'], $this->directory . '/') === 0 - : stripos($entry['path'], $this->directory . '/') === 0; - } - - /** - * Check if the entry is a direct child of the directory. - * - * @param array $entry - * - * @return bool - */ - private function isDirectChild(array $entry) - { - return $this->caseSensitive - ? $entry['dirname'] === $this->directory - : strcasecmp($this->directory, $entry['dirname']) === 0; - } - - /** - * @param array $listing - * - * @return array - */ - private function sortListing(array $listing) - { - usort($listing, function ($a, $b) { - return strcasecmp($a['path'], $b['path']); - }); - - return $listing; - } -} diff --git a/core/vendor/league/flysystem/src/Util/MimeType.php b/core/vendor/league/flysystem/src/Util/MimeType.php deleted file mode 100644 index 35cba3fb87..0000000000 --- a/core/vendor/league/flysystem/src/Util/MimeType.php +++ /dev/null @@ -1,80 +0,0 @@ -detectMimeTypeFromBuffer($content); - } - - return 'text/plain'; - } - - /** - * Detects MIME Type based on file extension. - * - * @param string $extension - * - * @return string MIME Type - */ - public static function detectByFileExtension($extension) - { - return static::detector()->detectMimeTypeFromPath('artificial.' . $extension) ?: 'text/plain'; - } - - /** - * @param string $filename - * - * @return string MIME Type - */ - public static function detectByFilename($filename) - { - return static::detector()->detectMimeTypeFromPath($filename) ?: 'text/plain'; - } - - /** - * @return array Map of file extension to MIME Type - */ - public static function getExtensionToMimeTypeMap() - { - return static::$extensionToMimeTypeMap; - } -} diff --git a/core/vendor/league/flysystem/src/Util/StreamHasher.php b/core/vendor/league/flysystem/src/Util/StreamHasher.php deleted file mode 100644 index 938ec5db71..0000000000 --- a/core/vendor/league/flysystem/src/Util/StreamHasher.php +++ /dev/null @@ -1,36 +0,0 @@ -algo = $algo; - } - - /** - * @param resource $resource - * - * @return string - */ - public function hash($resource) - { - rewind($resource); - $context = hash_init($this->algo); - hash_update_stream($context, $resource); - fclose($resource); - - return hash_final($context); - } -} diff --git a/core/vendor/league/flysystem/src/Visibility.php b/core/vendor/league/flysystem/src/Visibility.php new file mode 100644 index 0000000000..071ca00008 --- /dev/null +++ b/core/vendor/league/flysystem/src/Visibility.php @@ -0,0 +1,11 @@ +rejectFunkyWhiteSpace($path); + + return $this->normalizeRelativePath($path); + } + + private function rejectFunkyWhiteSpace(string $path): void + { + if (preg_match('#\p{C}+#u', $path)) { + throw CorruptedPathDetected::forPath($path); + } + } + + private function normalizeRelativePath(string $path): string + { + $parts = []; + + foreach (explode('/', $path) as $part) { + switch ($part) { + case '': + case '.': + break; + + case '..': + if (empty($parts)) { + throw PathTraversalDetected::forPath($path); + } + array_pop($parts); + break; + + default: + $parts[] = $part; + break; + } + } + + return implode('/', $parts); + } +} diff --git a/core/vendor/league/mime-type-detection/CHANGELOG.md b/core/vendor/league/mime-type-detection/CHANGELOG.md index 2264f7ad86..653ca51813 100644 --- a/core/vendor/league/mime-type-detection/CHANGELOG.md +++ b/core/vendor/league/mime-type-detection/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## 1.13.0 - 2022-08-05 + +### Added + +- A reverse lookup mechanism to fetch one or all extensions for a given mimetype + +## 1.12.0 - 2022-08-03 + +### Updated + +- Updated lookup + +## 1.11.0 - 2022-04-17 + +### Updated + +- Updated lookup + ## 1.10.0 - 2022-04-11 ### Fixed diff --git a/core/vendor/league/mime-type-detection/LICENSE b/core/vendor/league/mime-type-detection/LICENSE index 1f01652186..39d50b5e70 100644 --- a/core/vendor/league/mime-type-detection/LICENSE +++ b/core/vendor/league/mime-type-detection/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013-2022 Frank de Jonge +Copyright (c) 2013-2023 Frank de Jonge Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/league/mime-type-detection/composer.json b/core/vendor/league/mime-type-detection/composer.json index 80ca1af810..cd75beea79 100644 --- a/core/vendor/league/mime-type-detection/composer.json +++ b/core/vendor/league/mime-type-detection/composer.json @@ -13,11 +13,11 @@ "phpstan": "vendor/bin/phpstan analyse -l 6 src" }, "require": { - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "ext-fileinfo": "*" }, "require-dev": { - "phpunit/phpunit": "^8.5.8 || ^9.3", + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0", "phpstan/phpstan": "^0.12.68", "friendsofphp/php-cs-fixer": "^3.2" }, @@ -28,7 +28,7 @@ }, "config": { "platform": { - "php": "7.2.0" + "php": "7.4.0" } } } diff --git a/core/vendor/league/mime-type-detection/src/ExtensionLookup.php b/core/vendor/league/mime-type-detection/src/ExtensionLookup.php new file mode 100644 index 0000000000..14b89df5d9 --- /dev/null +++ b/core/vendor/league/mime-type-detection/src/ExtensionLookup.php @@ -0,0 +1,14 @@ +extensions instanceof ExtensionLookup + ? $this->extensions->lookupExtension($mimetype) + : null; + } + + public function lookupAllExtensions(string $mimetype): array + { + return $this->extensions instanceof ExtensionLookup + ? $this->extensions->lookupAllExtensions($mimetype) + : []; + } } diff --git a/core/vendor/league/mime-type-detection/src/FinfoMimeTypeDetector.php b/core/vendor/league/mime-type-detection/src/FinfoMimeTypeDetector.php index ba91938f77..8084f92471 100644 --- a/core/vendor/league/mime-type-detection/src/FinfoMimeTypeDetector.php +++ b/core/vendor/league/mime-type-detection/src/FinfoMimeTypeDetector.php @@ -9,7 +9,7 @@ use const PATHINFO_EXTENSION; use finfo; -class FinfoMimeTypeDetector implements MimeTypeDetector +class FinfoMimeTypeDetector implements MimeTypeDetector, ExtensionLookup { private const INCONCLUSIVE_MIME_TYPES = [ 'application/x-empty', @@ -89,4 +89,18 @@ private function takeSample(string $contents): string return (string) substr($contents, 0, $this->bufferSampleSize); } + + public function lookupExtension(string $mimetype): ?string + { + return $this->extensionMap instanceof ExtensionLookup + ? $this->extensionMap->lookupExtension($mimetype) + : null; + } + + public function lookupAllExtensions(string $mimetype): array + { + return $this->extensionMap instanceof ExtensionLookup + ? $this->extensionMap->lookupAllExtensions($mimetype) + : []; + } } diff --git a/core/vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php b/core/vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php index f092388dd5..72f515fbcf 100644 --- a/core/vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php +++ b/core/vendor/league/mime-type-detection/src/GeneratedExtensionToMimeTypeMap.php @@ -4,10 +4,10 @@ namespace League\MimeTypeDetection; -class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap +class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap, ExtensionLookup { /** - * @var string[] + * @var array * * @internal */ @@ -23,7 +23,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap '7zip' => 'application/x-7z-compressed', '123' => 'application/vnd.lotus-1-2-3', 'aab' => 'application/x-authorware-bin', - 'aac' => 'audio/x-acc', + 'aac' => 'audio/acc', 'aam' => 'application/x-authorware-map', 'aas' => 'application/x-authorware-seg', 'abw' => 'application/x-abiword', @@ -34,6 +34,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'acu' => 'application/vnd.acucobol', 'acutc' => 'application/vnd.acucorp', 'adp' => 'audio/adpcm', + 'adts' => 'audio/aac', 'aep' => 'application/vnd.audiograph', 'afm' => 'application/x-font-type1', 'afp' => 'application/vnd.ibm.modcap', @@ -46,11 +47,16 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'air' => 'application/vnd.adobe.air-application-installer-package+zip', 'ait' => 'application/vnd.dvb.ait', 'ami' => 'application/vnd.amiga.ami', + 'aml' => 'application/automationml-aml+xml', + 'amlx' => 'application/automationml-amlx+zip', 'amr' => 'audio/amr', 'apk' => 'application/vnd.android.package-archive', 'apng' => 'image/apng', 'appcache' => 'text/cache-manifest', + 'appinstaller' => 'application/appinstaller', 'application' => 'application/x-ms-application', + 'appx' => 'application/appx', + 'appxbundle' => 'application/appxbundle', 'apr' => 'application/vnd.lotus-approach', 'arc' => 'application/x-freearc', 'arj' => 'application/x-arj', @@ -95,6 +101,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'bpk' => 'application/octet-stream', 'bpmn' => 'application/octet-stream', 'bsp' => 'model/vnd.valve.source.compiled-map', + 'btf' => 'image/prs.btif', 'btif' => 'image/prs.btif', 'buffer' => 'application/octet-stream', 'bz' => 'application/x-bzip', @@ -146,6 +153,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'cjs' => 'application/node', 'cla' => 'application/vnd.claymore', 'class' => 'application/octet-stream', + 'cld' => 'model/vnd.cld', 'clkk' => 'application/vnd.crick.clicker.keyboard', 'clkp' => 'application/vnd.crick.clicker.palette', 'clkt' => 'application/vnd.crick.clicker.template', @@ -180,6 +188,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'csv' => 'text/csv', 'cu' => 'application/cu-seeme', 'curl' => 'text/vnd.curl', + 'cwl' => 'application/cwl', 'cww' => 'application/prs.cww', 'cxt' => 'application/x-director', 'cxx' => 'text/x-c', @@ -202,6 +211,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'der' => 'application/x-x509-ca-cert', 'dfac' => 'application/vnd.dreamfactory', 'dgc' => 'application/x-dgc-compressed', + 'dib' => 'image/bmp', 'dic' => 'text/x-c', 'dir' => 'application/x-director', 'dis' => 'application/vnd.mobius.dis', @@ -224,6 +234,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', 'dp' => 'application/vnd.osgi.dp', 'dpg' => 'application/vnd.dpgraph', + 'dpx' => 'image/dpx', 'dra' => 'audio/vnd.dra', 'drle' => 'image/dicom-rle', 'dsc' => 'text/prs.lines.tag', @@ -260,7 +271,6 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'eot' => 'application/vnd.ms-fontobject', 'eps' => 'application/postscript', 'epub' => 'application/epub+zip', - 'es' => 'application/ecmascript', 'es3' => 'application/vnd.eszigno3+xml', 'esa' => 'application/vnd.osgi.subsystem', 'esf' => 'application/vnd.epson.esf', @@ -453,6 +463,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'jsonld' => 'application/ld+json', 'jsonml' => 'application/jsonml+json', 'jsx' => 'text/jsx', + 'jt' => 'model/jt', 'jxr' => 'image/jxr', 'jxra' => 'image/jxra', 'jxrs' => 'image/jxrs', @@ -557,7 +568,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'mime' => 'message/rfc822', 'mj2' => 'video/mj2', 'mjp2' => 'video/mj2', - 'mjs' => 'application/javascript', + 'mjs' => 'text/javascript', 'mk3d' => 'video/x-matroska', 'mka' => 'audio/x-matroska', 'mkd' => 'text/x-markdown', @@ -607,6 +618,8 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'msg' => 'application/vnd.ms-outlook', 'msh' => 'model/mesh', 'msi' => 'application/x-msdownload', + 'msix' => 'application/msix', + 'msixbundle' => 'application/msixbundle', 'msl' => 'application/vnd.mobius.msl', 'msm' => 'application/octet-stream', 'msp' => 'application/octet-stream', @@ -780,6 +793,8 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'pvb' => 'application/vnd.3gpp.pic-bw-var', 'pwn' => 'application/vnd.3m.post-it-notes', 'pya' => 'audio/vnd.ms-playready.media.pya', + 'pyo' => 'model/vnd.pytha.pyox', + 'pyox' => 'model/vnd.pytha.pyox', 'pyv' => 'video/vnd.ms-playready.media.pyv', 'qam' => 'application/vnd.epson.quickanime', 'qbo' => 'application/vnd.intu.qbo', @@ -928,10 +943,12 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'st' => 'application/vnd.sailingtracker.track', 'stc' => 'application/vnd.sun.xml.calc.template', 'std' => 'application/vnd.sun.xml.draw.template', + 'step' => 'application/STEP', 'stf' => 'application/vnd.wt.stf', 'sti' => 'application/vnd.sun.xml.impress.template', 'stk' => 'application/hyperstudio', 'stl' => 'model/stl', + 'stp' => 'application/STEP', 'stpx' => 'model/step+xml', 'stpxz' => 'model/step-xml+zip', 'stpz' => 'model/step+zip', @@ -1018,10 +1035,12 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'ulx' => 'application/x-glulx', 'umj' => 'application/vnd.umajin', 'unityweb' => 'application/vnd.unity', + 'uo' => 'application/vnd.uoml+xml', 'uoml' => 'application/vnd.uoml+xml', 'uri' => 'text/uri-list', 'uris' => 'text/uri-list', 'urls' => 'text/uri-list', + 'usda' => 'model/vnd.usda', 'usdz' => 'model/vnd.usdz+zip', 'ustar' => 'application/x-ustar', 'utz' => 'application/vnd.uiq.theme', @@ -1101,6 +1120,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'webmanifest' => 'application/manifest+json', 'webp' => 'image/webp', 'wg' => 'application/vnd.pmi.widget', + 'wgsl' => 'text/wgsl', 'wgt' => 'application/widget', 'wif' => 'application/watcherinfo+xml', 'wks' => 'application/vnd.ms-works', @@ -1155,9 +1175,10 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'xel' => 'application/xcap-el+xml', 'xenc' => 'application/xenc+xml', 'xer' => 'application/patch-ops-error+xml', - 'xfdf' => 'application/vnd.adobe.xfdf', + 'xfdf' => 'application/xfdf', 'xfdl' => 'application/vnd.xfdl', 'xht' => 'application/xhtml+xml', + 'xhtm' => 'application/vnd.pwg-xhtml-print+xml', 'xhtml' => 'application/xhtml+xml', 'xhvml' => 'application/xv+xml', 'xif' => 'image/vnd.xiff', @@ -1188,6 +1209,7 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'xpw' => 'application/vnd.intercon.formnet', 'xpx' => 'application/vnd.intercon.formnet', 'xsd' => 'application/xml', + 'xsf' => 'application/prs.xsf+xml', 'xsl' => 'application/xml', 'xslt' => 'application/xslt+xml', 'xsm' => 'application/vnd.syncml+xml', @@ -1220,8 +1242,1050 @@ class GeneratedExtensionToMimeTypeMap implements ExtensionToMimeTypeMap 'zsh' => 'text/x-scriptzsh', ]; + /** + * @var array + * + * @internal + */ + public const EXTENSIONS_FOR_MIME_TIMES = [ + 'application/andrew-inset' => ['ez'], + 'application/appinstaller' => ['appinstaller'], + 'application/applixware' => ['aw'], + 'application/appx' => ['appx'], + 'application/appxbundle' => ['appxbundle'], + 'application/atom+xml' => ['atom'], + 'application/atomcat+xml' => ['atomcat'], + 'application/atomdeleted+xml' => ['atomdeleted'], + 'application/atomsvc+xml' => ['atomsvc'], + 'application/atsc-dwd+xml' => ['dwd'], + 'application/atsc-held+xml' => ['held'], + 'application/atsc-rsat+xml' => ['rsat'], + 'application/automationml-aml+xml' => ['aml'], + 'application/automationml-amlx+zip' => ['amlx'], + 'application/bdoc' => ['bdoc'], + 'application/calendar+xml' => ['xcs'], + 'application/ccxml+xml' => ['ccxml'], + 'application/cdfx+xml' => ['cdfx'], + 'application/cdmi-capability' => ['cdmia'], + 'application/cdmi-container' => ['cdmic'], + 'application/cdmi-domain' => ['cdmid'], + 'application/cdmi-object' => ['cdmio'], + 'application/cdmi-queue' => ['cdmiq'], + 'application/cpl+xml' => ['cpl'], + 'application/cu-seeme' => ['cu'], + 'application/cwl' => ['cwl'], + 'application/dash+xml' => ['mpd'], + 'application/dash-patch+xml' => ['mpp'], + 'application/davmount+xml' => ['davmount'], + 'application/docbook+xml' => ['dbk'], + 'application/dssc+der' => ['dssc'], + 'application/dssc+xml' => ['xdssc'], + 'application/ecmascript' => ['ecma'], + 'application/emma+xml' => ['emma'], + 'application/emotionml+xml' => ['emotionml'], + 'application/epub+zip' => ['epub'], + 'application/exi' => ['exi'], + 'application/express' => ['exp'], + 'application/fdf' => ['fdf'], + 'application/fdt+xml' => ['fdt'], + 'application/font-tdpfr' => ['pfr'], + 'application/geo+json' => ['geojson'], + 'application/gml+xml' => ['gml'], + 'application/gpx+xml' => ['gpx'], + 'application/gxf' => ['gxf'], + 'application/gzip' => ['gz', 'gzip'], + 'application/hjson' => ['hjson'], + 'application/hyperstudio' => ['stk'], + 'application/inkml+xml' => ['ink', 'inkml'], + 'application/ipfix' => ['ipfix'], + 'application/its+xml' => ['its'], + 'application/java-archive' => ['jar', 'war', 'ear'], + 'application/java-serialized-object' => ['ser'], + 'application/java-vm' => ['class'], + 'application/javascript' => ['js'], + 'application/json' => ['json', 'map'], + 'application/json5' => ['json5'], + 'application/jsonml+json' => ['jsonml'], + 'application/ld+json' => ['jsonld'], + 'application/lgr+xml' => ['lgr'], + 'application/lost+xml' => ['lostxml'], + 'application/mac-binhex40' => ['hqx'], + 'application/mac-compactpro' => ['cpt'], + 'application/mads+xml' => ['mads'], + 'application/manifest+json' => ['webmanifest'], + 'application/marc' => ['mrc'], + 'application/marcxml+xml' => ['mrcx'], + 'application/mathematica' => ['ma', 'nb', 'mb'], + 'application/mathml+xml' => ['mathml'], + 'application/mbox' => ['mbox'], + 'application/media-policy-dataset+xml' => ['mpf'], + 'application/mediaservercontrol+xml' => ['mscml'], + 'application/metalink+xml' => ['metalink'], + 'application/metalink4+xml' => ['meta4'], + 'application/mets+xml' => ['mets'], + 'application/mmt-aei+xml' => ['maei'], + 'application/mmt-usd+xml' => ['musd'], + 'application/mods+xml' => ['mods'], + 'application/mp21' => ['m21', 'mp21'], + 'application/mp4' => ['mp4', 'mpg4', 'mp4s', 'm4p'], + 'application/msix' => ['msix'], + 'application/msixbundle' => ['msixbundle'], + 'application/msword' => ['doc', 'dot', 'word'], + 'application/mxf' => ['mxf'], + 'application/n-quads' => ['nq'], + 'application/n-triples' => ['nt'], + 'application/node' => ['cjs'], + 'application/octet-stream' => ['bin', 'dms', 'lrf', 'mar', 'so', 'dist', 'distz', 'pkg', 'bpk', 'dump', 'elc', 'deploy', 'exe', 'dll', 'deb', 'dmg', 'iso', 'img', 'msi', 'msp', 'msm', 'buffer', 'phar', 'lha', 'lzh', 'class', 'sea', 'dmn', 'bpmn', 'kdb', 'sst', 'csr'], + 'application/oda' => ['oda'], + 'application/oebps-package+xml' => ['opf'], + 'application/ogg' => ['ogx'], + 'application/omdoc+xml' => ['omdoc'], + 'application/onenote' => ['onetoc', 'onetoc2', 'onetmp', 'onepkg'], + 'application/oxps' => ['oxps'], + 'application/p2p-overlay+xml' => ['relo'], + 'application/patch-ops-error+xml' => ['xer'], + 'application/pdf' => ['pdf', 'ai'], + 'application/pgp-encrypted' => ['pgp'], + 'application/pgp-keys' => ['asc'], + 'application/pgp-signature' => ['sig', 'asc'], + 'application/pics-rules' => ['prf'], + 'application/pkcs10' => ['p10'], + 'application/pkcs7-mime' => ['p7m', 'p7c'], + 'application/pkcs7-signature' => ['p7s'], + 'application/pkcs8' => ['p8'], + 'application/pkix-attr-cert' => ['ac'], + 'application/pkix-cert' => ['cer'], + 'application/pkix-crl' => ['crl'], + 'application/pkix-pkipath' => ['pkipath'], + 'application/pkixcmp' => ['pki'], + 'application/pls+xml' => ['pls'], + 'application/postscript' => ['ai', 'eps', 'ps'], + 'application/provenance+xml' => ['provx'], + 'application/prs.cww' => ['cww'], + 'application/prs.xsf+xml' => ['xsf'], + 'application/pskc+xml' => ['pskcxml'], + 'application/raml+yaml' => ['raml'], + 'application/rdf+xml' => ['rdf', 'owl'], + 'application/reginfo+xml' => ['rif'], + 'application/relax-ng-compact-syntax' => ['rnc'], + 'application/resource-lists+xml' => ['rl'], + 'application/resource-lists-diff+xml' => ['rld'], + 'application/rls-services+xml' => ['rs'], + 'application/route-apd+xml' => ['rapd'], + 'application/route-s-tsid+xml' => ['sls'], + 'application/route-usd+xml' => ['rusd'], + 'application/rpki-ghostbusters' => ['gbr'], + 'application/rpki-manifest' => ['mft'], + 'application/rpki-roa' => ['roa'], + 'application/rsd+xml' => ['rsd'], + 'application/rss+xml' => ['rss'], + 'application/rtf' => ['rtf'], + 'application/sbml+xml' => ['sbml'], + 'application/scvp-cv-request' => ['scq'], + 'application/scvp-cv-response' => ['scs'], + 'application/scvp-vp-request' => ['spq'], + 'application/scvp-vp-response' => ['spp'], + 'application/sdp' => ['sdp'], + 'application/senml+xml' => ['senmlx'], + 'application/sensml+xml' => ['sensmlx'], + 'application/set-payment-initiation' => ['setpay'], + 'application/set-registration-initiation' => ['setreg'], + 'application/shf+xml' => ['shf'], + 'application/sieve' => ['siv', 'sieve'], + 'application/smil+xml' => ['smi', 'smil'], + 'application/sparql-query' => ['rq'], + 'application/sparql-results+xml' => ['srx'], + 'application/sql' => ['sql'], + 'application/srgs' => ['gram'], + 'application/srgs+xml' => ['grxml'], + 'application/sru+xml' => ['sru'], + 'application/ssdl+xml' => ['ssdl'], + 'application/ssml+xml' => ['ssml'], + 'application/swid+xml' => ['swidtag'], + 'application/tei+xml' => ['tei', 'teicorpus'], + 'application/thraud+xml' => ['tfi'], + 'application/timestamped-data' => ['tsd'], + 'application/toml' => ['toml'], + 'application/trig' => ['trig'], + 'application/ttml+xml' => ['ttml'], + 'application/ubjson' => ['ubj'], + 'application/urc-ressheet+xml' => ['rsheet'], + 'application/urc-targetdesc+xml' => ['td'], + 'application/vnd.1000minds.decision-model+xml' => ['1km'], + 'application/vnd.3gpp.pic-bw-large' => ['plb'], + 'application/vnd.3gpp.pic-bw-small' => ['psb'], + 'application/vnd.3gpp.pic-bw-var' => ['pvb'], + 'application/vnd.3gpp2.tcap' => ['tcap'], + 'application/vnd.3m.post-it-notes' => ['pwn'], + 'application/vnd.accpac.simply.aso' => ['aso'], + 'application/vnd.accpac.simply.imp' => ['imp'], + 'application/vnd.acucobol' => ['acu'], + 'application/vnd.acucorp' => ['atc', 'acutc'], + 'application/vnd.adobe.air-application-installer-package+zip' => ['air'], + 'application/vnd.adobe.formscentral.fcdt' => ['fcdt'], + 'application/vnd.adobe.fxp' => ['fxp', 'fxpl'], + 'application/vnd.adobe.xdp+xml' => ['xdp'], + 'application/vnd.adobe.xfdf' => ['xfdf'], + 'application/vnd.age' => ['age'], + 'application/vnd.ahead.space' => ['ahead'], + 'application/vnd.airzip.filesecure.azf' => ['azf'], + 'application/vnd.airzip.filesecure.azs' => ['azs'], + 'application/vnd.amazon.ebook' => ['azw'], + 'application/vnd.americandynamics.acc' => ['acc'], + 'application/vnd.amiga.ami' => ['ami'], + 'application/vnd.android.package-archive' => ['apk'], + 'application/vnd.anser-web-certificate-issue-initiation' => ['cii'], + 'application/vnd.anser-web-funds-transfer-initiation' => ['fti'], + 'application/vnd.antix.game-component' => ['atx'], + 'application/vnd.apple.installer+xml' => ['mpkg'], + 'application/vnd.apple.keynote' => ['key'], + 'application/vnd.apple.mpegurl' => ['m3u8'], + 'application/vnd.apple.numbers' => ['numbers'], + 'application/vnd.apple.pages' => ['pages'], + 'application/vnd.apple.pkpass' => ['pkpass'], + 'application/vnd.aristanetworks.swi' => ['swi'], + 'application/vnd.astraea-software.iota' => ['iota'], + 'application/vnd.audiograph' => ['aep'], + 'application/vnd.balsamiq.bmml+xml' => ['bmml'], + 'application/vnd.blueice.multipass' => ['mpm'], + 'application/vnd.bmi' => ['bmi'], + 'application/vnd.businessobjects' => ['rep'], + 'application/vnd.chemdraw+xml' => ['cdxml'], + 'application/vnd.chipnuts.karaoke-mmd' => ['mmd'], + 'application/vnd.cinderella' => ['cdy'], + 'application/vnd.citationstyles.style+xml' => ['csl'], + 'application/vnd.claymore' => ['cla'], + 'application/vnd.cloanto.rp9' => ['rp9'], + 'application/vnd.clonk.c4group' => ['c4g', 'c4d', 'c4f', 'c4p', 'c4u'], + 'application/vnd.cluetrust.cartomobile-config' => ['c11amc'], + 'application/vnd.cluetrust.cartomobile-config-pkg' => ['c11amz'], + 'application/vnd.commonspace' => ['csp'], + 'application/vnd.contact.cmsg' => ['cdbcmsg'], + 'application/vnd.cosmocaller' => ['cmc'], + 'application/vnd.crick.clicker' => ['clkx'], + 'application/vnd.crick.clicker.keyboard' => ['clkk'], + 'application/vnd.crick.clicker.palette' => ['clkp'], + 'application/vnd.crick.clicker.template' => ['clkt'], + 'application/vnd.crick.clicker.wordbank' => ['clkw'], + 'application/vnd.criticaltools.wbs+xml' => ['wbs'], + 'application/vnd.ctc-posml' => ['pml'], + 'application/vnd.cups-ppd' => ['ppd'], + 'application/vnd.curl.car' => ['car'], + 'application/vnd.curl.pcurl' => ['pcurl'], + 'application/vnd.dart' => ['dart'], + 'application/vnd.data-vision.rdz' => ['rdz'], + 'application/vnd.dbf' => ['dbf'], + 'application/vnd.dece.data' => ['uvf', 'uvvf', 'uvd', 'uvvd'], + 'application/vnd.dece.ttml+xml' => ['uvt', 'uvvt'], + 'application/vnd.dece.unspecified' => ['uvx', 'uvvx'], + 'application/vnd.dece.zip' => ['uvz', 'uvvz'], + 'application/vnd.denovo.fcselayout-link' => ['fe_launch'], + 'application/vnd.dna' => ['dna'], + 'application/vnd.dolby.mlp' => ['mlp'], + 'application/vnd.dpgraph' => ['dpg'], + 'application/vnd.dreamfactory' => ['dfac'], + 'application/vnd.ds-keypoint' => ['kpxx'], + 'application/vnd.dvb.ait' => ['ait'], + 'application/vnd.dvb.service' => ['svc'], + 'application/vnd.dynageo' => ['geo'], + 'application/vnd.ecowin.chart' => ['mag'], + 'application/vnd.enliven' => ['nml'], + 'application/vnd.epson.esf' => ['esf'], + 'application/vnd.epson.msf' => ['msf'], + 'application/vnd.epson.quickanime' => ['qam'], + 'application/vnd.epson.salt' => ['slt'], + 'application/vnd.epson.ssf' => ['ssf'], + 'application/vnd.eszigno3+xml' => ['es3', 'et3'], + 'application/vnd.ezpix-album' => ['ez2'], + 'application/vnd.ezpix-package' => ['ez3'], + 'application/vnd.fdf' => ['fdf'], + 'application/vnd.fdsn.mseed' => ['mseed'], + 'application/vnd.fdsn.seed' => ['seed', 'dataless'], + 'application/vnd.flographit' => ['gph'], + 'application/vnd.fluxtime.clip' => ['ftc'], + 'application/vnd.framemaker' => ['fm', 'frame', 'maker', 'book'], + 'application/vnd.frogans.fnc' => ['fnc'], + 'application/vnd.frogans.ltf' => ['ltf'], + 'application/vnd.fsc.weblaunch' => ['fsc'], + 'application/vnd.fujitsu.oasys' => ['oas'], + 'application/vnd.fujitsu.oasys2' => ['oa2'], + 'application/vnd.fujitsu.oasys3' => ['oa3'], + 'application/vnd.fujitsu.oasysgp' => ['fg5'], + 'application/vnd.fujitsu.oasysprs' => ['bh2'], + 'application/vnd.fujixerox.ddd' => ['ddd'], + 'application/vnd.fujixerox.docuworks' => ['xdw'], + 'application/vnd.fujixerox.docuworks.binder' => ['xbd'], + 'application/vnd.fuzzysheet' => ['fzs'], + 'application/vnd.genomatix.tuxedo' => ['txd'], + 'application/vnd.geogebra.file' => ['ggb'], + 'application/vnd.geogebra.tool' => ['ggt'], + 'application/vnd.geometry-explorer' => ['gex', 'gre'], + 'application/vnd.geonext' => ['gxt'], + 'application/vnd.geoplan' => ['g2w'], + 'application/vnd.geospace' => ['g3w'], + 'application/vnd.gmx' => ['gmx'], + 'application/vnd.google-apps.document' => ['gdoc'], + 'application/vnd.google-apps.presentation' => ['gslides'], + 'application/vnd.google-apps.spreadsheet' => ['gsheet'], + 'application/vnd.google-earth.kml+xml' => ['kml'], + 'application/vnd.google-earth.kmz' => ['kmz'], + 'application/vnd.grafeq' => ['gqf', 'gqs'], + 'application/vnd.groove-account' => ['gac'], + 'application/vnd.groove-help' => ['ghf'], + 'application/vnd.groove-identity-message' => ['gim'], + 'application/vnd.groove-injector' => ['grv'], + 'application/vnd.groove-tool-message' => ['gtm'], + 'application/vnd.groove-tool-template' => ['tpl'], + 'application/vnd.groove-vcard' => ['vcg'], + 'application/vnd.hal+xml' => ['hal'], + 'application/vnd.handheld-entertainment+xml' => ['zmm'], + 'application/vnd.hbci' => ['hbci'], + 'application/vnd.hhe.lesson-player' => ['les'], + 'application/vnd.hp-hpgl' => ['hpgl'], + 'application/vnd.hp-hpid' => ['hpid'], + 'application/vnd.hp-hps' => ['hps'], + 'application/vnd.hp-jlyt' => ['jlt'], + 'application/vnd.hp-pcl' => ['pcl'], + 'application/vnd.hp-pclxl' => ['pclxl'], + 'application/vnd.hydrostatix.sof-data' => ['sfd-hdstx'], + 'application/vnd.ibm.minipay' => ['mpy'], + 'application/vnd.ibm.modcap' => ['afp', 'listafp', 'list3820'], + 'application/vnd.ibm.rights-management' => ['irm'], + 'application/vnd.ibm.secure-container' => ['sc'], + 'application/vnd.iccprofile' => ['icc', 'icm'], + 'application/vnd.igloader' => ['igl'], + 'application/vnd.immervision-ivp' => ['ivp'], + 'application/vnd.immervision-ivu' => ['ivu'], + 'application/vnd.insors.igm' => ['igm'], + 'application/vnd.intercon.formnet' => ['xpw', 'xpx'], + 'application/vnd.intergeo' => ['i2g'], + 'application/vnd.intu.qbo' => ['qbo'], + 'application/vnd.intu.qfx' => ['qfx'], + 'application/vnd.ipunplugged.rcprofile' => ['rcprofile'], + 'application/vnd.irepository.package+xml' => ['irp'], + 'application/vnd.is-xpr' => ['xpr'], + 'application/vnd.isac.fcs' => ['fcs'], + 'application/vnd.jam' => ['jam'], + 'application/vnd.jcp.javame.midlet-rms' => ['rms'], + 'application/vnd.jisp' => ['jisp'], + 'application/vnd.joost.joda-archive' => ['joda'], + 'application/vnd.kahootz' => ['ktz', 'ktr'], + 'application/vnd.kde.karbon' => ['karbon'], + 'application/vnd.kde.kchart' => ['chrt'], + 'application/vnd.kde.kformula' => ['kfo'], + 'application/vnd.kde.kivio' => ['flw'], + 'application/vnd.kde.kontour' => ['kon'], + 'application/vnd.kde.kpresenter' => ['kpr', 'kpt'], + 'application/vnd.kde.kspread' => ['ksp'], + 'application/vnd.kde.kword' => ['kwd', 'kwt'], + 'application/vnd.kenameaapp' => ['htke'], + 'application/vnd.kidspiration' => ['kia'], + 'application/vnd.kinar' => ['kne', 'knp'], + 'application/vnd.koan' => ['skp', 'skd', 'skt', 'skm'], + 'application/vnd.kodak-descriptor' => ['sse'], + 'application/vnd.las.las+xml' => ['lasxml'], + 'application/vnd.llamagraphics.life-balance.desktop' => ['lbd'], + 'application/vnd.llamagraphics.life-balance.exchange+xml' => ['lbe'], + 'application/vnd.lotus-1-2-3' => ['123'], + 'application/vnd.lotus-approach' => ['apr'], + 'application/vnd.lotus-freelance' => ['pre'], + 'application/vnd.lotus-notes' => ['nsf'], + 'application/vnd.lotus-organizer' => ['org'], + 'application/vnd.lotus-screencam' => ['scm'], + 'application/vnd.lotus-wordpro' => ['lwp'], + 'application/vnd.macports.portpkg' => ['portpkg'], + 'application/vnd.mapbox-vector-tile' => ['mvt'], + 'application/vnd.mcd' => ['mcd'], + 'application/vnd.medcalcdata' => ['mc1'], + 'application/vnd.mediastation.cdkey' => ['cdkey'], + 'application/vnd.mfer' => ['mwf'], + 'application/vnd.mfmp' => ['mfm'], + 'application/vnd.micrografx.flo' => ['flo'], + 'application/vnd.micrografx.igx' => ['igx'], + 'application/vnd.mif' => ['mif'], + 'application/vnd.mobius.daf' => ['daf'], + 'application/vnd.mobius.dis' => ['dis'], + 'application/vnd.mobius.mbk' => ['mbk'], + 'application/vnd.mobius.mqy' => ['mqy'], + 'application/vnd.mobius.msl' => ['msl'], + 'application/vnd.mobius.plc' => ['plc'], + 'application/vnd.mobius.txf' => ['txf'], + 'application/vnd.mophun.application' => ['mpn'], + 'application/vnd.mophun.certificate' => ['mpc'], + 'application/vnd.mozilla.xul+xml' => ['xul'], + 'application/vnd.ms-artgalry' => ['cil'], + 'application/vnd.ms-cab-compressed' => ['cab'], + 'application/vnd.ms-excel' => ['xls', 'xlm', 'xla', 'xlc', 'xlt', 'xlw'], + 'application/vnd.ms-excel.addin.macroenabled.12' => ['xlam'], + 'application/vnd.ms-excel.sheet.binary.macroenabled.12' => ['xlsb'], + 'application/vnd.ms-excel.sheet.macroenabled.12' => ['xlsm'], + 'application/vnd.ms-excel.template.macroenabled.12' => ['xltm'], + 'application/vnd.ms-fontobject' => ['eot'], + 'application/vnd.ms-htmlhelp' => ['chm'], + 'application/vnd.ms-ims' => ['ims'], + 'application/vnd.ms-lrm' => ['lrm'], + 'application/vnd.ms-officetheme' => ['thmx'], + 'application/vnd.ms-outlook' => ['msg'], + 'application/vnd.ms-pki.seccat' => ['cat'], + 'application/vnd.ms-pki.stl' => ['stl'], + 'application/vnd.ms-powerpoint' => ['ppt', 'pps', 'pot', 'ppa'], + 'application/vnd.ms-powerpoint.addin.macroenabled.12' => ['ppam'], + 'application/vnd.ms-powerpoint.presentation.macroenabled.12' => ['pptm'], + 'application/vnd.ms-powerpoint.slide.macroenabled.12' => ['sldm'], + 'application/vnd.ms-powerpoint.slideshow.macroenabled.12' => ['ppsm'], + 'application/vnd.ms-powerpoint.template.macroenabled.12' => ['potm'], + 'application/vnd.ms-project' => ['mpp', 'mpt'], + 'application/vnd.ms-word.document.macroenabled.12' => ['docm'], + 'application/vnd.ms-word.template.macroenabled.12' => ['dotm'], + 'application/vnd.ms-works' => ['wps', 'wks', 'wcm', 'wdb'], + 'application/vnd.ms-wpl' => ['wpl'], + 'application/vnd.ms-xpsdocument' => ['xps'], + 'application/vnd.mseq' => ['mseq'], + 'application/vnd.musician' => ['mus'], + 'application/vnd.muvee.style' => ['msty'], + 'application/vnd.mynfc' => ['taglet'], + 'application/vnd.neurolanguage.nlu' => ['nlu'], + 'application/vnd.nitf' => ['ntf', 'nitf'], + 'application/vnd.noblenet-directory' => ['nnd'], + 'application/vnd.noblenet-sealer' => ['nns'], + 'application/vnd.noblenet-web' => ['nnw'], + 'application/vnd.nokia.n-gage.ac+xml' => ['ac'], + 'application/vnd.nokia.n-gage.data' => ['ngdat'], + 'application/vnd.nokia.n-gage.symbian.install' => ['n-gage'], + 'application/vnd.nokia.radio-preset' => ['rpst'], + 'application/vnd.nokia.radio-presets' => ['rpss'], + 'application/vnd.novadigm.edm' => ['edm'], + 'application/vnd.novadigm.edx' => ['edx'], + 'application/vnd.novadigm.ext' => ['ext'], + 'application/vnd.oasis.opendocument.chart' => ['odc'], + 'application/vnd.oasis.opendocument.chart-template' => ['otc'], + 'application/vnd.oasis.opendocument.database' => ['odb'], + 'application/vnd.oasis.opendocument.formula' => ['odf'], + 'application/vnd.oasis.opendocument.formula-template' => ['odft'], + 'application/vnd.oasis.opendocument.graphics' => ['odg'], + 'application/vnd.oasis.opendocument.graphics-template' => ['otg'], + 'application/vnd.oasis.opendocument.image' => ['odi'], + 'application/vnd.oasis.opendocument.image-template' => ['oti'], + 'application/vnd.oasis.opendocument.presentation' => ['odp'], + 'application/vnd.oasis.opendocument.presentation-template' => ['otp'], + 'application/vnd.oasis.opendocument.spreadsheet' => ['ods'], + 'application/vnd.oasis.opendocument.spreadsheet-template' => ['ots'], + 'application/vnd.oasis.opendocument.text' => ['odt'], + 'application/vnd.oasis.opendocument.text-master' => ['odm'], + 'application/vnd.oasis.opendocument.text-template' => ['ott'], + 'application/vnd.oasis.opendocument.text-web' => ['oth'], + 'application/vnd.olpc-sugar' => ['xo'], + 'application/vnd.oma.dd2+xml' => ['dd2'], + 'application/vnd.openblox.game+xml' => ['obgx'], + 'application/vnd.openofficeorg.extension' => ['oxt'], + 'application/vnd.openstreetmap.data+xml' => ['osm'], + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => ['pptx'], + 'application/vnd.openxmlformats-officedocument.presentationml.slide' => ['sldx'], + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' => ['ppsx'], + 'application/vnd.openxmlformats-officedocument.presentationml.template' => ['potx'], + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => ['xlsx'], + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' => ['xltx'], + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => ['docx'], + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' => ['dotx'], + 'application/vnd.osgeo.mapguide.package' => ['mgp'], + 'application/vnd.osgi.dp' => ['dp'], + 'application/vnd.osgi.subsystem' => ['esa'], + 'application/vnd.palm' => ['pdb', 'pqa', 'oprc'], + 'application/vnd.pawaafile' => ['paw'], + 'application/vnd.pg.format' => ['str'], + 'application/vnd.pg.osasli' => ['ei6'], + 'application/vnd.picsel' => ['efif'], + 'application/vnd.pmi.widget' => ['wg'], + 'application/vnd.pocketlearn' => ['plf'], + 'application/vnd.powerbuilder6' => ['pbd'], + 'application/vnd.previewsystems.box' => ['box'], + 'application/vnd.proteus.magazine' => ['mgz'], + 'application/vnd.publishare-delta-tree' => ['qps'], + 'application/vnd.pvi.ptid1' => ['ptid'], + 'application/vnd.pwg-xhtml-print+xml' => ['xhtm'], + 'application/vnd.quark.quarkxpress' => ['qxd', 'qxt', 'qwd', 'qwt', 'qxl', 'qxb'], + 'application/vnd.rar' => ['rar'], + 'application/vnd.realvnc.bed' => ['bed'], + 'application/vnd.recordare.musicxml' => ['mxl'], + 'application/vnd.recordare.musicxml+xml' => ['musicxml'], + 'application/vnd.rig.cryptonote' => ['cryptonote'], + 'application/vnd.rim.cod' => ['cod'], + 'application/vnd.rn-realmedia' => ['rm'], + 'application/vnd.rn-realmedia-vbr' => ['rmvb'], + 'application/vnd.route66.link66+xml' => ['link66'], + 'application/vnd.sailingtracker.track' => ['st'], + 'application/vnd.seemail' => ['see'], + 'application/vnd.sema' => ['sema'], + 'application/vnd.semd' => ['semd'], + 'application/vnd.semf' => ['semf'], + 'application/vnd.shana.informed.formdata' => ['ifm'], + 'application/vnd.shana.informed.formtemplate' => ['itp'], + 'application/vnd.shana.informed.interchange' => ['iif'], + 'application/vnd.shana.informed.package' => ['ipk'], + 'application/vnd.simtech-mindmapper' => ['twd', 'twds'], + 'application/vnd.smaf' => ['mmf'], + 'application/vnd.smart.teacher' => ['teacher'], + 'application/vnd.software602.filler.form+xml' => ['fo'], + 'application/vnd.solent.sdkm+xml' => ['sdkm', 'sdkd'], + 'application/vnd.spotfire.dxp' => ['dxp'], + 'application/vnd.spotfire.sfs' => ['sfs'], + 'application/vnd.stardivision.calc' => ['sdc'], + 'application/vnd.stardivision.draw' => ['sda'], + 'application/vnd.stardivision.impress' => ['sdd'], + 'application/vnd.stardivision.math' => ['smf'], + 'application/vnd.stardivision.writer' => ['sdw', 'vor'], + 'application/vnd.stardivision.writer-global' => ['sgl'], + 'application/vnd.stepmania.package' => ['smzip'], + 'application/vnd.stepmania.stepchart' => ['sm'], + 'application/vnd.sun.wadl+xml' => ['wadl'], + 'application/vnd.sun.xml.calc' => ['sxc'], + 'application/vnd.sun.xml.calc.template' => ['stc'], + 'application/vnd.sun.xml.draw' => ['sxd'], + 'application/vnd.sun.xml.draw.template' => ['std'], + 'application/vnd.sun.xml.impress' => ['sxi'], + 'application/vnd.sun.xml.impress.template' => ['sti'], + 'application/vnd.sun.xml.math' => ['sxm'], + 'application/vnd.sun.xml.writer' => ['sxw'], + 'application/vnd.sun.xml.writer.global' => ['sxg'], + 'application/vnd.sun.xml.writer.template' => ['stw'], + 'application/vnd.sus-calendar' => ['sus', 'susp'], + 'application/vnd.svd' => ['svd'], + 'application/vnd.symbian.install' => ['sis', 'sisx'], + 'application/vnd.syncml+xml' => ['xsm'], + 'application/vnd.syncml.dm+wbxml' => ['bdm'], + 'application/vnd.syncml.dm+xml' => ['xdm'], + 'application/vnd.syncml.dmddf+xml' => ['ddf'], + 'application/vnd.tao.intent-module-archive' => ['tao'], + 'application/vnd.tcpdump.pcap' => ['pcap', 'cap', 'dmp'], + 'application/vnd.tmobile-livetv' => ['tmo'], + 'application/vnd.trid.tpt' => ['tpt'], + 'application/vnd.triscape.mxs' => ['mxs'], + 'application/vnd.trueapp' => ['tra'], + 'application/vnd.ufdl' => ['ufd', 'ufdl'], + 'application/vnd.uiq.theme' => ['utz'], + 'application/vnd.umajin' => ['umj'], + 'application/vnd.unity' => ['unityweb'], + 'application/vnd.uoml+xml' => ['uoml', 'uo'], + 'application/vnd.vcx' => ['vcx'], + 'application/vnd.visio' => ['vsd', 'vst', 'vss', 'vsw'], + 'application/vnd.visionary' => ['vis'], + 'application/vnd.vsf' => ['vsf'], + 'application/vnd.wap.wbxml' => ['wbxml'], + 'application/vnd.wap.wmlc' => ['wmlc'], + 'application/vnd.wap.wmlscriptc' => ['wmlsc'], + 'application/vnd.webturbo' => ['wtb'], + 'application/vnd.wolfram.player' => ['nbp'], + 'application/vnd.wordperfect' => ['wpd'], + 'application/vnd.wqd' => ['wqd'], + 'application/vnd.wt.stf' => ['stf'], + 'application/vnd.xara' => ['xar'], + 'application/vnd.xfdl' => ['xfdl'], + 'application/vnd.yamaha.hv-dic' => ['hvd'], + 'application/vnd.yamaha.hv-script' => ['hvs'], + 'application/vnd.yamaha.hv-voice' => ['hvp'], + 'application/vnd.yamaha.openscoreformat' => ['osf'], + 'application/vnd.yamaha.openscoreformat.osfpvg+xml' => ['osfpvg'], + 'application/vnd.yamaha.smaf-audio' => ['saf'], + 'application/vnd.yamaha.smaf-phrase' => ['spf'], + 'application/vnd.yellowriver-custom-menu' => ['cmp'], + 'application/vnd.zul' => ['zir', 'zirz'], + 'application/vnd.zzazz.deck+xml' => ['zaz'], + 'application/voicexml+xml' => ['vxml'], + 'application/wasm' => ['wasm'], + 'application/watcherinfo+xml' => ['wif'], + 'application/widget' => ['wgt'], + 'application/winhlp' => ['hlp'], + 'application/wsdl+xml' => ['wsdl'], + 'application/wspolicy+xml' => ['wspolicy'], + 'application/x-7z-compressed' => ['7z', '7zip'], + 'application/x-abiword' => ['abw'], + 'application/x-ace-compressed' => ['ace'], + 'application/x-apple-diskimage' => ['dmg'], + 'application/x-arj' => ['arj'], + 'application/x-authorware-bin' => ['aab', 'x32', 'u32', 'vox'], + 'application/x-authorware-map' => ['aam'], + 'application/x-authorware-seg' => ['aas'], + 'application/x-bcpio' => ['bcpio'], + 'application/x-bdoc' => ['bdoc'], + 'application/x-bittorrent' => ['torrent'], + 'application/x-blorb' => ['blb', 'blorb'], + 'application/x-bzip' => ['bz'], + 'application/x-bzip2' => ['bz2', 'boz'], + 'application/x-cbr' => ['cbr', 'cba', 'cbt', 'cbz', 'cb7'], + 'application/x-cdlink' => ['vcd'], + 'application/x-cfs-compressed' => ['cfs'], + 'application/x-chat' => ['chat'], + 'application/x-chess-pgn' => ['pgn'], + 'application/x-chrome-extension' => ['crx'], + 'application/x-cocoa' => ['cco'], + 'application/x-conference' => ['nsc'], + 'application/x-cpio' => ['cpio'], + 'application/x-csh' => ['csh'], + 'application/x-debian-package' => ['deb', 'udeb'], + 'application/x-dgc-compressed' => ['dgc'], + 'application/x-director' => ['dir', 'dcr', 'dxr', 'cst', 'cct', 'cxt', 'w3d', 'fgd', 'swa'], + 'application/x-doom' => ['wad'], + 'application/x-dtbncx+xml' => ['ncx'], + 'application/x-dtbook+xml' => ['dtb'], + 'application/x-dtbresource+xml' => ['res'], + 'application/x-dvi' => ['dvi'], + 'application/x-envoy' => ['evy'], + 'application/x-eva' => ['eva'], + 'application/x-font-bdf' => ['bdf'], + 'application/x-font-ghostscript' => ['gsf'], + 'application/x-font-linux-psf' => ['psf'], + 'application/x-font-pcf' => ['pcf'], + 'application/x-font-snf' => ['snf'], + 'application/x-font-type1' => ['pfa', 'pfb', 'pfm', 'afm'], + 'application/x-freearc' => ['arc'], + 'application/x-futuresplash' => ['spl'], + 'application/x-gca-compressed' => ['gca'], + 'application/x-glulx' => ['ulx'], + 'application/x-gnumeric' => ['gnumeric'], + 'application/x-gramps-xml' => ['gramps'], + 'application/x-gtar' => ['gtar'], + 'application/x-hdf' => ['hdf'], + 'application/x-httpd-php' => ['php', 'php4', 'php3', 'phtml'], + 'application/x-install-instructions' => ['install'], + 'application/x-iso9660-image' => ['iso'], + 'application/x-iwork-keynote-sffkey' => ['key'], + 'application/x-iwork-numbers-sffnumbers' => ['numbers'], + 'application/x-iwork-pages-sffpages' => ['pages'], + 'application/x-java-archive-diff' => ['jardiff'], + 'application/x-java-jnlp-file' => ['jnlp'], + 'application/x-keepass2' => ['kdbx'], + 'application/x-latex' => ['latex'], + 'application/x-lua-bytecode' => ['luac'], + 'application/x-lzh-compressed' => ['lzh', 'lha'], + 'application/x-makeself' => ['run'], + 'application/x-mie' => ['mie'], + 'application/x-mobipocket-ebook' => ['prc', 'mobi'], + 'application/x-ms-application' => ['application'], + 'application/x-ms-shortcut' => ['lnk'], + 'application/x-ms-wmd' => ['wmd'], + 'application/x-ms-wmz' => ['wmz'], + 'application/x-ms-xbap' => ['xbap'], + 'application/x-msaccess' => ['mdb'], + 'application/x-msbinder' => ['obd'], + 'application/x-mscardfile' => ['crd'], + 'application/x-msclip' => ['clp'], + 'application/x-msdos-program' => ['exe'], + 'application/x-msdownload' => ['exe', 'dll', 'com', 'bat', 'msi'], + 'application/x-msmediaview' => ['mvb', 'm13', 'm14'], + 'application/x-msmetafile' => ['wmf', 'wmz', 'emf', 'emz'], + 'application/x-msmoney' => ['mny'], + 'application/x-mspublisher' => ['pub'], + 'application/x-msschedule' => ['scd'], + 'application/x-msterminal' => ['trm'], + 'application/x-mswrite' => ['wri'], + 'application/x-netcdf' => ['nc', 'cdf'], + 'application/x-ns-proxy-autoconfig' => ['pac'], + 'application/x-nzb' => ['nzb'], + 'application/x-perl' => ['pl', 'pm'], + 'application/x-pilot' => ['prc', 'pdb'], + 'application/x-pkcs12' => ['p12', 'pfx'], + 'application/x-pkcs7-certificates' => ['p7b', 'spc'], + 'application/x-pkcs7-certreqresp' => ['p7r'], + 'application/x-rar-compressed' => ['rar'], + 'application/x-redhat-package-manager' => ['rpm'], + 'application/x-research-info-systems' => ['ris'], + 'application/x-sea' => ['sea'], + 'application/x-sh' => ['sh'], + 'application/x-shar' => ['shar'], + 'application/x-shockwave-flash' => ['swf'], + 'application/x-silverlight-app' => ['xap'], + 'application/x-sql' => ['sql'], + 'application/x-stuffit' => ['sit'], + 'application/x-stuffitx' => ['sitx'], + 'application/x-subrip' => ['srt'], + 'application/x-sv4cpio' => ['sv4cpio'], + 'application/x-sv4crc' => ['sv4crc'], + 'application/x-t3vm-image' => ['t3'], + 'application/x-tads' => ['gam'], + 'application/x-tar' => ['tar', 'tgz'], + 'application/x-tcl' => ['tcl', 'tk'], + 'application/x-tex' => ['tex'], + 'application/x-tex-tfm' => ['tfm'], + 'application/x-texinfo' => ['texinfo', 'texi'], + 'application/x-tgif' => ['obj'], + 'application/x-ustar' => ['ustar'], + 'application/x-virtualbox-hdd' => ['hdd'], + 'application/x-virtualbox-ova' => ['ova'], + 'application/x-virtualbox-ovf' => ['ovf'], + 'application/x-virtualbox-vbox' => ['vbox'], + 'application/x-virtualbox-vbox-extpack' => ['vbox-extpack'], + 'application/x-virtualbox-vdi' => ['vdi'], + 'application/x-virtualbox-vhd' => ['vhd'], + 'application/x-virtualbox-vmdk' => ['vmdk'], + 'application/x-wais-source' => ['src'], + 'application/x-web-app-manifest+json' => ['webapp'], + 'application/x-x509-ca-cert' => ['der', 'crt', 'pem'], + 'application/x-xfig' => ['fig'], + 'application/x-xliff+xml' => ['xlf'], + 'application/x-xpinstall' => ['xpi'], + 'application/x-xz' => ['xz'], + 'application/x-zmachine' => ['z1', 'z2', 'z3', 'z4', 'z5', 'z6', 'z7', 'z8'], + 'application/xaml+xml' => ['xaml'], + 'application/xcap-att+xml' => ['xav'], + 'application/xcap-caps+xml' => ['xca'], + 'application/xcap-diff+xml' => ['xdf'], + 'application/xcap-el+xml' => ['xel'], + 'application/xcap-ns+xml' => ['xns'], + 'application/xenc+xml' => ['xenc'], + 'application/xfdf' => ['xfdf'], + 'application/xhtml+xml' => ['xhtml', 'xht'], + 'application/xliff+xml' => ['xlf'], + 'application/xml' => ['xml', 'xsl', 'xsd', 'rng'], + 'application/xml-dtd' => ['dtd'], + 'application/xop+xml' => ['xop'], + 'application/xproc+xml' => ['xpl'], + 'application/xslt+xml' => ['xsl', 'xslt'], + 'application/xspf+xml' => ['xspf'], + 'application/xv+xml' => ['mxml', 'xhvml', 'xvml', 'xvm'], + 'application/yang' => ['yang'], + 'application/yin+xml' => ['yin'], + 'application/zip' => ['zip'], + 'audio/3gpp' => ['3gpp'], + 'audio/aac' => ['adts', 'aac'], + 'audio/adpcm' => ['adp'], + 'audio/amr' => ['amr'], + 'audio/basic' => ['au', 'snd'], + 'audio/midi' => ['mid', 'midi', 'kar', 'rmi'], + 'audio/mobile-xmf' => ['mxmf'], + 'audio/mp3' => ['mp3'], + 'audio/mp4' => ['m4a', 'mp4a'], + 'audio/mpeg' => ['mpga', 'mp2', 'mp2a', 'mp3', 'm2a', 'm3a'], + 'audio/ogg' => ['oga', 'ogg', 'spx', 'opus'], + 'audio/s3m' => ['s3m'], + 'audio/silk' => ['sil'], + 'audio/vnd.dece.audio' => ['uva', 'uvva'], + 'audio/vnd.digital-winds' => ['eol'], + 'audio/vnd.dra' => ['dra'], + 'audio/vnd.dts' => ['dts'], + 'audio/vnd.dts.hd' => ['dtshd'], + 'audio/vnd.lucent.voice' => ['lvp'], + 'audio/vnd.ms-playready.media.pya' => ['pya'], + 'audio/vnd.nuera.ecelp4800' => ['ecelp4800'], + 'audio/vnd.nuera.ecelp7470' => ['ecelp7470'], + 'audio/vnd.nuera.ecelp9600' => ['ecelp9600'], + 'audio/vnd.rip' => ['rip'], + 'audio/wav' => ['wav'], + 'audio/wave' => ['wav'], + 'audio/webm' => ['weba'], + 'audio/x-aac' => ['aac'], + 'audio/x-aiff' => ['aif', 'aiff', 'aifc'], + 'audio/x-caf' => ['caf'], + 'audio/x-flac' => ['flac'], + 'audio/x-m4a' => ['m4a'], + 'audio/x-matroska' => ['mka'], + 'audio/x-mpegurl' => ['m3u'], + 'audio/x-ms-wax' => ['wax'], + 'audio/x-ms-wma' => ['wma'], + 'audio/x-pn-realaudio' => ['ram', 'ra', 'rm'], + 'audio/x-pn-realaudio-plugin' => ['rmp', 'rpm'], + 'audio/x-realaudio' => ['ra'], + 'audio/x-wav' => ['wav'], + 'audio/xm' => ['xm'], + 'chemical/x-cdx' => ['cdx'], + 'chemical/x-cif' => ['cif'], + 'chemical/x-cmdf' => ['cmdf'], + 'chemical/x-cml' => ['cml'], + 'chemical/x-csml' => ['csml'], + 'chemical/x-xyz' => ['xyz'], + 'font/collection' => ['ttc'], + 'font/otf' => ['otf'], + 'font/ttf' => ['ttf'], + 'font/woff' => ['woff'], + 'font/woff2' => ['woff2'], + 'image/aces' => ['exr'], + 'image/apng' => ['apng'], + 'image/avci' => ['avci'], + 'image/avcs' => ['avcs'], + 'image/avif' => ['avif'], + 'image/bmp' => ['bmp', 'dib'], + 'image/cgm' => ['cgm'], + 'image/dicom-rle' => ['drle'], + 'image/dpx' => ['dpx'], + 'image/emf' => ['emf'], + 'image/fits' => ['fits'], + 'image/g3fax' => ['g3'], + 'image/gif' => ['gif'], + 'image/heic' => ['heic'], + 'image/heic-sequence' => ['heics'], + 'image/heif' => ['heif'], + 'image/heif-sequence' => ['heifs'], + 'image/hej2k' => ['hej2'], + 'image/hsj2' => ['hsj2'], + 'image/ief' => ['ief'], + 'image/jls' => ['jls'], + 'image/jp2' => ['jp2', 'jpg2'], + 'image/jpeg' => ['jpeg', 'jpg', 'jpe'], + 'image/jph' => ['jph'], + 'image/jphc' => ['jhc'], + 'image/jpm' => ['jpm', 'jpgm'], + 'image/jpx' => ['jpx', 'jpf'], + 'image/jxr' => ['jxr'], + 'image/jxra' => ['jxra'], + 'image/jxrs' => ['jxrs'], + 'image/jxs' => ['jxs'], + 'image/jxsc' => ['jxsc'], + 'image/jxsi' => ['jxsi'], + 'image/jxss' => ['jxss'], + 'image/ktx' => ['ktx'], + 'image/ktx2' => ['ktx2'], + 'image/png' => ['png'], + 'image/prs.btif' => ['btif', 'btf'], + 'image/prs.pti' => ['pti'], + 'image/sgi' => ['sgi'], + 'image/svg+xml' => ['svg', 'svgz'], + 'image/t38' => ['t38'], + 'image/tiff' => ['tif', 'tiff'], + 'image/tiff-fx' => ['tfx'], + 'image/vnd.adobe.photoshop' => ['psd'], + 'image/vnd.airzip.accelerator.azv' => ['azv'], + 'image/vnd.dece.graphic' => ['uvi', 'uvvi', 'uvg', 'uvvg'], + 'image/vnd.djvu' => ['djvu', 'djv'], + 'image/vnd.dvb.subtitle' => ['sub'], + 'image/vnd.dwg' => ['dwg'], + 'image/vnd.dxf' => ['dxf'], + 'image/vnd.fastbidsheet' => ['fbs'], + 'image/vnd.fpx' => ['fpx'], + 'image/vnd.fst' => ['fst'], + 'image/vnd.fujixerox.edmics-mmr' => ['mmr'], + 'image/vnd.fujixerox.edmics-rlc' => ['rlc'], + 'image/vnd.microsoft.icon' => ['ico'], + 'image/vnd.ms-dds' => ['dds'], + 'image/vnd.ms-modi' => ['mdi'], + 'image/vnd.ms-photo' => ['wdp'], + 'image/vnd.net-fpx' => ['npx'], + 'image/vnd.pco.b16' => ['b16'], + 'image/vnd.tencent.tap' => ['tap'], + 'image/vnd.valve.source.texture' => ['vtf'], + 'image/vnd.wap.wbmp' => ['wbmp'], + 'image/vnd.xiff' => ['xif'], + 'image/vnd.zbrush.pcx' => ['pcx'], + 'image/webp' => ['webp'], + 'image/wmf' => ['wmf'], + 'image/x-3ds' => ['3ds'], + 'image/x-cmu-raster' => ['ras'], + 'image/x-cmx' => ['cmx'], + 'image/x-freehand' => ['fh', 'fhc', 'fh4', 'fh5', 'fh7'], + 'image/x-icon' => ['ico'], + 'image/x-jng' => ['jng'], + 'image/x-mrsid-image' => ['sid'], + 'image/x-ms-bmp' => ['bmp'], + 'image/x-pcx' => ['pcx'], + 'image/x-pict' => ['pic', 'pct'], + 'image/x-portable-anymap' => ['pnm'], + 'image/x-portable-bitmap' => ['pbm'], + 'image/x-portable-graymap' => ['pgm'], + 'image/x-portable-pixmap' => ['ppm'], + 'image/x-rgb' => ['rgb'], + 'image/x-tga' => ['tga'], + 'image/x-xbitmap' => ['xbm'], + 'image/x-xpixmap' => ['xpm'], + 'image/x-xwindowdump' => ['xwd'], + 'message/disposition-notification' => ['disposition-notification'], + 'message/global' => ['u8msg'], + 'message/global-delivery-status' => ['u8dsn'], + 'message/global-disposition-notification' => ['u8mdn'], + 'message/global-headers' => ['u8hdr'], + 'message/rfc822' => ['eml', 'mime'], + 'message/vnd.wfa.wsc' => ['wsc'], + 'model/3mf' => ['3mf'], + 'model/gltf+json' => ['gltf'], + 'model/gltf-binary' => ['glb'], + 'model/iges' => ['igs', 'iges'], + 'model/jt' => ['jt'], + 'model/mesh' => ['msh', 'mesh', 'silo'], + 'model/mtl' => ['mtl'], + 'model/obj' => ['obj'], + 'model/prc' => ['prc'], + 'model/step+xml' => ['stpx'], + 'model/step+zip' => ['stpz'], + 'model/step-xml+zip' => ['stpxz'], + 'model/stl' => ['stl'], + 'model/u3d' => ['u3d'], + 'model/vnd.cld' => ['cld'], + 'model/vnd.collada+xml' => ['dae'], + 'model/vnd.dwf' => ['dwf'], + 'model/vnd.gdl' => ['gdl'], + 'model/vnd.gtw' => ['gtw'], + 'model/vnd.mts' => ['mts'], + 'model/vnd.opengex' => ['ogex'], + 'model/vnd.parasolid.transmit.binary' => ['x_b'], + 'model/vnd.parasolid.transmit.text' => ['x_t'], + 'model/vnd.pytha.pyox' => ['pyo', 'pyox'], + 'model/vnd.sap.vds' => ['vds'], + 'model/vnd.usda' => ['usda'], + 'model/vnd.usdz+zip' => ['usdz'], + 'model/vnd.valve.source.compiled-map' => ['bsp'], + 'model/vnd.vtu' => ['vtu'], + 'model/vrml' => ['wrl', 'vrml'], + 'model/x3d+binary' => ['x3db', 'x3dbz'], + 'model/x3d+fastinfoset' => ['x3db'], + 'model/x3d+vrml' => ['x3dv', 'x3dvz'], + 'model/x3d+xml' => ['x3d', 'x3dz'], + 'model/x3d-vrml' => ['x3dv'], + 'text/cache-manifest' => ['appcache', 'manifest'], + 'text/calendar' => ['ics', 'ifb'], + 'text/coffeescript' => ['coffee', 'litcoffee'], + 'text/css' => ['css'], + 'text/csv' => ['csv'], + 'text/html' => ['html', 'htm', 'shtml'], + 'text/jade' => ['jade'], + 'text/javascript' => ['js', 'mjs'], + 'text/jsx' => ['jsx'], + 'text/less' => ['less'], + 'text/markdown' => ['md', 'markdown'], + 'text/mathml' => ['mml'], + 'text/mdx' => ['mdx'], + 'text/n3' => ['n3'], + 'text/plain' => ['txt', 'text', 'conf', 'def', 'list', 'log', 'in', 'ini', 'm3u'], + 'text/prs.lines.tag' => ['dsc'], + 'text/richtext' => ['rtx'], + 'text/rtf' => ['rtf'], + 'text/sgml' => ['sgml', 'sgm'], + 'text/shex' => ['shex'], + 'text/slim' => ['slim', 'slm'], + 'text/spdx' => ['spdx'], + 'text/stylus' => ['stylus', 'styl'], + 'text/tab-separated-values' => ['tsv'], + 'text/troff' => ['t', 'tr', 'roff', 'man', 'me', 'ms'], + 'text/turtle' => ['ttl'], + 'text/uri-list' => ['uri', 'uris', 'urls'], + 'text/vcard' => ['vcard'], + 'text/vnd.curl' => ['curl'], + 'text/vnd.curl.dcurl' => ['dcurl'], + 'text/vnd.curl.mcurl' => ['mcurl'], + 'text/vnd.curl.scurl' => ['scurl'], + 'text/vnd.dvb.subtitle' => ['sub'], + 'text/vnd.familysearch.gedcom' => ['ged'], + 'text/vnd.fly' => ['fly'], + 'text/vnd.fmi.flexstor' => ['flx'], + 'text/vnd.graphviz' => ['gv'], + 'text/vnd.in3d.3dml' => ['3dml'], + 'text/vnd.in3d.spot' => ['spot'], + 'text/vnd.sun.j2me.app-descriptor' => ['jad'], + 'text/vnd.wap.wml' => ['wml'], + 'text/vnd.wap.wmlscript' => ['wmls'], + 'text/vtt' => ['vtt'], + 'text/wgsl' => ['wgsl'], + 'text/x-asm' => ['s', 'asm'], + 'text/x-c' => ['c', 'cc', 'cxx', 'cpp', 'h', 'hh', 'dic'], + 'text/x-component' => ['htc'], + 'text/x-fortran' => ['f', 'for', 'f77', 'f90'], + 'text/x-handlebars-template' => ['hbs'], + 'text/x-java-source' => ['java'], + 'text/x-lua' => ['lua'], + 'text/x-markdown' => ['mkd'], + 'text/x-nfo' => ['nfo'], + 'text/x-opml' => ['opml'], + 'text/x-org' => ['org'], + 'text/x-pascal' => ['p', 'pas'], + 'text/x-processing' => ['pde'], + 'text/x-sass' => ['sass'], + 'text/x-scss' => ['scss'], + 'text/x-setext' => ['etx'], + 'text/x-sfv' => ['sfv'], + 'text/x-suse-ymp' => ['ymp'], + 'text/x-uuencode' => ['uu'], + 'text/x-vcalendar' => ['vcs'], + 'text/x-vcard' => ['vcf'], + 'text/xml' => ['xml'], + 'text/yaml' => ['yaml', 'yml'], + 'video/3gpp' => ['3gp', '3gpp'], + 'video/3gpp2' => ['3g2'], + 'video/h261' => ['h261'], + 'video/h263' => ['h263'], + 'video/h264' => ['h264'], + 'video/iso.segment' => ['m4s'], + 'video/jpeg' => ['jpgv'], + 'video/jpm' => ['jpm', 'jpgm'], + 'video/mj2' => ['mj2', 'mjp2'], + 'video/mp2t' => ['ts'], + 'video/mp4' => ['mp4', 'mp4v', 'mpg4', 'f4v'], + 'video/mpeg' => ['mpeg', 'mpg', 'mpe', 'm1v', 'm2v'], + 'video/ogg' => ['ogv'], + 'video/quicktime' => ['qt', 'mov'], + 'video/vnd.dece.hd' => ['uvh', 'uvvh'], + 'video/vnd.dece.mobile' => ['uvm', 'uvvm'], + 'video/vnd.dece.pd' => ['uvp', 'uvvp'], + 'video/vnd.dece.sd' => ['uvs', 'uvvs'], + 'video/vnd.dece.video' => ['uvv', 'uvvv'], + 'video/vnd.dvb.file' => ['dvb'], + 'video/vnd.fvt' => ['fvt'], + 'video/vnd.mpegurl' => ['mxu', 'm4u'], + 'video/vnd.ms-playready.media.pyv' => ['pyv'], + 'video/vnd.uvvu.mp4' => ['uvu', 'uvvu'], + 'video/vnd.vivo' => ['viv'], + 'video/webm' => ['webm'], + 'video/x-f4v' => ['f4v'], + 'video/x-fli' => ['fli'], + 'video/x-flv' => ['flv'], + 'video/x-m4v' => ['m4v'], + 'video/x-matroska' => ['mkv', 'mk3d', 'mks'], + 'video/x-mng' => ['mng'], + 'video/x-ms-asf' => ['asf', 'asx'], + 'video/x-ms-vob' => ['vob'], + 'video/x-ms-wm' => ['wm'], + 'video/x-ms-wmv' => ['wmv'], + 'video/x-ms-wmx' => ['wmx'], + 'video/x-ms-wvx' => ['wvx'], + 'video/x-msvideo' => ['avi'], + 'video/x-sgi-movie' => ['movie'], + 'video/x-smv' => ['smv'], + 'x-conference/x-cooltalk' => ['ice'], + 'application/x-photoshop' => ['psd'], + 'application/smil' => ['smi', 'smil'], + 'application/powerpoint' => ['ppt'], + 'application/vnd.ms-powerpoint.addin.macroEnabled.12' => ['ppam'], + 'application/vnd.ms-powerpoint.presentation.macroEnabled.12' => ['pptm', 'potm'], + 'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' => ['ppsm'], + 'application/wbxml' => ['wbxml'], + 'application/wmlc' => ['wmlc'], + 'application/x-httpd-php-source' => ['phps'], + 'application/x-compress' => ['z'], + 'application/x-rar' => ['rar'], + 'video/vnd.rn-realvideo' => ['rv'], + 'application/vnd.ms-word.template.macroEnabled.12' => ['docm', 'dotm'], + 'application/vnd.ms-excel.sheet.macroEnabled.12' => ['xlsm'], + 'application/vnd.ms-excel.template.macroEnabled.12' => ['xltm'], + 'application/vnd.ms-excel.addin.macroEnabled.12' => ['xlam'], + 'application/vnd.ms-excel.sheet.binary.macroEnabled.12' => ['xlsb'], + 'application/excel' => ['xl'], + 'application/x-x509-user-cert' => ['pem'], + 'application/x-pkcs10' => ['p10'], + 'application/x-pkcs7-signature' => ['p7a'], + 'application/pgp' => ['pgp'], + 'application/gpg-keys' => ['gpg'], + 'application/x-pkcs7' => ['rsa'], + 'video/3gp' => ['3gp'], + 'audio/acc' => ['aac'], + 'application/vnd.mpegurl' => ['m4u'], + 'application/videolan' => ['vlc'], + 'audio/x-au' => ['au'], + 'audio/ac3' => ['ac3'], + 'text/x-scriptzsh' => ['zsh'], + 'application/cdr' => ['cdr'], + 'application/STEP' => ['step', 'stp'], + ]; + public function lookupMimeType(string $extension): ?string { return self::MIME_TYPES_FOR_EXTENSIONS[$extension] ?? null; } + + public function lookupExtension(string $mimetype): ?string + { + return self::EXTENSIONS_FOR_MIME_TIMES[$mimetype][0] ?? null; + } + + /** + * @return string[] + */ + public function lookupAllExtensions(string $mimetype): array + { + return self::EXTENSIONS_FOR_MIME_TIMES[$mimetype] ?? []; + } } diff --git a/core/vendor/monolog/monolog/README.md b/core/vendor/monolog/monolog/README.md index eb6740db77..4630f1f691 100644 --- a/core/vendor/monolog/monolog/README.md +++ b/core/vendor/monolog/monolog/README.md @@ -3,8 +3,8 @@ [![Total Downloads](https://img.shields.io/packagist/dt/monolog/monolog.svg)](https://packagist.org/packages/monolog/monolog) [![Latest Stable Version](https://img.shields.io/packagist/v/monolog/monolog.svg)](https://packagist.org/packages/monolog/monolog) -> ⚠ This is the **documentation for Monolog 3.x**, if you are using older releases -> see the documentation for [Monolog 2.x](https://github.com/Seldaek/monolog/blob/2.x/README.md) or [Monolog 1.x](https://github.com/Seldaek/monolog/blob/1.x/README.md) ⚠ +>**Note** This is the **documentation for Monolog 3.x**, if you are using older releases +>see the documentation for [Monolog 2.x](https://github.com/Seldaek/monolog/blob/2.x/README.md) or [Monolog 1.x](https://github.com/Seldaek/monolog/blob/1.x/README.md) Monolog sends your logs to files, sockets, inboxes, databases and various web services. See the complete list of handlers below. Special handlers diff --git a/core/vendor/monolog/monolog/composer.json b/core/vendor/monolog/monolog/composer.json index da48d5ec37..4ccd07211e 100644 --- a/core/vendor/monolog/monolog/composer.json +++ b/core/vendor/monolog/monolog/composer.json @@ -21,7 +21,7 @@ "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "graylog2/gelf-php": "^1.4.2 || ^2.0", "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", @@ -29,7 +29,7 @@ "phpstan/phpstan": "^1.9", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^9.5.26", + "phpunit/phpunit": "^10.1", "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", "symfony/mailer": "^5.4 || ^6", diff --git a/core/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php b/core/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php index f8b2502170..c519e0537e 100644 --- a/core/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php +++ b/core/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php @@ -23,14 +23,16 @@ class AsMonologProcessor { /** - * @param string|null $channel The logging channel the processor should be pushed to. - * @param string|null $handler The handler the processor should be pushed to. - * @param string|null $method The method that processes the records (if the attribute is used at the class level). + * @param string|null $channel The logging channel the processor should be pushed to. + * @param string|null $handler The handler the processor should be pushed to. + * @param string|null $method The method that processes the records (if the attribute is used at the class level). + * @param int|null $priority The priority of the processor so the order can be determined. */ public function __construct( public readonly ?string $channel = null, public readonly ?string $handler = null, - public readonly ?string $method = null + public readonly ?string $method = null, + public readonly ?int $priority = null ) { } } diff --git a/core/vendor/monolog/monolog/src/Monolog/ErrorHandler.php b/core/vendor/monolog/monolog/src/Monolog/ErrorHandler.php index 2ed4603572..594e64b244 100644 --- a/core/vendor/monolog/monolog/src/Monolog/ErrorHandler.php +++ b/core/vendor/monolog/monolog/src/Monolog/ErrorHandler.php @@ -193,7 +193,7 @@ private function handleException(\Throwable $e): never ($this->previousExceptionHandler)($e); } - if (!headers_sent() && !(bool) ini_get('display_errors')) { + if (!headers_sent() && in_array(strtolower((string) ini_get('display_errors')), ['0', '', 'false', 'off', 'none', 'no'], true)) { http_response_code(500); } diff --git a/core/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php b/core/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php index ce2a3a8e11..1c3df386d5 100644 --- a/core/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php +++ b/core/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php @@ -181,9 +181,9 @@ public function clear(): void private function flushBuffer(): void { if (null !== $this->passthruLevel) { - $level = $this->passthruLevel; - $this->buffer = array_filter($this->buffer, function ($record) use ($level) { - return $record->level >= $level; + $passthruLevel = $this->passthruLevel; + $this->buffer = array_filter($this->buffer, static function ($record) use ($passthruLevel) { + return $passthruLevel->includes($record->level); }); if (count($this->buffer) > 0) { $this->getHandler(end($this->buffer))->handleBatch($this->buffer); diff --git a/core/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php b/core/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php index 9d57af99b8..75081db5f5 100644 --- a/core/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php +++ b/core/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php @@ -43,13 +43,12 @@ class RotatingFileHandler extends StreamHandler * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) * @param bool $useLocking Try to lock log file before doing any writes */ - public function __construct(string $filename, int $maxFiles = 0, int|string|Level $level = Level::Debug, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false) + public function __construct(string $filename, int $maxFiles = 0, int|string|Level $level = Level::Debug, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false, string $dateFormat = self::FILE_PER_DAY, string $filenameFormat = '{filename}-{date}') { $this->filename = Utils::canonicalizePath($filename); $this->maxFiles = $maxFiles; - $this->nextRotation = new \DateTimeImmutable('tomorrow'); - $this->filenameFormat = '{filename}-{date}'; - $this->dateFormat = static::FILE_PER_DAY; + $this->setFilenameFormat($filenameFormat, $dateFormat); + $this->nextRotation = $this->getNextRotation(); parent::__construct($this->getTimedFilename(), $level, $bubble, $filePermission, $useLocking); } @@ -80,21 +79,13 @@ public function reset(): void public function setFilenameFormat(string $filenameFormat, string $dateFormat): self { - if (0 === preg_match('{^[Yy](([/_.-]?m)([/_.-]?d)?)?$}', $dateFormat)) { - throw new InvalidArgumentException( - 'Invalid date format - format must be one of '. - 'RotatingFileHandler::FILE_PER_DAY ("Y-m-d"), RotatingFileHandler::FILE_PER_MONTH ("Y-m") '. - 'or RotatingFileHandler::FILE_PER_YEAR ("Y"), or you can set one of the '. - 'date formats using slashes, underscores and/or dots instead of dashes.' - ); - } + $this->setDateFormat($dateFormat); if (substr_count($filenameFormat, '{date}') === 0) { throw new InvalidArgumentException( 'Invalid filename format - format must contain at least `{date}`, because otherwise rotating is impossible.' ); } $this->filenameFormat = $filenameFormat; - $this->dateFormat = $dateFormat; $this->url = $this->getTimedFilename(); $this->close(); @@ -126,7 +117,7 @@ protected function rotate(): void { // update filename $this->url = $this->getTimedFilename(); - $this->nextRotation = new \DateTimeImmutable('tomorrow'); + $this->nextRotation = $this->getNextRotation(); // skip GC of old logs if files are unlimited if (0 === $this->maxFiles) { @@ -198,4 +189,26 @@ protected function getGlobPattern(): string return $glob; } + + protected function setDateFormat(string $dateFormat): void + { + if (0 === preg_match('{^[Yy](([/_.-]?m)([/_.-]?d)?)?$}', $dateFormat)) { + throw new InvalidArgumentException( + 'Invalid date format - format must be one of '. + 'RotatingFileHandler::FILE_PER_DAY ("Y-m-d"), RotatingFileHandler::FILE_PER_MONTH ("Y-m") '. + 'or RotatingFileHandler::FILE_PER_YEAR ("Y"), or you can set one of the '. + 'date formats using slashes, underscores and/or dots instead of dashes.' + ); + } + $this->dateFormat = $dateFormat; + } + + protected function getNextRotation(): \DateTimeImmutable + { + return match (str_replace(['/','_','.'], '-', $this->dateFormat)) { + self::FILE_PER_MONTH => (new \DateTimeImmutable('first day of next month'))->setTime(0, 0, 0), + self::FILE_PER_YEAR => (new \DateTimeImmutable('first day of January next year'))->setTime(0, 0, 0), + default => (new \DateTimeImmutable('tomorrow'))->setTime(0, 0, 0), + }; + } } diff --git a/core/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php b/core/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php index 0816a01196..99507a170e 100644 --- a/core/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php +++ b/core/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php @@ -58,9 +58,7 @@ public function close(): void */ protected function write(LogRecord $record): void { - if (!openlog($this->ident, $this->logopts, $this->facility)) { - throw new \LogicException('Can\'t open syslog for ident "'.$this->ident.'" and facility "'.$this->facility.'"' . Utils::getRecordMessageForException($record)); - } + openlog($this->ident, $this->logopts, $this->facility); syslog($this->toSyslogPriority($record->level), (string) $record->formatted); } } diff --git a/core/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php b/core/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php index 7b5b8a53af..4302a03a9b 100644 --- a/core/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php +++ b/core/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php @@ -88,11 +88,18 @@ class TelegramBotHandler extends AbstractProcessingHandler */ private bool $delayBetweenMessages; + /** + * Telegram message thread id, unique identifier for the target message thread (topic) of the forum; for forum supergroups only + * See how to get the `message_thread_id` https://stackoverflow.com/a/75178418 + */ + private int|null $topic; + /** * @param string $apiKey Telegram bot access token provided by BotFather * @param string $channel Telegram channel name * @param bool $splitLongMessages Split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages * @param bool $delayBetweenMessages Adds delay between sending a split message according to Telegram API + * @param int $topic Telegram message thread id, unique identifier for the target message thread (topic) of the forum * @throws MissingExtensionException If the curl extension is missing */ public function __construct( @@ -104,7 +111,8 @@ public function __construct( bool $disableWebPagePreview = null, bool $disableNotification = null, bool $splitLongMessages = false, - bool $delayBetweenMessages = false + bool $delayBetweenMessages = false, + int $topic = null ) { if (!extension_loaded('curl')) { throw new MissingExtensionException('The curl extension is needed to use the TelegramBotHandler'); @@ -119,6 +127,7 @@ public function __construct( $this->disableNotification($disableNotification); $this->splitLongMessages($splitLongMessages); $this->delayBetweenMessages($delayBetweenMessages); + $this->setTopic($topic); } public function setParseMode(string $parseMode = null): self @@ -169,6 +178,13 @@ public function delayBetweenMessages(bool $delayBetweenMessages = false): self return $this; } + public function setTopic(int $topic = null): self + { + $this->topic = $topic; + + return $this; + } + /** * @inheritDoc */ @@ -224,13 +240,17 @@ protected function sendCurl(string $message): void curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); - curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ + $params = [ 'text' => $message, 'chat_id' => $this->channel, 'parse_mode' => $this->parseMode, 'disable_web_page_preview' => $this->disableWebPagePreview, 'disable_notification' => $this->disableNotification, - ])); + ]; + if ($this->topic !== null) { + $params['message_thread_id'] = $this->topic; + } + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); $result = Curl\Util::execute($ch); if (!is_string($result)) { diff --git a/core/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php b/core/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php index 1884f83fcc..8e356ef31c 100644 --- a/core/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php +++ b/core/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php @@ -23,14 +23,14 @@ * * @author Jordi Boggiano * - * @method bool hasEmergency($record) - * @method bool hasAlert($record) - * @method bool hasCritical($record) - * @method bool hasError($record) - * @method bool hasWarning($record) - * @method bool hasNotice($record) - * @method bool hasInfo($record) - * @method bool hasDebug($record) + * @method bool hasEmergency(string|array $recordAssertions) + * @method bool hasAlert(string|array $recordAssertions) + * @method bool hasCritical(string|array $recordAssertions) + * @method bool hasError(string|array $recordAssertions) + * @method bool hasWarning(string|array $recordAssertions) + * @method bool hasNotice(string|array $recordAssertions) + * @method bool hasInfo(string|array $recordAssertions) + * @method bool hasDebug(string|array $recordAssertions) * * @method bool hasEmergencyRecords() * @method bool hasAlertRecords() @@ -41,32 +41,32 @@ * @method bool hasInfoRecords() * @method bool hasDebugRecords() * - * @method bool hasEmergencyThatContains($message) - * @method bool hasAlertThatContains($message) - * @method bool hasCriticalThatContains($message) - * @method bool hasErrorThatContains($message) - * @method bool hasWarningThatContains($message) - * @method bool hasNoticeThatContains($message) - * @method bool hasInfoThatContains($message) - * @method bool hasDebugThatContains($message) + * @method bool hasEmergencyThatContains(string $message) + * @method bool hasAlertThatContains(string $message) + * @method bool hasCriticalThatContains(string $message) + * @method bool hasErrorThatContains(string $message) + * @method bool hasWarningThatContains(string $message) + * @method bool hasNoticeThatContains(string $message) + * @method bool hasInfoThatContains(string $message) + * @method bool hasDebugThatContains(string $message) * - * @method bool hasEmergencyThatMatches($message) - * @method bool hasAlertThatMatches($message) - * @method bool hasCriticalThatMatches($message) - * @method bool hasErrorThatMatches($message) - * @method bool hasWarningThatMatches($message) - * @method bool hasNoticeThatMatches($message) - * @method bool hasInfoThatMatches($message) - * @method bool hasDebugThatMatches($message) + * @method bool hasEmergencyThatMatches(string $regex) + * @method bool hasAlertThatMatches(string $regex) + * @method bool hasCriticalThatMatches(string $regex) + * @method bool hasErrorThatMatches(string $regex) + * @method bool hasWarningThatMatches(string $regex) + * @method bool hasNoticeThatMatches(string $regex) + * @method bool hasInfoThatMatches(string $regex) + * @method bool hasDebugThatMatches(string $regex) * - * @method bool hasEmergencyThatPasses($message) - * @method bool hasAlertThatPasses($message) - * @method bool hasCriticalThatPasses($message) - * @method bool hasErrorThatPasses($message) - * @method bool hasWarningThatPasses($message) - * @method bool hasNoticeThatPasses($message) - * @method bool hasInfoThatPasses($message) - * @method bool hasDebugThatPasses($message) + * @method bool hasEmergencyThatPasses(callable $predicate) + * @method bool hasAlertThatPasses(callable $predicate) + * @method bool hasCriticalThatPasses(callable $predicate) + * @method bool hasErrorThatPasses(callable $predicate) + * @method bool hasWarningThatPasses(callable $predicate) + * @method bool hasNoticeThatPasses(callable $predicate) + * @method bool hasInfoThatPasses(callable $predicate) + * @method bool hasDebugThatPasses(callable $predicate) */ class TestHandler extends AbstractProcessingHandler { diff --git a/core/vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php b/core/vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php new file mode 100644 index 0000000000..64e3c4747d --- /dev/null +++ b/core/vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php @@ -0,0 +1,66 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Monolog\Processor; + +use Monolog\LogRecord; + +/** + * Injects sys_getloadavg in all records @see https://www.php.net/manual/en/function.sys-getloadavg.php + * + * @author Johan Vlaar + */ +class LoadAverageProcessor implements ProcessorInterface +{ + public const LOAD_1_MINUTE = 0; + public const LOAD_5_MINUTE = 1; + public const LOAD_15_MINUTE = 2; + + private const AVAILABLE_LOAD = [ + self::LOAD_1_MINUTE, + self::LOAD_5_MINUTE, + self::LOAD_15_MINUTE, + ]; + + /** + * @var int + */ + protected $avgSystemLoad; + + /** + * @param self::LOAD_* $avgSystemLoad + */ + public function __construct(int $avgSystemLoad = self::LOAD_1_MINUTE) + { + if (!in_array($avgSystemLoad, self::AVAILABLE_LOAD, true)) { + throw new \InvalidArgumentException(sprintf('Invalid average system load: `%s`', $avgSystemLoad)); + } + $this->avgSystemLoad = $avgSystemLoad; + } + + /** + * {@inheritDoc} + */ + public function __invoke(LogRecord $record): LogRecord + { + if (!function_exists('sys_getloadavg')) { + return $record; + } + $usage = sys_getloadavg(); + if (false === $usage) { + return $record; + } + + $record->extra['load_average'] = $usage[$this->avgSystemLoad]; + + return $record; + } +} diff --git a/core/vendor/monolog/monolog/src/Monolog/Utils.php b/core/vendor/monolog/monolog/src/Monolog/Utils.php index 9dae2535f2..7848f0ecdd 100644 --- a/core/vendor/monolog/monolog/src/Monolog/Utils.php +++ b/core/vendor/monolog/monolog/src/Monolog/Utils.php @@ -199,7 +199,7 @@ private static function detectAndCleanUtf8(&$data): void if (is_string($data) && preg_match('//u', $data) !== 1) { $data = preg_replace_callback( '/[\x80-\xFF]+/', - function ($m) { + function (array $m): string { return function_exists('mb_convert_encoding') ? mb_convert_encoding($m[0], 'UTF-8', 'ISO-8859-1') : utf8_encode($m[0]); }, $data diff --git a/core/vendor/nesbot/carbon/composer.json b/core/vendor/nesbot/carbon/composer.json index b5416b034b..7560763027 100644 --- a/core/vendor/nesbot/carbon/composer.json +++ b/core/vendor/nesbot/carbon/composer.json @@ -42,6 +42,7 @@ "require": { "php": "^7.1.8 || ^8.0", "ext-json": "*", + "psr/clock": "^1.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" @@ -59,6 +60,9 @@ "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.4" }, + "provide": { + "psr/clock-implementation": "1.0" + }, "minimum-stability": "dev", "prefer-stable": true, "autoload": { diff --git a/core/vendor/nesbot/carbon/readme.md b/core/vendor/nesbot/carbon/readme.md index efc5811ff2..057327a5c7 100644 --- a/core/vendor/nesbot/carbon/readme.md +++ b/core/vendor/nesbot/carbon/readme.md @@ -123,8 +123,10 @@ Support this project by becoming a sponsor. Your logo will show up here with a l CasinoHex Canada Casino-portugal.pt Slots City -inkedin Probukmacher +Игровые автоматы +inkedin +Онлайн казино України AzuraCast Triplebyte GitHub Sponsors @@ -142,7 +144,7 @@ Support this project by becoming a sponsor. Your logo will show up here with a l Thank you to all our backers! 🙏 - + [[Become a backer](https://opencollective.com/Carbon#backer)] diff --git a/core/vendor/nesbot/carbon/sponsors.php b/core/vendor/nesbot/carbon/sponsors.php index 80128161f8..4f6d994eed 100644 --- a/core/vendor/nesbot/carbon/sponsors.php +++ b/core/vendor/nesbot/carbon/sponsors.php @@ -27,10 +27,18 @@ function getOpenCollectiveSponsors(): string $list = array_map(static function (array $member) { $createdAt = CarbonImmutable::parse($member['createdAt']); - $monthlyContribution = (float) ($member['totalAmountDonated'] / (1 + $createdAt->diffInMonths())); + $lastTransactionAt = CarbonImmutable::parse($member['lastTransactionAt']); + + if ($createdAt->format('d H:i:s.u') > $lastTransactionAt->format('d H:i:s.u')) { + $createdAt = $createdAt + ->setDay($lastTransactionAt->day) + ->modify($lastTransactionAt->format('H:i:s.u')); + } + + $monthlyContribution = (float) ($member['totalAmountDonated'] / ceil($createdAt->floatDiffInMonths())); if ( - CarbonImmutable::parse($member['lastTransactionAt'])->isAfter('last month') && + $lastTransactionAt->isAfter('last month') && $member['lastTransactionAmount'] > $monthlyContribution ) { $monthlyContribution = (float) $member['lastTransactionAmount']; diff --git a/core/vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php b/core/vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php index 01679142ea..9ddcf61abd 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php +++ b/core/vendor/nesbot/carbon/src/Carbon/CarbonPeriod.php @@ -51,43 +51,43 @@ * @property-read CarbonInterface $end Period end date. * @property-read CarbonInterval $interval Underlying date interval instance. Always present, one day by default. * - * @method static CarbonPeriod start($date, $inclusive = null) Create instance specifying start date or modify the start date if called on an instance. - * @method static CarbonPeriod since($date, $inclusive = null) Alias for start(). - * @method static CarbonPeriod sinceNow($inclusive = null) Create instance with start date set to now or set the start date to now if called on an instance. - * @method static CarbonPeriod end($date = null, $inclusive = null) Create instance specifying end date or modify the end date if called on an instance. - * @method static CarbonPeriod until($date = null, $inclusive = null) Alias for end(). - * @method static CarbonPeriod untilNow($inclusive = null) Create instance with end date set to now or set the end date to now if called on an instance. - * @method static CarbonPeriod dates($start, $end = null) Create instance with start and end dates or modify the start and end dates if called on an instance. - * @method static CarbonPeriod between($start, $end = null) Create instance with start and end dates or modify the start and end dates if called on an instance. - * @method static CarbonPeriod recurrences($recurrences = null) Create instance with maximum number of recurrences or modify the number of recurrences if called on an instance. - * @method static CarbonPeriod times($recurrences = null) Alias for recurrences(). - * @method static CarbonPeriod options($options = null) Create instance with options or modify the options if called on an instance. - * @method static CarbonPeriod toggle($options, $state = null) Create instance with options toggled on or off, or toggle options if called on an instance. - * @method static CarbonPeriod filter($callback, $name = null) Create instance with filter added to the stack or append a filter if called on an instance. - * @method static CarbonPeriod push($callback, $name = null) Alias for filter(). - * @method static CarbonPeriod prepend($callback, $name = null) Create instance with filter prepended to the stack or prepend a filter if called on an instance. - * @method static CarbonPeriod filters(array $filters = []) Create instance with filters stack or replace the whole filters stack if called on an instance. - * @method static CarbonPeriod interval($interval) Create instance with given date interval or modify the interval if called on an instance. - * @method static CarbonPeriod each($interval) Create instance with given date interval or modify the interval if called on an instance. - * @method static CarbonPeriod every($interval) Create instance with given date interval or modify the interval if called on an instance. - * @method static CarbonPeriod step($interval) Create instance with given date interval or modify the interval if called on an instance. - * @method static CarbonPeriod stepBy($interval) Create instance with given date interval or modify the interval if called on an instance. - * @method static CarbonPeriod invert() Create instance with inverted date interval or invert the interval if called on an instance. - * @method static CarbonPeriod years($years = 1) Create instance specifying a number of years for date interval or replace the interval by the given a number of years if called on an instance. - * @method static CarbonPeriod year($years = 1) Alias for years(). - * @method static CarbonPeriod months($months = 1) Create instance specifying a number of months for date interval or replace the interval by the given a number of months if called on an instance. - * @method static CarbonPeriod month($months = 1) Alias for months(). - * @method static CarbonPeriod weeks($weeks = 1) Create instance specifying a number of weeks for date interval or replace the interval by the given a number of weeks if called on an instance. - * @method static CarbonPeriod week($weeks = 1) Alias for weeks(). - * @method static CarbonPeriod days($days = 1) Create instance specifying a number of days for date interval or replace the interval by the given a number of days if called on an instance. - * @method static CarbonPeriod dayz($days = 1) Alias for days(). - * @method static CarbonPeriod day($days = 1) Alias for days(). - * @method static CarbonPeriod hours($hours = 1) Create instance specifying a number of hours for date interval or replace the interval by the given a number of hours if called on an instance. - * @method static CarbonPeriod hour($hours = 1) Alias for hours(). - * @method static CarbonPeriod minutes($minutes = 1) Create instance specifying a number of minutes for date interval or replace the interval by the given a number of minutes if called on an instance. - * @method static CarbonPeriod minute($minutes = 1) Alias for minutes(). - * @method static CarbonPeriod seconds($seconds = 1) Create instance specifying a number of seconds for date interval or replace the interval by the given a number of seconds if called on an instance. - * @method static CarbonPeriod second($seconds = 1) Alias for seconds(). + * @method static static start($date, $inclusive = null) Create instance specifying start date or modify the start date if called on an instance. + * @method static static since($date, $inclusive = null) Alias for start(). + * @method static static sinceNow($inclusive = null) Create instance with start date set to now or set the start date to now if called on an instance. + * @method static static end($date = null, $inclusive = null) Create instance specifying end date or modify the end date if called on an instance. + * @method static static until($date = null, $inclusive = null) Alias for end(). + * @method static static untilNow($inclusive = null) Create instance with end date set to now or set the end date to now if called on an instance. + * @method static static dates($start, $end = null) Create instance with start and end dates or modify the start and end dates if called on an instance. + * @method static static between($start, $end = null) Create instance with start and end dates or modify the start and end dates if called on an instance. + * @method static static recurrences($recurrences = null) Create instance with maximum number of recurrences or modify the number of recurrences if called on an instance. + * @method static static times($recurrences = null) Alias for recurrences(). + * @method static static options($options = null) Create instance with options or modify the options if called on an instance. + * @method static static toggle($options, $state = null) Create instance with options toggled on or off, or toggle options if called on an instance. + * @method static static filter($callback, $name = null) Create instance with filter added to the stack or append a filter if called on an instance. + * @method static static push($callback, $name = null) Alias for filter(). + * @method static static prepend($callback, $name = null) Create instance with filter prepended to the stack or prepend a filter if called on an instance. + * @method static static filters(array $filters = []) Create instance with filters stack or replace the whole filters stack if called on an instance. + * @method static static interval($interval) Create instance with given date interval or modify the interval if called on an instance. + * @method static static each($interval) Create instance with given date interval or modify the interval if called on an instance. + * @method static static every($interval) Create instance with given date interval or modify the interval if called on an instance. + * @method static static step($interval) Create instance with given date interval or modify the interval if called on an instance. + * @method static static stepBy($interval) Create instance with given date interval or modify the interval if called on an instance. + * @method static static invert() Create instance with inverted date interval or invert the interval if called on an instance. + * @method static static years($years = 1) Create instance specifying a number of years for date interval or replace the interval by the given a number of years if called on an instance. + * @method static static year($years = 1) Alias for years(). + * @method static static months($months = 1) Create instance specifying a number of months for date interval or replace the interval by the given a number of months if called on an instance. + * @method static static month($months = 1) Alias for months(). + * @method static static weeks($weeks = 1) Create instance specifying a number of weeks for date interval or replace the interval by the given a number of weeks if called on an instance. + * @method static static week($weeks = 1) Alias for weeks(). + * @method static static days($days = 1) Create instance specifying a number of days for date interval or replace the interval by the given a number of days if called on an instance. + * @method static static dayz($days = 1) Alias for days(). + * @method static static day($days = 1) Alias for days(). + * @method static static hours($hours = 1) Create instance specifying a number of hours for date interval or replace the interval by the given a number of hours if called on an instance. + * @method static static hour($hours = 1) Alias for hours(). + * @method static static minutes($minutes = 1) Create instance specifying a number of minutes for date interval or replace the interval by the given a number of minutes if called on an instance. + * @method static static minute($minutes = 1) Alias for minutes(). + * @method static static seconds($seconds = 1) Create instance specifying a number of seconds for date interval or replace the interval by the given a number of seconds if called on an instance. + * @method static static second($seconds = 1) Alias for seconds(). * @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. @@ -632,6 +632,10 @@ public static function __callStatic($method, $parameters) */ public function __construct(...$arguments) { + if (is_a($this->dateClass, DateTimeImmutable::class, true)) { + $this->options = static::IMMUTABLE; + } + // Parse and assign arguments one by one. First argument may be an ISO 8601 spec, // which will be first parsed into parts and then processed the same way. diff --git a/core/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php b/core/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php index 715f5e7868..d88a1cf67f 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php +++ b/core/vendor/nesbot/carbon/src/Carbon/FactoryImmutable.php @@ -12,6 +12,9 @@ namespace Carbon; use Closure; +use DateTimeImmutable; +use DateTimeZone; +use Psr\Clock\ClockInterface; /** * A factory to generate CarbonImmutable instances with common settings. @@ -111,7 +114,6 @@ * @method CarbonImmutable maxValue() Create a Carbon instance for the greatest supported date. * @method CarbonImmutable minValue() Create a Carbon instance for the lowest supported date. * @method void mixin($mixin) Mix another object into the class. - * @method CarbonImmutable now($tz = null) Get a Carbon instance for the current date and time. * @method CarbonImmutable parse($time = null, $tz = null) Create a carbon instance from a string. * This is an alias for the constructor that allows better fluent syntax * as it allows you to do Carbon::parse('Monday next week')->fn() rather @@ -237,7 +239,21 @@ * * */ -class FactoryImmutable extends Factory +class FactoryImmutable extends Factory implements ClockInterface { protected $className = CarbonImmutable::class; + + /** + * Get a Carbon instance for the current date and time. + * + * @param DateTimeZone|string|int|null $tz + * + * @return CarbonImmutable + */ + public function now($tz = null): DateTimeImmutable + { + $className = $this->className; + + return new $className(null, $tz); + } } diff --git a/core/vendor/nesbot/carbon/src/Carbon/Lang/ms.php b/core/vendor/nesbot/carbon/src/Carbon/Lang/ms.php index 36934eeb1c..c9e80854f9 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Lang/ms.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Lang/ms.php @@ -48,7 +48,7 @@ 'ago' => ':time yang lepas', 'from_now' => ':time dari sekarang', 'after' => ':time kemudian', - 'before' => ':time lepas', + 'before' => ':time sebelum', 'diff_now' => 'sekarang', 'diff_today' => 'Hari', 'diff_today_regexp' => 'Hari(?:\\s+ini)?(?:\\s+pukul)?', diff --git a/core/vendor/nesbot/carbon/src/Carbon/Lang/sl.php b/core/vendor/nesbot/carbon/src/Carbon/Lang/sl.php index b000e30e3d..1f1d1b3381 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Lang/sl.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Lang/sl.php @@ -51,7 +51,7 @@ 'year_ago' => ':count letom|:count letoma|:count leti|:count leti', 'y_ago' => ':count letom|:count letoma|:count leti|:count leti', - 'month_ago' => ':count mesecem|:count meseci|:count meseci|:count meseci', + 'month_ago' => ':count mesecem|:count mesecema|:count meseci|:count meseci', 'week_ago' => ':count tednom|:count tednoma|:count tedni|:count tedni', 'day_ago' => ':count dnem|:count dnevoma|:count dnevi|:count dnevi', 'd_ago' => ':count dnem|:count dnevoma|:count dnevi|:count dnevi', diff --git a/core/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php b/core/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php index 184f81080a..0d611ea22e 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Traits/Creator.php @@ -20,6 +20,7 @@ use Carbon\Translator; use Closure; use DateMalformedStringException; +use DateTimeImmutable; use DateTimeInterface; use DateTimeZone; use Exception; @@ -113,7 +114,7 @@ private function constructTimezoneFromDateTime(DateTimeInterface $date, &$tz) $safeTz = static::safeCreateDateTimeZone($tz); if ($safeTz) { - return $date->setTimezone($safeTz); + return ($date instanceof DateTimeImmutable ? $date : clone $date)->setTimezone($safeTz); } return $date; @@ -662,12 +663,14 @@ public static function rawCreateFromFormat($format, $time, $tz = null) $tz = clone $mock->getTimezone(); } - // Set microseconds to zero to match behavior of DateTime::createFromFormat() - // See https://bugs.php.net/bug.php?id=74332 - $mock = $mock->copy()->microsecond(0); + $mock = $mock->copy(); // Prepend mock datetime only if the format does not contain non escaped unix epoch reset flag. if (!preg_match("/{$nonEscaped}[!|]/", $format)) { + if (preg_match('/[HhGgisvuB]/', $format)) { + $mock = $mock->setTime(0, 0); + } + $format = static::MOCK_DATETIME_FORMAT.' '.$format; $time = ($mock instanceof self ? $mock->rawFormat(static::MOCK_DATETIME_FORMAT) : $mock->format(static::MOCK_DATETIME_FORMAT)).' '.$time; } diff --git a/core/vendor/nesbot/carbon/src/Carbon/Traits/Difference.php b/core/vendor/nesbot/carbon/src/Carbon/Traits/Difference.php index a9868ebf82..ab5b65d234 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Traits/Difference.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Traits/Difference.php @@ -298,9 +298,9 @@ public function diffFiltered(CarbonInterval $ci, Closure $callback, $date = null */ public function diffInWeekdays($date = null, $absolute = true) { - return $this->diffInDaysFiltered(function (CarbonInterface $date) { + return $this->diffInDaysFiltered(static function (CarbonInterface $date) { return $date->isWeekday(); - }, $date, $absolute); + }, $this->resolveCarbon($date)->avoidMutation()->modify($this->format('H:i:s.u')), $absolute); } /** @@ -313,9 +313,9 @@ public function diffInWeekdays($date = null, $absolute = true) */ public function diffInWeekendDays($date = null, $absolute = true) { - return $this->diffInDaysFiltered(function (CarbonInterface $date) { + return $this->diffInDaysFiltered(static function (CarbonInterface $date) { return $date->isWeekend(); - }, $date, $absolute); + }, $this->resolveCarbon($date)->avoidMutation()->modify($this->format('H:i:s.u')), $absolute); } /** diff --git a/core/vendor/nesbot/carbon/src/Carbon/Traits/Mixin.php b/core/vendor/nesbot/carbon/src/Carbon/Traits/Mixin.php index 595c287b37..5822454564 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Traits/Mixin.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Traits/Mixin.php @@ -11,6 +11,9 @@ namespace Carbon\Traits; +use Carbon\CarbonInterface; +use Carbon\CarbonInterval; +use Carbon\CarbonPeriod; use Closure; use Generator; use ReflectionClass; @@ -99,12 +102,13 @@ private static function loadMixinTrait($trait) { $context = eval(self::getAnonymousClassCodeForTrait($trait)); $className = \get_class($context); + $baseClass = static::class; foreach (self::getMixableMethods($context) as $name) { $closureBase = Closure::fromCallable([$context, $name]); - static::macro($name, function () use ($closureBase, $className) { - /** @phpstan-ignore-next-line */ + static::macro($name, function (...$parameters) use ($closureBase, $className, $baseClass) { + $downContext = isset($this) ? ($this) : new $baseClass(); $context = isset($this) ? $this->cast($className) : new $className(); try { @@ -117,7 +121,48 @@ private static function loadMixinTrait($trait) // in case of errors not converted into exceptions $closure = $closure ?: $closureBase; - return $closure(...\func_get_args()); + $result = $closure(...$parameters); + + if (!($result instanceof $className)) { + return $result; + } + + if ($downContext instanceof CarbonInterface && $result instanceof CarbonInterface) { + if ($context !== $result) { + $downContext = $downContext->copy(); + } + + return $downContext + ->setTimezone($result->getTimezone()) + ->modify($result->format('Y-m-d H:i:s.u')) + ->settings($result->getSettings()); + } + + if ($downContext instanceof CarbonInterval && $result instanceof CarbonInterval) { + if ($context !== $result) { + $downContext = $downContext->copy(); + } + + $downContext->copyProperties($result); + self::copyStep($downContext, $result); + self::copyNegativeUnits($downContext, $result); + + return $downContext->settings($result->getSettings()); + } + + if ($downContext instanceof CarbonPeriod && $result instanceof CarbonPeriod) { + if ($context !== $result) { + $downContext = $downContext->copy(); + } + + return $downContext + ->setDates($result->getStartDate(), $result->getEndDate()) + ->setRecurrences($result->getRecurrences()) + ->setOptions($result->getOptions()) + ->settings($result->getSettings()); + } + + return $result; }); } } diff --git a/core/vendor/nesbot/carbon/src/Carbon/Traits/Options.php b/core/vendor/nesbot/carbon/src/Carbon/Traits/Options.php index 6f021942ac..48f9739773 100644 --- a/core/vendor/nesbot/carbon/src/Carbon/Traits/Options.php +++ b/core/vendor/nesbot/carbon/src/Carbon/Traits/Options.php @@ -422,7 +422,7 @@ public function getSettings() foreach ($map as $property => $key) { $value = $this->$property ?? null; - if ($value !== null) { + if ($value !== null && ($key !== 'locale' || $value !== 'en' || $this->localTranslator)) { $settings[$key] = $value; } } @@ -437,7 +437,7 @@ public function getSettings() */ public function __debugInfo() { - $infos = array_filter(get_object_vars($this), function ($var) { + $infos = array_filter(get_object_vars($this), static function ($var) { return $var; }); diff --git a/core/vendor/phpmailer/phpmailer/README.md b/core/vendor/phpmailer/phpmailer/README.md index 53e66f1149..878274f48e 100644 --- a/core/vendor/phpmailer/phpmailer/README.md +++ b/core/vendor/phpmailer/phpmailer/README.md @@ -47,7 +47,7 @@ This software is distributed under the [LGPL 2.1](http://www.gnu.org/licenses/lg PHPMailer is available on [Packagist](https://packagist.org/packages/phpmailer/phpmailer) (using semantic versioning), and installation via [Composer](https://getcomposer.org) is the recommended way to install PHPMailer. Just add this line to your `composer.json` file: ```json -"phpmailer/phpmailer": "^6.8.0" +"phpmailer/phpmailer": "^6.8.1" ``` or run @@ -150,7 +150,7 @@ PHPMailer defaults to English, but in the [language](https://github.com/PHPMaile $mail->setLanguage('fr', '/optional/path/to/language/directory/'); ``` -We welcome corrections and new languages – if you're looking for corrections, run the [PHPMailerLangTest.php](https://github.com/PHPMailer/PHPMailer/tree/master/test/PHPMailerLangTest.php) script in the tests folder and it will show any missing translations. +We welcome corrections and new languages – if you're looking for corrections, run the [Language/TranslationCompletenessTest.php](https://github.com/PHPMailer/PHPMailer/blob/master/test/Language/TranslationCompletenessTest.php) script in the tests folder and it will show any missing translations. ## Documentation Start reading at the [GitHub wiki](https://github.com/PHPMailer/PHPMailer/wiki). If you're having trouble, head for [the troubleshooting guide](https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting) as it's frequently updated. diff --git a/core/vendor/phpmailer/phpmailer/VERSION b/core/vendor/phpmailer/phpmailer/VERSION index 8a1c5c7e99..23863d3def 100644 --- a/core/vendor/phpmailer/phpmailer/VERSION +++ b/core/vendor/phpmailer/phpmailer/VERSION @@ -1 +1 @@ -6.8.0 \ No newline at end of file +6.8.1 \ No newline at end of file diff --git a/core/vendor/phpmailer/phpmailer/composer.json b/core/vendor/phpmailer/phpmailer/composer.json index 37e3d6e704..2fd2f4c207 100644 --- a/core/vendor/phpmailer/phpmailer/composer.json +++ b/core/vendor/phpmailer/phpmailer/composer.json @@ -37,13 +37,13 @@ "ext-hash": "*" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.2", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", "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", + "squizlabs/php_codesniffer": "^3.7.2", "yoast/phpunit-polyfills": "^1.0.4" }, "suggest": { diff --git a/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php b/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php index 243c05489e..6d1e637390 100644 --- a/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php +++ b/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fi.php @@ -20,7 +20,6 @@ $PHPMAILER_LANG['mailer_not_supported'] = 'postivälitintyyppiä ei tueta.'; $PHPMAILER_LANG['provide_address'] = 'Aseta vähintään yksi vastaanottajan sähköpostiosoite.'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP-virhe: seuraava vastaanottaja osoite on virheellinen.'; -$PHPMAILER_LANG['encoding'] = 'Tuntematon koodaustyyppi: '; //$PHPMAILER_LANG['signing'] = 'Signing Error: '; //$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.'; //$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: '; diff --git a/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php b/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php index 38a7a8e7e5..0d367fcf88 100644 --- a/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php +++ b/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-fr.php @@ -35,4 +35,3 @@ $PHPMAILER_LANG['smtp_detail'] = 'Détails : '; $PHPMAILER_LANG['smtp_error'] = 'Erreur du serveur SMTP : '; $PHPMAILER_LANG['variable_set'] = 'Impossible d’initialiser ou de réinitialiser une variable : '; -$PHPMAILER_LANG['extension_missing'] = 'Extension manquante : '; diff --git a/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php b/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php index 65793ce2b9..c9621a164f 100644 --- a/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php +++ b/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-nb.php @@ -5,22 +5,29 @@ * @package PHPMailer */ -$PHPMAILER_LANG['authenticate'] = 'SMTP Feil: Kunne ikke autentisere.'; -$PHPMAILER_LANG['connect_host'] = 'SMTP Feil: Kunne ikke koble til SMTP tjener.'; -$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Feil: Datainnhold ikke akseptert.'; -$PHPMAILER_LANG['empty_message'] = 'Meldingsinnhold mangler'; -$PHPMAILER_LANG['encoding'] = 'Ukjent koding: '; -$PHPMAILER_LANG['execute'] = 'Kunne ikke utføre: '; -$PHPMAILER_LANG['file_access'] = 'Får ikke tilgang til filen: '; -$PHPMAILER_LANG['file_open'] = 'Fil Feil: Kunne ikke åpne filen: '; -$PHPMAILER_LANG['from_failed'] = 'Følgende Frå adresse feilet: '; -$PHPMAILER_LANG['instantiate'] = 'Kunne ikke initialisere post funksjon.'; -$PHPMAILER_LANG['invalid_address'] = 'Ugyldig adresse: '; -$PHPMAILER_LANG['mailer_not_supported'] = ' sender er ikke støttet.'; -$PHPMAILER_LANG['provide_address'] = 'Du må opppgi minst en mottakeradresse.'; -$PHPMAILER_LANG['recipients_failed'] = 'SMTP Feil: Følgende mottakeradresse feilet: '; -$PHPMAILER_LANG['signing'] = 'Signering Feil: '; -$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP connect() feilet.'; -$PHPMAILER_LANG['smtp_error'] = 'SMTP server feil: '; -$PHPMAILER_LANG['variable_set'] = 'Kan ikke skrive eller omskrive variabel: '; -$PHPMAILER_LANG['extension_missing'] = 'Utvidelse mangler: '; + $PHPMAILER_LANG['authenticate'] = 'SMTP-feil: Kunne ikke autentiseres.'; + $PHPMAILER_LANG['buggy_php'] = 'Din versjon av PHP er berørt av en feil som kan føre til ødelagte meldinger. For å løse problemet kan du bytte til SMTP, deaktivere alternativet mail.add_x_header i php.ini, bytte til MacOS eller Linux eller oppgradere PHP til versjon 7.0.17+ eller 7.1.3+.'; + $PHPMAILER_LANG['connect_host'] = 'SMTP-feil: Kunne ikke koble til SMTP-vert.'; + $PHPMAILER_LANG['data_not_accepted'] = 'SMTP-feil: data ikke akseptert.'; + $PHPMAILER_LANG['empty_message'] = 'Meldingstekst mangler'; + $PHPMAILER_LANG['encoding'] = 'Ukjent koding: '; + $PHPMAILER_LANG['execute'] = 'Kunne ikke utføres: '; + $PHPMAILER_LANG['extension_missing'] = 'Utvidelse mangler: '; + $PHPMAILER_LANG['file_access'] = 'Kunne ikke få tilgang til filen: '; + $PHPMAILER_LANG['file_open'] = 'Feil i fil: Kunne ikke åpne filen: '; + $PHPMAILER_LANG['from_failed'] = 'Følgende Fra-adresse mislyktes: '; + $PHPMAILER_LANG['instantiate'] = 'Kunne ikke instansiere e-postfunksjonen.'; + $PHPMAILER_LANG['invalid_address'] = 'Ugyldig adresse: '; + $PHPMAILER_LANG['invalid_header'] = 'Ugyldig headernavn eller verdi'; + $PHPMAILER_LANG['invalid_hostentry'] = 'Ugyldig vertsinngang: '; + $PHPMAILER_LANG['invalid_host'] = 'Ugyldig vert: '; + $PHPMAILER_LANG['mailer_not_supported'] = ' sender er ikke støttet.'; + $PHPMAILER_LANG['provide_address'] = 'Du må oppgi minst én mottaker-e-postadresse.'; + $PHPMAILER_LANG['recipients_failed'] = 'SMTP Feil: Følgende mottakeradresse feilet: '; + $PHPMAILER_LANG['signing'] = 'Signeringsfeil: '; + $PHPMAILER_LANG['smtp_code'] = 'SMTP-kode: '; + $PHPMAILER_LANG['smtp_code_ex'] = 'Ytterligere SMTP-info: '; + $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP connect() mislyktes.'; + $PHPMAILER_LANG['smtp_detail'] = 'Detaljer: '; + $PHPMAILER_LANG['smtp_error'] = 'SMTP-serverfeil: '; + $PHPMAILER_LANG['variable_set'] = 'Kan ikke angi eller tilbakestille variabel: '; diff --git a/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-si.php b/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-si.php new file mode 100644 index 0000000000..dce502aa02 --- /dev/null +++ b/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-si.php @@ -0,0 +1,34 @@ + + */ + +$PHPMAILER_LANG['authenticate'] = 'SMTP දෝෂය: සත්‍යාපනය අසාර්ථක විය.'; +$PHPMAILER_LANG['buggy_php'] = 'ඔබගේ PHP version එකෙහි පවතින දෝෂයක් නිසා email පණිවිඩ දෝෂ සහගත වීමේ හැකියාවක් ඇත. මෙය විසදීම සදහා SMTP භාවිතා කිරීම, mail.add_x_header INI setting එක අක්‍රීය කිරීම, MacOS හෝ Linux වලට මාරු වීම, හෝ ඔබගේ PHP version එක 7.0.17+ හෝ 7.1.3+ වලට අලුත් කිරීම කරගන්න.'; +$PHPMAILER_LANG['connect_host'] = 'SMTP දෝෂය: සම්බන්ධ වීමට නොහැකි විය.'; +$PHPMAILER_LANG['data_not_accepted'] = 'SMTP දෝෂය: දත්ත පිළිගනු නොලැබේ.'; +$PHPMAILER_LANG['empty_message'] = 'පණිවිඩ අන්තර්ගතය හිස්'; +$PHPMAILER_LANG['encoding'] = 'නොදන්නා කේතනය: '; +$PHPMAILER_LANG['execute'] = 'ක්‍රියාත්මක කළ නොහැකි විය: '; +$PHPMAILER_LANG['extension_missing'] = 'Extension එක නොමැත: '; +$PHPMAILER_LANG['file_access'] = 'File එකට ප්‍රවේශ විය නොහැකි විය: '; +$PHPMAILER_LANG['file_open'] = 'File දෝෂය: File එක විවෘත කළ නොහැක: '; +$PHPMAILER_LANG['from_failed'] = 'පහත From ලිපිනයන් අසාර්ථක විය: '; +$PHPMAILER_LANG['instantiate'] = 'mail function එක ක්‍රියාත්මක කළ නොහැක.'; +$PHPMAILER_LANG['invalid_address'] = 'වලංගු නොවන ලිපිනය: '; +$PHPMAILER_LANG['invalid_header'] = 'වලංගු නොවන header නාමයක් හෝ අගයක්'; +$PHPMAILER_LANG['invalid_hostentry'] = 'වලංගු නොවන hostentry එකක්: '; +$PHPMAILER_LANG['invalid_host'] = 'වලංගු නොවන host එකක්: '; +$PHPMAILER_LANG['mailer_not_supported'] = ' mailer සහාය නොදක්වයි.'; +$PHPMAILER_LANG['provide_address'] = 'ඔබ අවම වශයෙන් එක් ලබන්නෙකුගේ ඊමේල් ලිපිනයක් සැපයිය යුතුය.'; +$PHPMAILER_LANG['recipients_failed'] = 'SMTP දෝෂය: පහත ලබන්නන් අසමත් විය: '; +$PHPMAILER_LANG['signing'] = 'Sign කිරීමේ දෝෂය: '; +$PHPMAILER_LANG['smtp_code'] = 'SMTP කේතය: '; +$PHPMAILER_LANG['smtp_code_ex'] = 'අමතර SMTP තොරතුරු: '; +$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP සම්බන්ධය අසාර්ථක විය.'; +$PHPMAILER_LANG['smtp_detail'] = 'තොරතුරු: '; +$PHPMAILER_LANG['smtp_error'] = 'SMTP දෝෂය: '; +$PHPMAILER_LANG['variable_set'] = 'Variable එක සැකසීමට හෝ නැවත සැකසීමට නොහැක: '; diff --git a/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php b/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php index 728a4994c5..03d491165b 100644 --- a/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php +++ b/core/vendor/phpmailer/phpmailer/language/phpmailer.lang-zh_cn.php @@ -9,11 +9,13 @@ */ $PHPMAILER_LANG['authenticate'] = 'SMTP 错误:登录失败。'; +$PHPMAILER_LANG['buggy_php'] = '您的 PHP 版本存在漏洞,可能会导致消息损坏。为修复此问题,请切换到使用 SMTP 发送,在您的 php.ini 中禁用 mail.add_x_header 选项。切换到 MacOS 或 Linux,或将您的 PHP 升级到 7.0.17+ 或 7.1.3+ 版本。'; $PHPMAILER_LANG['connect_host'] = 'SMTP 错误:无法连接到 SMTP 主机。'; $PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误:数据不被接受。'; $PHPMAILER_LANG['empty_message'] = '邮件正文为空。'; $PHPMAILER_LANG['encoding'] = '未知编码:'; $PHPMAILER_LANG['execute'] = '无法执行:'; +$PHPMAILER_LANG['extension_missing'] = '缺少扩展名:'; $PHPMAILER_LANG['file_access'] = '无法访问文件:'; $PHPMAILER_LANG['file_open'] = '文件错误:无法打开文件:'; $PHPMAILER_LANG['from_failed'] = '发送地址错误:'; @@ -22,8 +24,13 @@ $PHPMAILER_LANG['mailer_not_supported'] = '发信客户端不被支持。'; $PHPMAILER_LANG['provide_address'] = '必须提供至少一个收件人地址。'; $PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误:收件人地址错误:'; -$PHPMAILER_LANG['signing'] = '登录失败:'; $PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP服务器连接失败。'; $PHPMAILER_LANG['smtp_error'] = 'SMTP服务器出错:'; $PHPMAILER_LANG['variable_set'] = '无法设置或重置变量:'; -$PHPMAILER_LANG['extension_missing'] = '丢失模块 Extension:'; +$PHPMAILER_LANG['invalid_header'] = '无效的标题名称或值'; +$PHPMAILER_LANG['invalid_hostentry'] = '无效的hostentry: '; +$PHPMAILER_LANG['invalid_host'] = '无效的主机:'; +$PHPMAILER_LANG['signing'] = '签名错误:'; +$PHPMAILER_LANG['smtp_code'] = 'SMTP代码: '; +$PHPMAILER_LANG['smtp_code_ex'] = '附加SMTP信息: '; +$PHPMAILER_LANG['smtp_detail'] = '详情:'; diff --git a/core/vendor/phpmailer/phpmailer/src/DSNConfigurator.php b/core/vendor/phpmailer/phpmailer/src/DSNConfigurator.php index ab707d2b4f..566c9618f5 100644 --- a/core/vendor/phpmailer/phpmailer/src/DSNConfigurator.php +++ b/core/vendor/phpmailer/phpmailer/src/DSNConfigurator.php @@ -80,9 +80,7 @@ private function parseDSN($dsn) $config = $this->parseUrl($dsn); if (false === $config || !isset($config['scheme']) || !isset($config['host'])) { - throw new Exception( - sprintf('Malformed DSN: "%s".', $dsn) - ); + throw new Exception('Malformed DSN'); } if (isset($config['query'])) { diff --git a/core/vendor/phpmailer/phpmailer/src/PHPMailer.php b/core/vendor/phpmailer/phpmailer/src/PHPMailer.php index a644d2cac7..7f56ea2345 100644 --- a/core/vendor/phpmailer/phpmailer/src/PHPMailer.php +++ b/core/vendor/phpmailer/phpmailer/src/PHPMailer.php @@ -750,7 +750,7 @@ class PHPMailer * * @var string */ - const VERSION = '6.8.0'; + const VERSION = '6.8.1'; /** * Error severity: message only, continue processing. @@ -795,7 +795,7 @@ class PHPMailer * The maximum line length supported by mail(). * * Background: mail() will sometimes corrupt messages - * with headers headers longer than 65 chars, see #818. + * with headers longer than 65 chars, see #818. * * @var int */ diff --git a/core/vendor/phpmailer/phpmailer/src/POP3.php b/core/vendor/phpmailer/phpmailer/src/POP3.php index d025689e80..b92a1f2488 100644 --- a/core/vendor/phpmailer/phpmailer/src/POP3.php +++ b/core/vendor/phpmailer/phpmailer/src/POP3.php @@ -46,7 +46,7 @@ class POP3 * * @var string */ - const VERSION = '6.8.0'; + const VERSION = '6.8.1'; /** * Default POP3 port number. diff --git a/core/vendor/phpmailer/phpmailer/src/SMTP.php b/core/vendor/phpmailer/phpmailer/src/SMTP.php index fc4b781a5f..2b63840304 100644 --- a/core/vendor/phpmailer/phpmailer/src/SMTP.php +++ b/core/vendor/phpmailer/phpmailer/src/SMTP.php @@ -35,7 +35,7 @@ class SMTP * * @var string */ - const VERSION = '6.8.0'; + const VERSION = '6.8.1'; /** * SMTP line break constant. @@ -704,7 +704,7 @@ public function close() * Send an SMTP DATA command. * Issues a data command and sends the msg_data to the server, * finalizing the mail transaction. $msg_data is the message - * that is to be send with the headers. Each header needs to be + * that is to be sent with the headers. Each header needs to be * on a single line followed by a with the message headers * and the message body being separated by an additional . * Implements RFC 821: DATA . @@ -732,7 +732,7 @@ public function data($msg_data) $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data)); /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field - * of the first line (':' separated) does not contain a space then it _should_ be a header and we will + * of the first line (':' separated) does not contain a space then it _should_ be a header, and we will * process all lines before a blank line as headers. */ diff --git a/core/vendor/predis/predis/README.md b/core/vendor/predis/predis/README.md index 913af580cf..d737547068 100644 --- a/core/vendor/predis/predis/README.md +++ b/core/vendor/predis/predis/README.md @@ -396,6 +396,16 @@ $response = $client->lpushrand('random_values', $seed = mt_rand()); ### Customizable connection backends ### +Predis can use different connection backends to connect to Redis. The builtin Relay integration +leverages the [Relay](https://github.com/cachewerk/relay) extension for PHP for major performance +gains, by caching a partial replica of the Redis dataset in PHP shared runtime memory. + +```php +$client = new Predis\Client('tcp://127.0.0.1', [ + 'connections' => 'relay', +]); +``` + Developers can create their own connection classes to support whole new network backends, extend existing classes or provide completely different implementations. Connection classes must implement `Predis\Connection\NodeConnectionInterface` or extend `Predis\Connection\AbstractConnection`: @@ -439,23 +449,6 @@ be disabled. See [the tests README](tests/README.md) for more details about test Predis uses GitHub Actions for continuous integration and the history for past and current builds can be found [on its actions page](https://github.com/predis/predis/actions). - -## Other ## - - -### Project related links ### - -- [Source code](https://github.com/predis/predis) -- [Wiki](https://github.com/predis/predis/wiki) -- [Issue tracker](https://github.com/predis/predis/issues) - - -### Author ### - -- [Till Krüss](https://till.im) ([Twitter](http://twitter.com/tillkruss)) -- [Daniele Alessandri](mailto:suppakilla@gmail.com) ([twitter](http://twitter.com/JoL1hAHN)) - - ### License ### The code for Predis is distributed under the terms of the MIT license (see [LICENSE](LICENSE)). diff --git a/core/vendor/predis/predis/bin/create-command-test b/core/vendor/predis/predis/bin/create-command-test deleted file mode 100644 index 262bd53d04..0000000000 --- a/core/vendor/predis/predis/bin/create-command-test +++ /dev/null @@ -1,274 +0,0 @@ -#!/usr/bin/env php -options = $options; - } - - public static function fromCommandLine() - { - $parameters = array( - 'c:' => 'class:', - 'r::' => 'realm::', - 'o::' => 'output::', - 'x::' => 'overwrite::' - ); - - $getops = getopt(implode(array_keys($parameters)), $parameters); - - $options = array( - 'overwrite' => false, - 'tests' => __DIR__.'/../tests/Predis', - ); - - foreach ($getops as $option => $value) { - switch ($option) { - case 'c': - case 'class': - $options['class'] = $value; - break; - - case 'r': - case 'realm': - $options['realm'] = $value; - break; - - case 'o': - case 'output': - $options['output'] = $value; - break; - - case 'x': - case 'overwrite': - $options['overwrite'] = true; - break; - } - } - - if (!isset($options['class'])) { - throw new RuntimeException("Missing 'class' option."); - } - - if (!isset($options['realm'])) { - throw new RuntimeException("Missing 'realm' option."); - } - - $options['fqn'] = "Predis\\Command\\Redis\\{$options['class']}"; - $options['path'] = "Command/Redis/{$options['class']}.php"; - - $source = __DIR__.'/../src/'.$options['path']; - if (!file_exists($source)) { - throw new RuntimeException("Cannot find class file for {$options['fqn']} in $source."); - } - - if (!isset($options['output'])) { - $options['output'] = sprintf("%s/%s", $options['tests'], str_replace('.php', '_Test.php', $options['path'])); - } - - return new self($options); - } - - protected function getTestRealm() - { - if (empty($this->options['realm'])) { - throw new RuntimeException('Invalid value for realm has been specified (empty).'); - } - - return $this->options['realm']; - } - - public function generate() - { - $reflection = new ReflectionClass($class = $this->options['fqn']); - - if (!$reflection->isInstantiable()) { - throw new RuntimeException("Class $class must be instantiable, abstract classes or interfaces are not allowed."); - } - - if (!$reflection->implementsInterface('Predis\Command\CommandInterface')) { - throw new RuntimeException("Class $class must implement Predis\Command\CommandInterface."); - } - - /* - * @var CommandInterface - */ - $instance = $reflection->newInstance(); - - $buffer = $this->getTestCaseBuffer($instance); - - return $buffer; - } - - public function save() - { - $options = $this->options; - if (file_exists($options['output']) && !$options['overwrite']) { - throw new RuntimeException("File {$options['output']} already exist. Specify the --overwrite option to overwrite the existing file."); - } - file_put_contents($options['output'], $this->generate()); - } - - protected function getTestCaseBuffer(CommandInterface $instance) - { - $id = $instance->getId(); - $fqn = get_class($instance); - $fqnParts = explode('\\', $fqn); - $class = array_pop($fqnParts) . "Test"; - $realm = $this->getTestRealm(); - - $buffer =<<markTestIncomplete('This test has not been implemented yet.'); - - \$arguments = array(/* add arguments */); - \$expected = array(/* add arguments */); - - \$command = \$this->getCommand(); - \$command->setArguments(\$arguments); - - \$this->assertSame(\$expected, \$command->getArguments()); - } - - /** - * @group disconnected - */ - public function testParseResponse(): void - { - \$this->markTestIncomplete('This test has not been implemented yet.'); - - \$raw = null; - \$expected = null; - - \$command = \$this->getCommand(); - - \$this->assertSame(\$expected, \$command->parseResponse(\$raw)); - } - -PHP; - - if ($instance instanceof PrefixableCommandInterface) { - $buffer .=<<markTestIncomplete('This test has not been implemented yet.'); - - \$arguments = array(/* add arguments */); - \$expected = array(/* add arguments */); - - \$command = \$this->getCommandWithArgumentsArray(\$arguments); - \$command->prefixKeys('prefix:'); - - \$this->assertSame(\$expected, \$command->getArguments()); - } - - /** - * @group disconnected - */ - public function testPrefixKeysIgnoredOnEmptyArguments(): void - { - \$command = \$this->getCommand(); - \$command->prefixKeys('prefix:'); - - \$this->assertSame(array(), \$command->getArguments()); - } - -PHP; - } - - return "$buffer}\n"; - } -} - -// ------------------------------------------------------------------------- // - -require __DIR__.'/../autoload.php'; - -$generator = CommandTestCaseGenerator::fromCommandLine(); -$generator->save(); diff --git a/core/vendor/predis/predis/composer.json b/core/vendor/predis/predis/composer.json index 7968991c6f..f842e16a52 100644 --- a/core/vendor/predis/predis/composer.json +++ b/core/vendor/predis/predis/composer.json @@ -29,6 +29,9 @@ "phpstan/phpstan": "^1.9", "phpunit/phpunit": "^8.0 || ~9.4.4" }, + "suggest": { + "ext-relay": "Faster connection with in-memory caching (>=0.6.2)" + }, "scripts": { "phpstan": "phpstan analyse", "style": "php-cs-fixer fix --diff --dry-run", diff --git a/core/vendor/predis/predis/docker/unstable_cluster/Dockerfile b/core/vendor/predis/predis/docker/unstable_cluster/Dockerfile new file mode 100644 index 0000000000..a434dddce3 --- /dev/null +++ b/core/vendor/predis/predis/docker/unstable_cluster/Dockerfile @@ -0,0 +1,7 @@ +FROM redis/redis-stack-server:latest as rss + +COPY create_cluster.sh /create_cluster.sh +RUN ls -R /opt/redis-stack +RUN chmod a+x /create_cluster.sh + +ENTRYPOINT [ "/create_cluster.sh"] diff --git a/core/vendor/predis/predis/docker/unstable_cluster/create_cluster.sh b/core/vendor/predis/predis/docker/unstable_cluster/create_cluster.sh new file mode 100644 index 0000000000..b000a2ad7c --- /dev/null +++ b/core/vendor/predis/predis/docker/unstable_cluster/create_cluster.sh @@ -0,0 +1,47 @@ +#! /bin/bash + +mkdir -p /nodes +touch /nodes/nodemap +if [ -z ${START_PORT} ]; then + START_PORT=6372 +fi +if [ -z ${END_PORT} ]; then + END_PORT=6377 +fi +if [ ! -z "$3" ]; then + START_PORT=$2 + START_PORT=$3 +fi +echo "STARTING: ${START_PORT}" +echo "ENDING: ${END_PORT}" + +for PORT in `seq ${START_PORT} ${END_PORT}`; do + mkdir -p /nodes/$PORT + if [[ -e /redis.conf ]]; then + cp /redis.conf /nodes/$PORT/redis.conf + else + touch /nodes/$PORT/redis.conf + fi + cat << EOF >> /nodes/$PORT/redis.conf +port ${PORT} +cluster-enabled yes +daemonize yes +logfile /redis.log +dir /nodes/$PORT +EOF + + set -x + /opt/redis-stack/bin/redis-server /nodes/$PORT/redis.conf + sleep 1 + if [ $? -ne 0 ]; then + echo "Redis failed to start, exiting." + continue + fi + echo 127.0.0.1:$PORT >> /nodes/nodemap +done +if [ -z "${REDIS_PASSWORD}" ]; then + echo yes | /opt/redis-stack/bin/redis-cli --cluster create `seq -f 127.0.0.1:%g ${START_PORT} ${END_PORT}` --cluster-replicas 1 +else + echo yes | opt/redis-stack/bin/redis-cli -a ${REDIS_PASSWORD} --cluster create `seq -f 127.0.0.1:%g ${START_PORT} ${END_PORT}` --cluster-replicas 1 +fi +tail -f /redis.log diff --git a/core/vendor/predis/predis/docker/unstable_cluster/docker-compose.yml b/core/vendor/predis/predis/docker/unstable_cluster/docker-compose.yml new file mode 100644 index 0000000000..2829da39ad --- /dev/null +++ b/core/vendor/predis/predis/docker/unstable_cluster/docker-compose.yml @@ -0,0 +1,17 @@ +version: "3.9" +services: + cluster: + container_name: redis-cluster + build: + context: . + dockerfile: Dockerfile + ports: + - "6372:6372" + - "6373:6373" + - "6374:6374" + - "6375:6375" + - "6376:6376" + - "6377:6378" + volumes: + - "./redis.conf:/redis.conf:ro" + diff --git a/core/vendor/predis/predis/docker/unstable_cluster/redis.conf b/core/vendor/predis/predis/docker/unstable_cluster/redis.conf new file mode 100644 index 0000000000..71928253e6 --- /dev/null +++ b/core/vendor/predis/predis/docker/unstable_cluster/redis.conf @@ -0,0 +1,9 @@ +# Redis Cluster config file will be shared across all nodes. +# Do not change the following configurations that are already set: +# port, cluster-enabled, daemonize, logfile, dir +protected-mode no +loadmodule /opt/redis-stack/lib/redisearch.so +loadmodule /opt/redis-stack/lib/redisgraph.so +loadmodule /opt/redis-stack/lib/redistimeseries.so +loadmodule /opt/redis-stack/lib/rejson.so +loadmodule /opt/redis-stack/lib/redisbloom.so diff --git a/core/vendor/predis/predis/src/Client.php b/core/vendor/predis/predis/src/Client.php index 91c126f4b1..41bd1f3a38 100644 --- a/core/vendor/predis/predis/src/Client.php +++ b/core/vendor/predis/predis/src/Client.php @@ -25,9 +25,15 @@ use Predis\Connection\ConnectionInterface; use Predis\Connection\Parameters; use Predis\Connection\ParametersInterface; +use Predis\Connection\RelayConnection; use Predis\Monitor\Consumer as MonitorConsumer; +use Predis\Pipeline\Atomic; +use Predis\Pipeline\FireAndForget; use Predis\Pipeline\Pipeline; +use Predis\Pipeline\RelayAtomic; +use Predis\Pipeline\RelayPipeline; use Predis\PubSub\Consumer as PubSubConsumer; +use Predis\PubSub\RelayConsumer as RelayPubSubConsumer; use Predis\Response\ErrorInterface as ErrorResponseInterface; use Predis\Response\ResponseInterface; use Predis\Response\ServerException; @@ -47,7 +53,7 @@ */ class Client implements ClientInterface, IteratorAggregate { - public const VERSION = '2.1.2'; + public const VERSION = '2.2.1'; /** @var OptionsInterface */ private $options; @@ -262,6 +268,32 @@ public function getConnection() return $this->connection; } + /** + * Applies the configured serializer and compression to given value. + * + * @param mixed $value + * @return string + */ + public function pack($value) + { + return $this->connection instanceof RelayConnection + ? $this->connection->pack($value) + : $value; + } + + /** + * Deserializes and decompresses to given value. + * + * @param mixed $value + * @return string + */ + public function unpack($value) + { + return $this->connection instanceof RelayConnection + ? $this->connection->unpack($value) + : $value; + } + /** * Executes a command without filtering its arguments, parsing the response, * applying any prefix to keys or throwing exceptions on Redis errors even @@ -314,29 +346,29 @@ public function createCommand($commandID, $arguments = []) } /** - * @param $name + * @param string $name * @return ContainerInterface */ - public function __get($name) + public function __get(string $name) { return ContainerFactory::create($this, $name); } /** - * @param $name - * @param $value + * @param string $name + * @param mixed $value * @return mixed */ - public function __set($name, $value) + public function __set(string $name, $value) { throw new RuntimeException('Not allowed'); } /** - * @param $name + * @param string $name * @return mixed */ - public function __isset($name) + public function __isset(string $name) { throw new RuntimeException('Not allowed'); } @@ -435,19 +467,29 @@ public function pipeline(...$arguments) /** * Actual pipeline context initializer method. * - * @param array $options Options for the context. - * @param mixed $callable Optional callable used to execute the context. + * @param array|null $options Options for the context. + * @param mixed $callable Optional callable used to execute the context. * * @return Pipeline|array */ protected function createPipeline(array $options = null, $callable = null) { if (isset($options['atomic']) && $options['atomic']) { - $class = 'Predis\Pipeline\Atomic'; + $class = Atomic::class; } elseif (isset($options['fire-and-forget']) && $options['fire-and-forget']) { - $class = 'Predis\Pipeline\FireAndForget'; + $class = FireAndForget::class; } else { - $class = 'Predis\Pipeline\Pipeline'; + $class = Pipeline::class; + } + + if ($this->connection instanceof RelayConnection) { + if (isset($options['atomic']) && $options['atomic']) { + $class = RelayAtomic::class; + } elseif (isset($options['fire-and-forget']) && $options['fire-and-forget']) { + throw new NotSupportedException('The "relay" extension does not support fire-and-forget pipelines.'); + } else { + $class = RelayPipeline::class; + } } /* @@ -517,7 +559,11 @@ public function pubSubLoop(...$arguments) */ protected function createPubSub(array $options = null, $callable = null) { - $pubsub = new PubSubConsumer($this, $options); + if ($this->connection instanceof RelayConnection) { + $pubsub = new RelayPubSubConsumer($this, $options); + } else { + $pubsub = new PubSubConsumer($this, $options); + } if (!isset($callable)) { return $pubsub; diff --git a/core/vendor/predis/predis/src/ClientConfiguration.php b/core/vendor/predis/predis/src/ClientConfiguration.php new file mode 100644 index 0000000000..c70cd61cf6 --- /dev/null +++ b/core/vendor/predis/predis/src/ClientConfiguration.php @@ -0,0 +1,42 @@ + [ + ['name' => 'Json', 'commandPrefix' => 'JSON'], + ['name' => 'BloomFilter', 'commandPrefix' => 'BF'], + ['name' => 'CuckooFilter', 'commandPrefix' => 'CF'], + ['name' => 'CountMinSketch', 'commandPrefix' => 'CMS'], + ['name' => 'TDigest', 'commandPrefix' => 'TDIGEST'], + ['name' => 'TopK', 'commandPrefix' => 'TOPK'], + ['name' => 'Search', 'commandPrefix' => 'FT'], + ['name' => 'TimeSeries', 'commandPrefix' => 'TS'], + ], + ]; + + /** + * Returns available modules with configuration. + * + * @return array|string[][] + */ + public static function getModules(): array + { + return self::$config['modules']; + } +} diff --git a/core/vendor/predis/predis/src/ClientContextInterface.php b/core/vendor/predis/predis/src/ClientContextInterface.php index c241e83e84..a92f4949ba 100644 --- a/core/vendor/predis/predis/src/ClientContextInterface.php +++ b/core/vendor/predis/predis/src/ClientContextInterface.php @@ -14,10 +14,35 @@ use Predis\Command\Argument\Geospatial\ByInterface; use Predis\Command\Argument\Geospatial\FromInterface; +use Predis\Command\Argument\Search\AggregateArguments; +use Predis\Command\Argument\Search\AlterArguments; +use Predis\Command\Argument\Search\CreateArguments; +use Predis\Command\Argument\Search\DropArguments; +use Predis\Command\Argument\Search\ExplainArguments; +use Predis\Command\Argument\Search\ProfileArguments; +use Predis\Command\Argument\Search\SchemaFields\FieldInterface; +use Predis\Command\Argument\Search\SearchArguments; +use Predis\Command\Argument\Search\SugAddArguments; +use Predis\Command\Argument\Search\SugGetArguments; +use Predis\Command\Argument\Search\SynUpdateArguments; use Predis\Command\Argument\Server\LimitOffsetCount; use Predis\Command\Argument\Server\To; +use Predis\Command\Argument\TimeSeries\AddArguments; +use Predis\Command\Argument\TimeSeries\AlterArguments as TSAlterArguments; +use Predis\Command\Argument\TimeSeries\CreateArguments as TSCreateArguments; +use Predis\Command\Argument\TimeSeries\DecrByArguments; +use Predis\Command\Argument\TimeSeries\GetArguments; +use Predis\Command\Argument\TimeSeries\IncrByArguments; +use Predis\Command\Argument\TimeSeries\InfoArguments; +use Predis\Command\Argument\TimeSeries\MGetArguments; +use Predis\Command\Argument\TimeSeries\MRangeArguments; +use Predis\Command\Argument\TimeSeries\RangeArguments; use Predis\Command\CommandInterface; +use Predis\Command\Redis\Container\ACL; use Predis\Command\Redis\Container\FunctionContainer; +use Predis\Command\Redis\Container\Json\JSONDEBUG; +use Predis\Command\Redis\Container\Search\FTCONFIG; +use Predis\Command\Redis\Container\Search\FTCURSOR; /** * Interface defining a client-side context such as a pipeline or transaction. @@ -45,7 +70,16 @@ * @method $this ttl($key) * @method $this type($key) * @method $this append($key, $value) - * @method $this bitcount($key, $start = null, $end = null, string $index = 'byte') + * @method $this bfadd(string $key, $item) + * @method $this bfexists(string $key, $item) + * @method $this bfinfo(string $key, string $modifier = '') + * @method $this bfinsert(string $key, int $capacity = -1, float $error = -1, int $expansion = -1, bool $noCreate = false, bool $nonScaling = false, string ...$item) + * @method $this bfloadchunk(string $key, int $iterator, $data) + * @method $this bfmadd(string $key, ...$item) + * @method $this bfmexists(string $key, ...$item) + * @method $this bfreserve(string $key, float $errorRate, int $capacity, int $expansion = -1, bool $nonScaling = false) + * @method $this bfscandump(string $key, int $iterator) + * @method $this bitcount(string $key, $start = null, $end = null, string $index = 'byte') * @method $this bitop($operation, $destkey, $key) * @method $this bitfield($key, $subcommand, ...$subcommandArg) * @method $this bitpos($key, $bit, $start = null, $end = null, string $index = 'byte') @@ -53,10 +87,51 @@ * @method $this bzpopmax(array $keys, int $timeout) * @method $this bzpopmin(array $keys, int $timeout) * @method $this bzmpop(int $timeout, array $keys, string $modifier = 'min', int $count = 1) + * @method $this cfadd(string $key, $item) + * @method $this cfaddnx(string $key, $item) + * @method $this cfcount(string $key, $item) + * @method $this cfdel(string $key, $item) + * @method $this cfexists(string $key, $item) + * @method $this cfloadchunk(string $key, int $iterator, $data) + * @method $this cfmexists(string $key, ...$item) + * @method $this cfinfo(string $key) + * @method $this cfinsert(string $key, int $capacity = -1, bool $noCreate = false, string ...$item) + * @method $this cfinsertnx(string $key, int $capacity = -1, bool $noCreate = false, string ...$item) + * @method $this cfreserve(string $key, int $capacity, int $bucketSize = -1, int $maxIterations = -1, int $expansion = -1) + * @method $this cfscandump(string $key, int $iterator) + * @method $this cmsincrby(string $key, string|int...$itemIncrementDictionary) + * @method $this cmsinfo(string $key) + * @method $this cmsinitbydim(string $key, int $width, int $depth) + * @method $this cmsinitbyprob(string $key, float $errorRate, float $probability) + * @method $this cmsmerge(string $destination, array $sources, array $weights = []) + * @method $this cmsquery(string $key, string ...$item) * @method $this decr($key) * @method $this decrby($key, $decrement) * @method $this failover(?To $to = null, bool $abort = false, int $timeout = -1) * @method $this fcall(string $function, array $keys, ...$args) + * @method $this fcall_ro(string $function, array $keys, ...$args) + * @method $this ftaggregate(string $index, string $query, ?AggregateArguments $arguments = null) + * @method $this ftaliasadd(string $alias, string $index) + * @method $this ftaliasdel(string $alias) + * @method $this ftaliasupdate(string $alias, string $index) + * @method $this ftalter(string $index, FieldInterface[] $schema, ?AlterArguments $arguments = null) + * @method $this ftcreate(string $index, FieldInterface[] $schema, ?CreateArguments $arguments = null) + * @method $this ftdictadd(string $dict, ...$term) + * @method $this ftdictdel(string $dict, ...$term) + * @method $this ftdictdump(string $dict) + * @method $this ftdropindex(string $index, ?DropArguments $arguments = null) + * @method $this ftexplain(string $index, string $query, ?ExplainArguments $arguments = null) + * @method $this ftinfo(string $index) + * @method $this ftprofile(string $index, ProfileArguments $arguments) + * @method $this ftsearch(string $index, string $query, ?SearchArguments $arguments = null) + * @method $this ftspellcheck(string $index, string $query, ?SearchArguments $arguments = null) + * @method $this ftsugadd(string $key, string $string, float $score, ?SugAddArguments $arguments = null) + * @method $this ftsugdel(string $key, string $string) + * @method $this ftsugget(string $key, string $prefix, ?SugGetArguments $arguments = null) + * @method $this ftsuglen(string $key) + * @method $this ftsyndump(string $index) + * @method $this ftsynupdate(string $index, string $synonymGroupId, ?SynUpdateArguments $arguments = null, string ...$terms) + * @method $this fttagvals(string $index, string $fieldName) * @method $this get($key) * @method $this getbit($key, $offset) * @method $this getex(string $key, $modifier = '', $value = false) @@ -92,6 +167,28 @@ * @method $this hsetnx($key, $field, $value) * @method $this hvals($key) * @method $this hstrlen($key, $field) + * @method $this jsonarrappend(string $key, string $path = '$', ...$value) + * @method $this jsonarrindex(string $key, string $path, string $value, int $start = 0, int $stop = 0) + * @method $this jsonarrinsert(string $key, string $path, int $index, string ...$value) + * @method $this jsonarrlen(string $key, string $path = '$') + * @method $this jsonarrpop(string $key, string $path = '$', int $index = -1) + * @method $this jsonarrtrim(string $key, string $path, int $start, int $stop) + * @method $this jsonclear(string $key, string $path = '$') + * @method $this jsondel(string $key, string $path = '$') + * @method $this jsonforget(string $key, string $path = '$') + * @method $this jsonget(string $key, string $indent = '', string $newline = '', string $space = '', string ...$paths) + * @method $this jsonnumincrby(string $key, string $path, int $value) + * @method $this jsonmerge(string $key, string $path, string $value) + * @method $this jsonmget(array $keys, string $path) + * @method $this jsonmset(string ...$keyPathValue) + * @method $this jsonobjkeys(string $key, string $path = '$') + * @method $this jsonobjlen(string $key, string $path = '$') + * @method $this jsonresp(string $key, string $path = '$') + * @method $this jsonset(string $key, string $path, string $value, ?string $subcommand = null) + * @method $this jsonstrappend(string $key, string $path, string $value) + * @method $this jsonstrlen(string $key, string $path = '$') + * @method $this jsontoggle(string $key, string $path) + * @method $this jsontype(string $key, string $path = '$') * @method $this blmove(string $source, string $destination, string $where, string $to, int $timeout) * @method $this blpop(array|string $keys, $timeout) * @method $this brpop(array|string $keys, $timeout) @@ -130,6 +227,43 @@ * @method $this sscan($key, $cursor, array $options = null) * @method $this sunion(array|string $keys) * @method $this sunionstore($destination, array|string $keys) + * @method $this tdigestadd(string $key, float ...$value) + * @method $this tdigestbyrank(string $key, int ...$rank) + * @method $this tdigestbyrevrank(string $key, int ...$reverseRank) + * @method $this tdigestcdf(string $key, int ...$value) + * @method $this tdigestcreate(string $key, int $compression = 0) + * @method $this tdigestinfo(string $key) + * @method $this tdigestmax(string $key) + * @method $this tdigestmerge(string $destinationKey, array $sourceKeys, int $compression = 0, bool $override = false) + * @method $this tdigestquantile(string $key, float ...$quantile) + * @method $this tdigestmin(string $key) + * @method $this tdigestrank(string $key, ...$value) + * @method $this tdigestreset(string $key) + * @method $this tdigestrevrank(string $key, float ...$value) + * @method $this tdigesttrimmed_mean(string $key, float $lowCutQuantile, float $highCutQuantile) + * @method $this topkadd(string $key, ...$items) + * @method $this topkincrby(string $key, ...$itemIncrement) + * @method $this topkinfo(string $key) + * @method $this topklist(string $key, bool $withCount = false) + * @method $this topkquery(string $key, ...$items) + * @method $this topkreserve(string $key, int $topK, int $width = 8, int $depth = 7, float $decay = 0.9) + * @method $this tsadd(string $key, int $timestamp, float $value, ?AddArguments $arguments = null) + * @method $this tsalter(string $key, ?TSAlterArguments $arguments = null) + * @method $this tscreate(string $key, ?TSCreateArguments $arguments = null) + * @method $this tscreaterule(string $sourceKey, string $destKey, string $aggregator, int $bucketDuration, int $alignTimestamp = 0) + * @method $this tsdecrby(string $key, float $value, ?DecrByArguments $arguments = null) + * @method $this tsdel(string $key, int $fromTimestamp, int $toTimestamp) + * @method $this tsdeleterule(string $sourceKey, string $destKey) + * @method $this tsget(string $key, GetArguments $arguments = null) + * @method $this tsincrby(string $key, float $value, ?IncrByArguments $arguments = null) + * @method $this tsinfo(string $key, ?InfoArguments $arguments = null) + * @method $this tsmadd(mixed ...$keyTimestampValue) + * @method $this tsmget(MGetArguments $arguments, string ...$filterExpression) + * @method $this tsmrange($fromTimestamp, $toTimestamp, MRangeArguments $arguments) + * @method $this tsmrevrange($fromTimestamp, $toTimestamp, MRangeArguments $arguments) + * @method $this tsqueryindex(string ...$filterExpression) + * @method $this tsrange(string $key, $fromTimestamp, $toTimestamp, ?RangeArguments $arguments = null) + * @method $this tsrevrange(string $key, $fromTimestamp, $toTimestamp, ?RangeArguments $arguments = null) * @method $this zadd($key, array $membersAndScoresDictionary) * @method $this zcard($key) * @method $this zcount($key, $min, $max) @@ -170,12 +304,14 @@ * @method $this exec() * @method $this multi() * @method $this unwatch() + * @method $this waitaof(int $numLocal, int $numReplicas, int $timeout) * @method $this watch($key) * @method $this eval($script, $numkeys, $keyOrArg1 = null, $keyOrArgN = null) * @method $this eval_ro(string $script, array $keys, ...$argument) * @method $this evalsha($script, $numkeys, $keyOrArg1 = null, $keyOrArgN = null) * @method $this evalsha_ro(string $sha1, array $keys, ...$argument) * @method $this script($subcommand, $argument = null) + * @method $this shutdown(bool $noSave = null, bool $now = false, bool $force = false, bool $abort = false) * @method $this auth($password) * @method $this echo($message) * @method $this ping($message = null) @@ -205,6 +341,10 @@ * * Container commands * @property FunctionContainer $function + * @property FTCONFIG $ftconfig + * @property FTCURSOR $ftcursor + * @property JSONDEBUG $jsondebug + * @property ACL $acl */ interface ClientContextInterface { diff --git a/core/vendor/predis/predis/src/ClientInterface.php b/core/vendor/predis/predis/src/ClientInterface.php index f04f1a9f5b..4f95400b1e 100644 --- a/core/vendor/predis/predis/src/ClientInterface.php +++ b/core/vendor/predis/predis/src/ClientInterface.php @@ -14,11 +14,36 @@ use Predis\Command\Argument\Geospatial\ByInterface; use Predis\Command\Argument\Geospatial\FromInterface; +use Predis\Command\Argument\Search\AggregateArguments; +use Predis\Command\Argument\Search\AlterArguments; +use Predis\Command\Argument\Search\CreateArguments; +use Predis\Command\Argument\Search\DropArguments; +use Predis\Command\Argument\Search\ExplainArguments; +use Predis\Command\Argument\Search\ProfileArguments; +use Predis\Command\Argument\Search\SchemaFields\FieldInterface; +use Predis\Command\Argument\Search\SearchArguments; +use Predis\Command\Argument\Search\SugAddArguments; +use Predis\Command\Argument\Search\SugGetArguments; +use Predis\Command\Argument\Search\SynUpdateArguments; use Predis\Command\Argument\Server\LimitOffsetCount; use Predis\Command\Argument\Server\To; +use Predis\Command\Argument\TimeSeries\AddArguments; +use Predis\Command\Argument\TimeSeries\AlterArguments as TSAlterArguments; +use Predis\Command\Argument\TimeSeries\CreateArguments as TSCreateArguments; +use Predis\Command\Argument\TimeSeries\DecrByArguments; +use Predis\Command\Argument\TimeSeries\GetArguments; +use Predis\Command\Argument\TimeSeries\IncrByArguments; +use Predis\Command\Argument\TimeSeries\InfoArguments; +use Predis\Command\Argument\TimeSeries\MGetArguments; +use Predis\Command\Argument\TimeSeries\MRangeArguments; +use Predis\Command\Argument\TimeSeries\RangeArguments; use Predis\Command\CommandInterface; use Predis\Command\FactoryInterface; +use Predis\Command\Redis\Container\ACL; use Predis\Command\Redis\Container\FunctionContainer; +use Predis\Command\Redis\Container\Json\JSONDEBUG; +use Predis\Command\Redis\Container\Search\FTCONFIG; +use Predis\Command\Redis\Container\Search\FTCURSOR; use Predis\Configuration\OptionsInterface; use Predis\Connection\ConnectionInterface; use Predis\Response\Status; @@ -54,6 +79,15 @@ * @method int ttl(string $key) * @method mixed type(string $key) * @method int append(string $key, $value) + * @method int bfadd(string $key, $item) + * @method int bfexists(string $key, $item) + * @method array bfinfo(string $key, string $modifier = '') + * @method array bfinsert(string $key, int $capacity = -1, float $error = -1, int $expansion = -1, bool $noCreate = false, bool $nonScaling = false, string ...$item) + * @method Status bfloadchunk(string $key, int $iterator, $data) + * @method array bfmadd(string $key, ...$item) + * @method array bfmexists(string $key, ...$item) + * @method Status bfreserve(string $key, float $errorRate, int $capacity, int $expansion = -1, bool $nonScaling = false) + * @method array bfscandump(string $key, int $iterator) * @method int bitcount(string $key, $start = null, $end = null, string $index = 'byte') * @method int bitop($operation, $destkey, $key) * @method array|null bitfield(string $key, $subcommand, ...$subcommandArg) @@ -62,10 +96,51 @@ * @method array bzpopmax(array $keys, int $timeout) * @method array bzpopmin(array $keys, int $timeout) * @method array bzmpop(int $timeout, array $keys, string $modifier = 'min', int $count = 1) + * @method int cfadd(string $key, $item) + * @method int cfaddnx(string $key, $item) + * @method int cfcount(string $key, $item) + * @method int cfdel(string $key, $item) + * @method int cfexists(string $key, $item) + * @method Status cfloadchunk(string $key, int $iterator, $data) + * @method int cfmexists(string $key, ...$item) + * @method array cfinfo(string $key) + * @method array cfinsert(string $key, int $capacity = -1, bool $noCreate = false, string ...$item) + * @method array cfinsertnx(string $key, int $capacity = -1, bool $noCreate = false, string ...$item) + * @method Status cfreserve(string $key, int $capacity, int $bucketSize = -1, int $maxIterations = -1, int $expansion = -1) + * @method array cfscandump(string $key, int $iterator) + * @method array cmsincrby(string $key, string|int...$itemIncrementDictionary) + * @method array cmsinfo(string $key) + * @method Status cmsinitbydim(string $key, int $width, int $depth) + * @method Status cmsinitbyprob(string $key, float $errorRate, float $probability) + * @method Status cmsmerge(string $destination, array $sources, array $weights = []) + * @method array cmsquery(string $key, string ...$item) * @method int decr(string $key) * @method int decrby(string $key, int $decrement) * @method Status failover(?To $to = null, bool $abort = false, int $timeout = -1) * @method mixed fcall(string $function, array $keys, ...$args) + * @method mixed fcall_ro(string $function, array $keys, ...$args) + * @method array ftaggregate(string $index, string $query, ?AggregateArguments $arguments = null) + * @method Status ftaliasadd(string $alias, string $index) + * @method Status ftaliasdel(string $alias) + * @method Status ftaliasupdate(string $alias, string $index) + * @method Status ftalter(string $index, FieldInterface[] $schema, ?AlterArguments $arguments = null) + * @method Status ftcreate(string $index, FieldInterface[] $schema, ?CreateArguments $arguments = null) + * @method int ftdictadd(string $dict, ...$term) + * @method int ftdictdel(string $dict, ...$term) + * @method array ftdictdump(string $dict) + * @method Status ftdropindex(string $index, ?DropArguments $arguments = null) + * @method string ftexplain(string $index, string $query, ?ExplainArguments $arguments = null) + * @method array ftinfo(string $index) + * @method array ftprofile(string $index, ProfileArguments $arguments) + * @method array ftsearch(string $index, string $query, ?SearchArguments $arguments = null) + * @method array ftspellcheck(string $index, string $query, ?SearchArguments $arguments = null) + * @method int ftsugadd(string $key, string $string, float $score, ?SugAddArguments $arguments = null) + * @method int ftsugdel(string $key, string $string) + * @method array ftsugget(string $key, string $prefix, ?SugGetArguments $arguments = null) + * @method int ftsuglen(string $key) + * @method array ftsyndump(string $index) + * @method Status ftsynupdate(string $index, string $synonymGroupId, ?SynUpdateArguments $arguments = null, string ...$terms) + * @method array fttagvals(string $index, string $fieldName) * @method string|null get(string $key) * @method int getbit(string $key, $offset) * @method int|null getex(string $key, $modifier = '', $value = false) @@ -101,6 +176,28 @@ * @method int hsetnx(string $key, string $field, string $value) * @method array hvals(string $key) * @method int hstrlen(string $key, string $field) + * @method array jsonarrappend(string $key, string $path = '$', ...$value) + * @method array jsonarrindex(string $key, string $path, string $value, int $start = 0, int $stop = 0) + * @method array jsonarrinsert(string $key, string $path, int $index, string ...$value) + * @method array jsonarrlen(string $key, string $path = '$') + * @method array jsonarrpop(string $key, string $path = '$', int $index = -1) + * @method int jsonclear(string $key, string $path = '$') + * @method array jsonarrtrim(string $key, string $path, int $start, int $stop) + * @method int jsondel(string $key, string $path = '$') + * @method int jsonforget(string $key, string $path = '$') + * @method string jsonget(string $key, string $indent = '', string $newline = '', string $space = '', string ...$paths) + * @method string jsonnumincrby(string $key, string $path, int $value) + * @method Status jsonmerge(string $key, string $path, string $value) + * @method array jsonmget(array $keys, string $path) + * @method Status jsonmset(string ...$keyPathValue) + * @method array jsonobjkeys(string $key, string $path = '$') + * @method array jsonobjlen(string $key, string $path = '$') + * @method array jsonresp(string $key, string $path = '$') + * @method string jsonset(string $key, string $path, string $value, ?string $subcommand = null) + * @method array jsonstrappend(string $key, string $path, string $value) + * @method array jsonstrlen(string $key, string $path = '$') + * @method array jsontoggle(string $key, string $path) + * @method array jsontype(string $key, string $path = '$') * @method string blmove(string $source, string $destination, string $where, string $to, int $timeout) * @method array|null blpop(array|string $keys, int|float $timeout) * @method array|null brpop(array|string $keys, int|float $timeout) @@ -140,6 +237,43 @@ * @method string[] sunion(array|string $keys) * @method int sunionstore(string $destination, array|string $keys) * @method int touch(string[]|string $keyOrKeys, string ...$keys = null) + * @method Status tdigestadd(string $key, float ...$value) + * @method array tdigestbyrank(string $key, int ...$rank) + * @method array tdigestbyrevrank(string $key, int ...$reverseRank) + * @method array tdigestcdf(string $key, int ...$value) + * @method Status tdigestcreate(string $key, int $compression = 0) + * @method array tdigestinfo(string $key) + * @method string tdigestmax(string $key) + * @method Status tdigestmerge(string $destinationKey, array $sourceKeys, int $compression = 0, bool $override = false) + * @method string[] tdigestquantile(string $key, float ...$quantile) + * @method string tdigestmin(string $key) + * @method array tdigestrank(string $key, float ...$value) + * @method Status tdigestreset(string $key) + * @method array tdigestrevrank(string $key, float ...$value) + * @method string tdigesttrimmed_mean(string $key, float $lowCutQuantile, float $highCutQuantile) + * @method array topkadd(string $key, ...$items) + * @method array topkincrby(string $key, ...$itemIncrement) + * @method array topkinfo(string $key) + * @method array topklist(string $key, bool $withCount = false) + * @method array topkquery(string $key, ...$items) + * @method Status topkreserve(string $key, int $topK, int $width = 8, int $depth = 7, float $decay = 0.9) + * @method int tsadd(string $key, int $timestamp, float $value, ?AddArguments $arguments = null) + * @method Status tsalter(string $key, ?TSAlterArguments $arguments = null) + * @method Status tscreate(string $key, ?TSCreateArguments $arguments = null) + * @method Status tscreaterule(string $sourceKey, string $destKey, string $aggregator, int $bucketDuration, int $alignTimestamp = 0) + * @method int tsdecrby(string $key, float $value, ?DecrByArguments $arguments = null) + * @method int tsdel(string $key, int $fromTimestamp, int $toTimestamp) + * @method Status tsdeleterule(string $sourceKey, string $destKey) + * @method array tsget(string $key, GetArguments $arguments = null) + * @method int tsincrby(string $key, float $value, ?IncrByArguments $arguments = null) + * @method array tsinfo(string $key, ?InfoArguments $arguments = null) + * @method array tsmadd(mixed ...$keyTimestampValue) + * @method array tsmget(MGetArguments $arguments, string ...$filterExpression) + * @method array tsmrange($fromTimestamp, $toTimestamp, MRangeArguments $arguments) + * @method array tsmrevrange($fromTimestamp, $toTimestamp, MRangeArguments $arguments) + * @method array tsqueryindex(string ...$filterExpression) + * @method array tsrange(string $key, $fromTimestamp, $toTimestamp, ?RangeArguments $arguments = null) + * @method array tsrevrange(string $key, $fromTimestamp, $toTimestamp, ?RangeArguments $arguments = null) * @method string xadd(string $key, array $dictionary, string $id = '*', array $options = null) * @method int xdel(string $key, string ...$id) * @method int xlen(string $key) @@ -188,12 +322,14 @@ * @method array|null exec() * @method mixed multi() * @method mixed unwatch() + * @method array waitaof(int $numLocal, int $numReplicas, int $timeout) * @method mixed watch(string $key) * @method mixed eval(string $script, int $numkeys, string ...$keyOrArg = null) * @method mixed eval_ro(string $script, array $keys, ...$argument) * @method mixed evalsha(string $script, int $numkeys, string ...$keyOrArg = null) * @method mixed evalsha_ro(string $sha1, array $keys, ...$argument) * @method mixed script($subcommand, $argument = null) + * @method Status shutdown(bool $noSave = null, bool $now = false, bool $force = false, bool $abort = false) * @method mixed auth(string $password) * @method string echo(string $message) * @method mixed ping(string $message = null) @@ -223,6 +359,10 @@ * * Container commands * @property FunctionContainer $function + * @property FTCONFIG $ftconfig + * @property FTCURSOR $ftcursor + * @property JSONDEBUG $jsondebug + * @property ACL $acl */ interface ClientInterface { diff --git a/core/vendor/predis/predis/src/Cluster/ClusterStrategy.php b/core/vendor/predis/predis/src/Cluster/ClusterStrategy.php index b12b8b0fe4..8b69ffdee3 100644 --- a/core/vendor/predis/predis/src/Cluster/ClusterStrategy.php +++ b/core/vendor/predis/predis/src/Cluster/ClusterStrategy.php @@ -53,6 +53,7 @@ protected function getDefaultCommands() 'SORT' => [$this, 'getKeyFromSortCommand'], 'DUMP' => $getKeyFromFirstArgument, 'RESTORE' => $getKeyFromFirstArgument, + 'FLUSHDB' => [$this, 'getFakeKey'], /* commands operating on string values */ 'APPEND' => $getKeyFromFirstArgument, @@ -163,6 +164,9 @@ protected function getDefaultCommands() 'EVAL' => [$this, 'getKeyFromScriptingCommands'], 'EVALSHA' => [$this, 'getKeyFromScriptingCommands'], + /* server */ + 'INFO' => [$this, 'getFakeKey'], + /* commands performing geospatial operations */ 'GEOADD' => $getKeyFromFirstArgument, 'GEOHASH' => $getKeyFromFirstArgument, @@ -216,6 +220,16 @@ public function setCommandHandler($commandID, $callback = null) $this->commands[$commandID] = $callback; } + /** + * Get fake key for commands with no key argument. + * + * @return string + */ + protected function getFakeKey(): string + { + return 'key'; + } + /** * Extracts the key from the first argument of a command instance. * diff --git a/core/vendor/predis/predis/src/Cluster/SlotMap.php b/core/vendor/predis/predis/src/Cluster/SlotMap.php index 0557c25e1f..1af63077a6 100644 --- a/core/vendor/predis/predis/src/Cluster/SlotMap.php +++ b/core/vendor/predis/predis/src/Cluster/SlotMap.php @@ -19,6 +19,7 @@ use OutOfBoundsException; use Predis\Connection\NodeConnectionInterface; use ReturnTypeWillChange; +use Traversable; /** * Slot map for redis-cluster. @@ -198,7 +199,7 @@ public function count() /** * Returns an iterator over the slot map. * - * @return ArrayIterator + * @return Traversable */ #[ReturnTypeWillChange] public function getIterator() diff --git a/core/vendor/predis/predis/src/Collection/Iterator/CursorBasedIterator.php b/core/vendor/predis/predis/src/Collection/Iterator/CursorBasedIterator.php index baa3a7c964..946bbc3a09 100644 --- a/core/vendor/predis/predis/src/Collection/Iterator/CursorBasedIterator.php +++ b/core/vendor/predis/predis/src/Collection/Iterator/CursorBasedIterator.php @@ -138,7 +138,7 @@ protected function extractNext() } /** - * {@inheritdoc} + * @return void */ #[ReturnTypeWillChange] public function rewind() @@ -148,7 +148,7 @@ public function rewind() } /** - * {@inheritdoc} + * @return mixed */ #[ReturnTypeWillChange] public function current() @@ -157,7 +157,7 @@ public function current() } /** - * {@inheritdoc} + * @return int|null */ #[ReturnTypeWillChange] public function key() @@ -166,7 +166,7 @@ public function key() } /** - * {@inheritdoc} + * @return void */ #[ReturnTypeWillChange] public function next() @@ -186,7 +186,7 @@ public function next() } /** - * {@inheritdoc} + * @return bool */ #[ReturnTypeWillChange] public function valid() diff --git a/core/vendor/predis/predis/src/Collection/Iterator/ListKey.php b/core/vendor/predis/predis/src/Collection/Iterator/ListKey.php index 9f4a21ca53..79ab3aa192 100644 --- a/core/vendor/predis/predis/src/Collection/Iterator/ListKey.php +++ b/core/vendor/predis/predis/src/Collection/Iterator/ListKey.php @@ -128,7 +128,7 @@ protected function extractNext() } /** - * {@inheritdoc} + * @return void */ #[ReturnTypeWillChange] public function rewind() @@ -138,7 +138,7 @@ public function rewind() } /** - * {@inheritdoc} + * @return mixed */ #[ReturnTypeWillChange] public function current() @@ -147,7 +147,7 @@ public function current() } /** - * {@inheritdoc} + * @return int|null */ #[ReturnTypeWillChange] public function key() @@ -156,7 +156,7 @@ public function key() } /** - * {@inheritdoc} + * @return void */ #[ReturnTypeWillChange] public function next() @@ -173,7 +173,7 @@ public function next() } /** - * {@inheritdoc} + * @return bool */ #[ReturnTypeWillChange] public function valid() diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/AggregateArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/AggregateArguments.php new file mode 100644 index 0000000000..950967070f --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/AggregateArguments.php @@ -0,0 +1,161 @@ + 'ASC', + 'desc' => 'DESC', + ]; + + /** + * Loads document attributes from the source document. + * + * @param string ...$fields Could be just '*' to load all fields + * @return $this + */ + public function load(string ...$fields): self + { + $arguments = func_get_args(); + + $this->arguments[] = 'LOAD'; + + if ($arguments[0] === '*') { + $this->arguments[] = '*'; + + return $this; + } + + $this->arguments[] = count($arguments); + $this->arguments = array_merge($this->arguments, $arguments); + + return $this; + } + + /** + * Loads document attributes from the source document. + * + * @param string ...$properties + * @return $this + */ + public function groupBy(string ...$properties): self + { + $arguments = func_get_args(); + + array_push($this->arguments, 'GROUPBY', count($arguments)); + $this->arguments = array_merge($this->arguments, $arguments); + + return $this; + } + + /** + * Groups the results in the pipeline based on one or more properties. + * + * If you want to add alias property to your argument just add "true" value in arguments enumeration, + * next value will be considered as alias to previous one. + * + * Example: 'argument', true, 'name' => 'argument' AS 'name' + * + * @param string $function + * @param string|bool ...$argument + * @return $this + */ + public function reduce(string $function, ...$argument): self + { + $arguments = func_get_args(); + $functionValue = array_shift($arguments); + $argumentsCounter = 0; + + for ($i = 0, $iMax = count($arguments); $i < $iMax; $i++) { + if (true === $arguments[$i]) { + $arguments[$i] = 'AS'; + $i++; + continue; + } + + $argumentsCounter++; + } + + array_push($this->arguments, 'REDUCE', $functionValue); + $this->arguments = array_merge($this->arguments, [$argumentsCounter], $arguments); + + return $this; + } + + /** + * Sorts the pipeline up until the point of SORTBY, using a list of properties. + * + * @param int $max + * @param string ...$properties Enumeration of properties, including sorting direction (ASC, DESC) + * @return $this + */ + public function sortBy(int $max = 0, ...$properties): self + { + $arguments = func_get_args(); + $maxValue = array_shift($arguments); + + $this->arguments[] = 'SORTBY'; + $this->arguments = array_merge($this->arguments, [count($arguments)], $arguments); + + if ($maxValue !== 0) { + array_push($this->arguments, 'MAX', $maxValue); + } + + return $this; + } + + /** + * Applies a 1-to-1 transformation on one or more properties and either stores the result + * as a new property down the pipeline or replaces any property using this transformation. + * + * @param string $expression + * @param string $as + * @return $this + */ + public function apply(string $expression, string $as = ''): self + { + array_push($this->arguments, 'APPLY', $expression); + + if ($as !== '') { + array_push($this->arguments, 'AS', $as); + } + + return $this; + } + + /** + * Scan part of the results with a quicker alternative than LIMIT. + * + * @param int $readSize + * @param int $idleTime + * @return $this + */ + public function withCursor(int $readSize = 0, int $idleTime = 0): self + { + $this->arguments[] = 'WITHCURSOR'; + + if ($readSize !== 0) { + array_push($this->arguments, 'COUNT', $readSize); + } + + if ($idleTime !== 0) { + array_push($this->arguments, 'MAXIDLE', $idleTime); + } + + return $this; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/AlterArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/AlterArguments.php new file mode 100644 index 0000000000..5acd2fe1ef --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/AlterArguments.php @@ -0,0 +1,17 @@ +arguments[] = 'LANGUAGE'; + $this->arguments[] = $defaultLanguage; + + return $this; + } + + /** + * Selects the dialect version under which to execute the query. + * If not specified, the query will execute under the default dialect version + * set during module initial loading or via FT.CONFIG SET command. + * + * @param string $dialect + * @return $this + */ + public function dialect(string $dialect): self + { + $this->arguments[] = 'DIALECT'; + $this->arguments[] = $dialect; + + return $this; + } + + /** + * If set, does not scan and index. + * + * @return $this + */ + public function skipInitialScan(): self + { + $this->arguments[] = 'SKIPINITIALSCAN'; + + return $this; + } + + /** + * Adds an arbitrary, binary safe payload that is exposed to custom scoring functions. + * + * @param string $payload + * @return $this + */ + public function payload(string $payload): self + { + $this->arguments[] = 'PAYLOAD'; + $this->arguments[] = $payload; + + return $this; + } + + /** + * Also returns the relative internal score of each document. + * + * @return $this + */ + public function withScores(): self + { + $this->arguments[] = 'WITHSCORES'; + + return $this; + } + + /** + * Retrieves optional document payloads. + * + * @return $this + */ + public function withPayloads(): self + { + $this->arguments[] = 'WITHPAYLOADS'; + + return $this; + } + + /** + * Does not try to use stemming for query expansion but searches the query terms verbatim. + * + * @return $this + */ + public function verbatim(): self + { + $this->arguments[] = 'VERBATIM'; + + return $this; + } + + /** + * Overrides the timeout parameter of the module. + * + * @param int $timeout + * @return $this + */ + public function timeout(int $timeout): self + { + $this->arguments[] = 'TIMEOUT'; + $this->arguments[] = $timeout; + + return $this; + } + + /** + * Adds an arbitrary, binary safe payload that is exposed to custom scoring functions. + * + * @param int $offset + * @param int $num + * @return $this + */ + public function limit(int $offset, int $num): self + { + array_push($this->arguments, 'LIMIT', $offset, $num); + + return $this; + } + + /** + * Adds filter expression into index. + * + * @param string $filter + * @return $this + */ + public function filter(string $filter): self + { + $this->arguments[] = 'FILTER'; + $this->arguments[] = $filter; + + return $this; + } + + /** + * Defines one or more value parameters. Each parameter has a name and a value. + * + * Example: ['name1', 'value1', 'name2', 'value2'...] + * + * @param array $nameValuesDictionary + * @return $this + */ + public function params(array $nameValuesDictionary): self + { + $this->arguments[] = 'PARAMS'; + $this->arguments[] = count($nameValuesDictionary); + $this->arguments = array_merge($this->arguments, $nameValuesDictionary); + + return $this; + } + + /** + * {@inheritDoc} + */ + public function toArray(): array + { + return $this->arguments; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/CreateArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/CreateArguments.php new file mode 100644 index 0000000000..b8e0176bac --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/CreateArguments.php @@ -0,0 +1,191 @@ + 'HASH', + 'json' => 'JSON', + ]; + + /** + * Specify data type for given index. To index JSON you must have the RedisJSON module to be installed. + * + * @param string $modifier + * @return $this + */ + public function on(string $modifier = 'HASH'): self + { + if (in_array(strtoupper($modifier), $this->supportedDataTypesEnum)) { + $this->arguments[] = 'ON'; + $this->arguments[] = $this->supportedDataTypesEnum[strtolower($modifier)]; + + return $this; + } + + $enumValues = implode(', ', array_values($this->supportedDataTypesEnum)); + throw new InvalidArgumentException("Wrong modifier value given. Currently supports: {$enumValues}"); + } + + /** + * Adds one or more prefixes into index. + * + * @param array $prefixes + * @return $this + */ + public function prefix(array $prefixes): self + { + $this->arguments[] = 'PREFIX'; + $this->arguments[] = count($prefixes); + $this->arguments = array_merge($this->arguments, $prefixes); + + return $this; + } + + /** + * Document attribute set as document language. + * + * @param string $languageAttribute + * @return $this + */ + public function languageField(string $languageAttribute): self + { + $this->arguments[] = 'LANGUAGE_FIELD'; + $this->arguments[] = $languageAttribute; + + return $this; + } + + /** + * Default score for documents in the index. + * + * @param float $defaultScore + * @return $this + */ + public function score(float $defaultScore = 1.0): self + { + $this->arguments[] = 'SCORE'; + $this->arguments[] = $defaultScore; + + return $this; + } + + /** + * Document attribute that used as the document rank based on the user ranking. + * + * @param string $scoreAttribute + * @return $this + */ + public function scoreField(string $scoreAttribute): self + { + $this->arguments[] = 'SCORE_FIELD'; + $this->arguments[] = $scoreAttribute; + + return $this; + } + + /** + * Forces RediSearch to encode indexes as if there were more than 32 text attributes. + * + * @return $this + */ + public function maxTextFields(): self + { + $this->arguments[] = 'MAXTEXTFIELDS'; + + return $this; + } + + /** + * Does not store term offsets for documents. + * + * @return $this + */ + public function noOffsets(): self + { + $this->arguments[] = 'NOOFFSETS'; + + return $this; + } + + /** + * Creates a lightweight temporary index that expires after a specified period of inactivity, in seconds. + * + * @param int $seconds + * @return $this + */ + public function temporary(int $seconds): self + { + $this->arguments[] = 'TEMPORARY'; + $this->arguments[] = $seconds; + + return $this; + } + + /** + * Conserves storage space and memory by disabling highlighting support. + * + * @return $this + */ + public function noHl(): self + { + $this->arguments[] = 'NOHL'; + + return $this; + } + + /** + * Does not store attribute bits for each term. + * + * @return $this + */ + public function noFields(): self + { + $this->arguments[] = 'NOFIELDS'; + + return $this; + } + + /** + * Avoids saving the term frequencies in the index. + * + * @return $this + */ + public function noFreqs(): self + { + $this->arguments[] = 'NOFREQS'; + + return $this; + } + + /** + * Sets the index with a custom stopword list, to be ignored during indexing and search time. + * + * @param array $stopWords + * @return $this + */ + public function stopWords(array $stopWords): self + { + $this->arguments[] = 'STOPWORDS'; + $this->arguments[] = count($stopWords); + $this->arguments = array_merge($this->arguments, $stopWords); + + return $this; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/CursorArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/CursorArguments.php new file mode 100644 index 0000000000..a8bd6b56fc --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/CursorArguments.php @@ -0,0 +1,44 @@ +arguments, 'COUNT', $readSize); + + return $this; + } + + /** + * {@inheritDoc} + */ + public function toArray(): array + { + return $this->arguments; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/DropArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/DropArguments.php new file mode 100644 index 0000000000..0c6313201f --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/DropArguments.php @@ -0,0 +1,43 @@ +arguments[] = 'DD'; + + return $this; + } + + /** + * @return array + */ + public function toArray(): array + { + return $this->arguments; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/ExplainArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/ExplainArguments.php new file mode 100644 index 0000000000..b4bd235b93 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/ExplainArguments.php @@ -0,0 +1,17 @@ +arguments[] = 'SEARCH'; + + return $this; + } + + /** + * Adds aggregate context. + * + * @return $this + */ + public function aggregate(): self + { + $this->arguments[] = 'AGGREGATE'; + + return $this; + } + + /** + * Removes details of reader iterator. + * + * @return $this + */ + public function limited(): self + { + $this->arguments[] = 'LIMITED'; + + return $this; + } + + /** + * Is query string, as if sent to FT.SEARCH. + * + * @param string $query + * @return $this + */ + public function query(string $query): self + { + $this->arguments[] = 'QUERY'; + $this->arguments[] = $query; + + return $this; + } + + /** + * {@inheritDoc} + */ + public function toArray(): array + { + return $this->arguments; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/AbstractField.php b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/AbstractField.php new file mode 100644 index 0000000000..eb49f09959 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/AbstractField.php @@ -0,0 +1,69 @@ +fieldArguments[] = $identifier; + + if ($alias !== '') { + $this->fieldArguments[] = 'AS'; + $this->fieldArguments[] = $alias; + } + + $this->fieldArguments[] = $fieldType; + + if ($sortable === self::SORTABLE) { + $this->fieldArguments[] = 'SORTABLE'; + } elseif ($sortable === self::SORTABLE_UNF) { + $this->fieldArguments[] = 'SORTABLE'; + $this->fieldArguments[] = 'UNF'; + } + + if ($noIndex) { + $this->fieldArguments[] = 'NOINDEX'; + } + } + + /** + * {@inheritDoc} + */ + public function toArray(): array + { + return $this->fieldArguments; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/FieldInterface.php b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/FieldInterface.php new file mode 100644 index 0000000000..80e57eba06 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/FieldInterface.php @@ -0,0 +1,22 @@ +setCommonOptions('GEO', $identifier, $alias, $sortable, $noIndex); + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/NumericField.php b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/NumericField.php new file mode 100644 index 0000000000..758b4e9c60 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/NumericField.php @@ -0,0 +1,31 @@ +setCommonOptions('NUMERIC', $identifier, $alias, $sortable, $noIndex); + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/TagField.php b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/TagField.php new file mode 100644 index 0000000000..358b3090e6 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/TagField.php @@ -0,0 +1,44 @@ +setCommonOptions('TAG', $identifier, $alias, $sortable, $noIndex); + + if ($separator !== ',') { + $this->fieldArguments[] = 'SEPARATOR'; + $this->fieldArguments[] = $separator; + } + + if ($caseSensitive) { + $this->fieldArguments[] = 'CASESENSITIVE'; + } + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/TextField.php b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/TextField.php new file mode 100644 index 0000000000..d72c623836 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/TextField.php @@ -0,0 +1,57 @@ +setCommonOptions('TEXT', $identifier, $alias, $sortable, $noIndex); + + if ($noStem) { + $this->fieldArguments[] = 'NOSTEM'; + } + + if ($phonetic !== '') { + $this->fieldArguments[] = 'PHONETIC'; + $this->fieldArguments[] = $phonetic; + } + + if ($weight !== 1) { + $this->fieldArguments[] = 'WEIGHT'; + $this->fieldArguments[] = $weight; + } + + if ($withSuffixTrie) { + $this->fieldArguments[] = 'WITHSUFFIXTRIE'; + } + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/VectorField.php b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/VectorField.php new file mode 100644 index 0000000000..5228c22502 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SchemaFields/VectorField.php @@ -0,0 +1,47 @@ +setCommonOptions('VECTOR', $fieldName, $alias); + + array_push($this->fieldArguments, $algorithm, count($attributeNameValueDictionary)); + $this->fieldArguments = array_merge($this->fieldArguments, $attributeNameValueDictionary); + } + + /** + * {@inheritDoc} + */ + public function toArray(): array + { + return $this->fieldArguments; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SearchArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/SearchArguments.php new file mode 100644 index 0000000000..d1eb70580c --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SearchArguments.php @@ -0,0 +1,306 @@ + 'ASC', + 'desc' => 'DESC', + ]; + + /** + * Returns the document ids and not the content. + * + * @return $this + */ + public function noContent(): self + { + $this->arguments[] = 'NOCONTENT'; + + return $this; + } + + /** + * Returns the value of the sorting key, right after the id and score and/or payload, if requested. + * + * @return $this + */ + public function withSortKeys(): self + { + $this->arguments[] = 'WITHSORTKEYS'; + + return $this; + } + + /** + * Limits results to those having numeric values ranging between min and max, + * if numeric_attribute is defined as a numeric attribute in FT.CREATE. + * Min and max follow ZRANGE syntax, and can be -inf, +inf, and use( for exclusive ranges. + * Multiple numeric filters for different attributes are supported in one query. + * + * @param array ...$filter Should contain: numeric_field, min and max. Example: ['numeric_field', 1, 10] + * @return $this + */ + public function searchFilter(array ...$filter): self + { + $arguments = func_get_args(); + + foreach ($arguments as $argument) { + array_push($this->arguments, 'FILTER', ...$argument); + } + + return $this; + } + + /** + * Filter the results to a given radius from lon and lat. Radius is given as a number and units. + * + * @param array ...$filter Should contain: geo_field, lon, lat, radius, unit. Example: ['geo_field', 34.1231, 35.1231, 300, km] + * @return $this + */ + public function geoFilter(array ...$filter): self + { + $arguments = func_get_args(); + + foreach ($arguments as $argument) { + array_push($this->arguments, 'GEOFILTER', ...$argument); + } + + return $this; + } + + /** + * Limits the result to a given set of keys specified in the list. + * + * @param array $keys + * @return $this + */ + public function inKeys(array $keys): self + { + $this->arguments[] = 'INKEYS'; + $this->arguments[] = count($keys); + $this->arguments = array_merge($this->arguments, $keys); + + return $this; + } + + /** + * Filters the results to those appearing only in specific attributes of the document, like title or URL. + * + * @param array $fields + * @return $this + */ + public function inFields(array $fields): self + { + $this->arguments[] = 'INFIELDS'; + $this->arguments[] = count($fields); + $this->arguments = array_merge($this->arguments, $fields); + + return $this; + } + + /** + * Limits the attributes returned from the document. + * Num is the number of attributes following the keyword. + * If num is 0, it acts like NOCONTENT. + * Identifier is either an attribute name (for hashes and JSON) or a JSON Path expression (for JSON). + * Property is an optional name used in the result. If not provided, the identifier is used in the result. + * + * If you want to add alias property to your identifier just add "true" value in identifier enumeration, + * next value will be considered as alias to previous one. + * + * Example: 'identifier', true, 'property' => 'identifier' AS 'property' + * + * @param int $count + * @param string|bool ...$identifier + * @return $this + */ + public function addReturn(int $count, ...$identifier): self + { + $arguments = func_get_args(); + + $this->arguments[] = 'RETURN'; + + for ($i = 1, $iMax = count($arguments); $i < $iMax; $i++) { + if (true === $arguments[$i]) { + $arguments[$i] = 'AS'; + } + } + + $this->arguments = array_merge($this->arguments, $arguments); + + return $this; + } + + /** + * Returns only the sections of the attribute that contain the matched text. + * + * @param array $fields + * @param int $frags + * @param int $len + * @param string $separator + * @return $this + */ + public function summarize(array $fields = [], int $frags = 0, int $len = 0, string $separator = ''): self + { + $this->arguments[] = 'SUMMARIZE'; + + if (!empty($fields)) { + $this->arguments[] = 'FIELDS'; + $this->arguments[] = count($fields); + $this->arguments = array_merge($this->arguments, $fields); + } + + if ($frags !== 0) { + $this->arguments[] = 'FRAGS'; + $this->arguments[] = $frags; + } + + if ($len !== 0) { + $this->arguments[] = 'LEN'; + $this->arguments[] = $len; + } + + if ($separator !== '') { + $this->arguments[] = 'SEPARATOR'; + $this->arguments[] = $separator; + } + + return $this; + } + + /** + * Formats occurrences of matched text. + * + * @param array $fields + * @param string $openTag + * @param string $closeTag + * @return $this + */ + public function highlight(array $fields = [], string $openTag = '', string $closeTag = ''): self + { + $this->arguments[] = 'HIGHLIGHT'; + + if (!empty($fields)) { + $this->arguments[] = 'FIELDS'; + $this->arguments[] = count($fields); + $this->arguments = array_merge($this->arguments, $fields); + } + + if ($openTag !== '' && $closeTag !== '') { + array_push($this->arguments, 'TAGS', $openTag, $closeTag); + } + + return $this; + } + + /** + * Allows a maximum of N intervening number of unmatched offsets between phrase terms. + * In other words, the slop for exact phrases is 0. + * + * @param int $slop + * @return $this + */ + public function slop(int $slop): self + { + $this->arguments[] = 'SLOP'; + $this->arguments[] = $slop; + + return $this; + } + + /** + * Puts the query terms in the same order in the document as in the query, regardless of the offsets between them. + * Typically used in conjunction with SLOP. + * + * @return $this + */ + public function inOrder(): self + { + $this->arguments[] = 'INORDER'; + + return $this; + } + + /** + * Uses a custom query expander instead of the stemmer. + * + * @param string $expander + * @return $this + */ + public function expander(string $expander): self + { + $this->arguments[] = 'EXPANDER'; + $this->arguments[] = $expander; + + return $this; + } + + /** + * Uses a custom scoring function you define. + * + * @param string $scorer + * @return $this + */ + public function scorer(string $scorer): self + { + $this->arguments[] = 'SCORER'; + $this->arguments[] = $scorer; + + return $this; + } + + /** + * Returns a textual description of how the scores were calculated. + * Using this options requires the WITHSCORES option. + * + * @return $this + */ + public function explainScore(): self + { + $this->arguments[] = 'EXPLAINSCORE'; + + return $this; + } + + /** + * Orders the results by the value of this attribute. + * This applies to both text and numeric attributes. + * Attributes needed for SORTBY should be declared as SORTABLE in the index, in order to be available with very low latency. + * Note that this adds memory overhead. + * + * @param string $sortAttribute + * @param string $orderBy + * @return $this + */ + public function sortBy(string $sortAttribute, string $orderBy = 'asc'): self + { + $this->arguments[] = 'SORTBY'; + $this->arguments[] = $sortAttribute; + + if (in_array(strtoupper($orderBy), $this->sortingEnum)) { + $this->arguments[] = $this->sortingEnum[strtolower($orderBy)]; + } else { + $enumValues = implode(', ', array_values($this->sortingEnum)); + throw new InvalidArgumentException("Wrong order direction value given. Currently supports: {$enumValues}"); + } + + return $this; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SpellcheckArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/SpellcheckArguments.php new file mode 100644 index 0000000000..7a6c248913 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SpellcheckArguments.php @@ -0,0 +1,59 @@ + 'INCLUDE', + 'exclude' => 'EXCLUDE', + ]; + + /** + * Is maximum Levenshtein distance for spelling suggestions (default: 1, max: 4). + * + * @return $this + */ + public function distance(int $distance): self + { + $this->arguments[] = 'DISTANCE'; + $this->arguments[] = $distance; + + return $this; + } + + /** + * Specifies an inclusion (INCLUDE) or exclusion (EXCLUDE) of a custom dictionary named {dict}. + * + * @param string $dictionary + * @param string $modifier + * @param string ...$terms + * @return $this + */ + public function terms(string $dictionary, string $modifier = 'INCLUDE', string ...$terms): self + { + if (!in_array(strtoupper($modifier), $this->termsEnum)) { + $enumValues = implode(', ', array_values($this->termsEnum)); + throw new InvalidArgumentException("Wrong modifier value given. Currently supports: {$enumValues}"); + } + + array_push($this->arguments, 'TERMS', $this->termsEnum[strtolower($modifier)], $dictionary, ...$terms); + + return $this; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SugAddArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/SugAddArguments.php new file mode 100644 index 0000000000..c8b9769782 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SugAddArguments.php @@ -0,0 +1,28 @@ +arguments[] = 'INCR'; + + return $this; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SugGetArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/SugGetArguments.php new file mode 100644 index 0000000000..1176c77369 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SugGetArguments.php @@ -0,0 +1,41 @@ +arguments[] = 'FUZZY'; + + return $this; + } + + /** + * Limits the results to a maximum of num (default: 5). + * + * @param int $num + * @return $this + */ + public function max(int $num): self + { + array_push($this->arguments, 'MAX', $num); + + return $this; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/Search/SynUpdateArguments.php b/core/vendor/predis/predis/src/Command/Argument/Search/SynUpdateArguments.php new file mode 100644 index 0000000000..a6b286a48f --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/Search/SynUpdateArguments.php @@ -0,0 +1,17 @@ +arguments, 'ON_DUPLICATE', $policy); + + return $this; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/TimeSeries/AlterArguments.php b/core/vendor/predis/predis/src/Command/Argument/TimeSeries/AlterArguments.php new file mode 100644 index 0000000000..238ebc36d6 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/TimeSeries/AlterArguments.php @@ -0,0 +1,17 @@ +arguments, 'RETENTION', $retentionPeriod); + + return $this; + } + + /** + * Is initial allocation size, in bytes, for the data part of each new chunk. + * + * @param int $size + * @return $this + */ + public function chunkSize(int $size): self + { + array_push($this->arguments, 'CHUNK_SIZE', $size); + + return $this; + } + + /** + * Is policy for handling insertion of multiple samples with identical timestamps. + * + * @param string $policy + * @return $this + */ + public function duplicatePolicy(string $policy = self::POLICY_BLOCK): self + { + array_push($this->arguments, 'DUPLICATE_POLICY', $policy); + + return $this; + } + + /** + * Is set of label-value pairs that represent metadata labels of the key and serve as a secondary index. + * + * @param mixed ...$labelValuePair + * @return $this + */ + public function labels(...$labelValuePair): self + { + array_push($this->arguments, 'LABELS', ...$labelValuePair); + + return $this; + } + + /** + * Specifies the series samples encoding format. + * + * @param string $encoding + * @return $this + */ + public function encoding(string $encoding = self::ENCODING_COMPRESSED): self + { + array_push($this->arguments, 'ENCODING', $encoding); + + return $this; + } + + /** + * Is used when a time series is a compaction. + * With LATEST, TS.GET reports the compacted value of the latest, possibly partial, bucket. + * + * @return $this + */ + public function latest(): self + { + $this->arguments[] = 'LATEST'; + + return $this; + } + + /** + * Includes in the reply all label-value pairs representing metadata labels of the time series. + * + * @return $this + */ + public function withLabels(): self + { + $this->arguments[] = 'WITHLABELS'; + + return $this; + } + + /** + * Returns a subset of the label-value pairs that represent metadata labels of the time series. + * + * @return $this + */ + public function selectedLabels(string ...$labels): self + { + array_push($this->arguments, 'SELECTED_LABELS', ...$labels); + + return $this; + } + + /** + * {@inheritDoc} + */ + public function toArray(): array + { + return $this->arguments; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/TimeSeries/CreateArguments.php b/core/vendor/predis/predis/src/Command/Argument/TimeSeries/CreateArguments.php new file mode 100644 index 0000000000..e47d8ef722 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/TimeSeries/CreateArguments.php @@ -0,0 +1,17 @@ +arguments, 'TIMESTAMP', $timeStamp); + + return $this; + } + + /** + * Changes data storage from compressed (default) to uncompressed. + * + * @return $this + */ + public function uncompressed(): self + { + $this->arguments[] = 'UNCOMPRESSED'; + + return $this; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/TimeSeries/InfoArguments.php b/core/vendor/predis/predis/src/Command/Argument/TimeSeries/InfoArguments.php new file mode 100644 index 0000000000..1b2cec6647 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/TimeSeries/InfoArguments.php @@ -0,0 +1,43 @@ +arguments[] = 'DEBUG'; + + return $this; + } + + /** + * {@inheritDoc} + */ + public function toArray(): array + { + return $this->arguments; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/TimeSeries/MGetArguments.php b/core/vendor/predis/predis/src/Command/Argument/TimeSeries/MGetArguments.php new file mode 100644 index 0000000000..585f574e60 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/TimeSeries/MGetArguments.php @@ -0,0 +1,17 @@ +arguments, 'FILTER', ...$filterExpressions); + + return $this; + } + + /** + * Splits time series into groups, each group contains time series that share the same + * value for the provided label name, then aggregates results in each group. + * + * @param string $label + * @param string $reducer + * @return $this + */ + public function groupBy(string $label, string $reducer): self + { + array_push($this->arguments, 'GROUPBY', $label, 'REDUCE', $reducer); + + return $this; + } +} diff --git a/core/vendor/predis/predis/src/Command/Argument/TimeSeries/RangeArguments.php b/core/vendor/predis/predis/src/Command/Argument/TimeSeries/RangeArguments.php new file mode 100644 index 0000000000..00d3772d79 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Argument/TimeSeries/RangeArguments.php @@ -0,0 +1,85 @@ +arguments, 'FILTER_BY_TS', ...$ts); + + return $this; + } + + /** + * Filters samples by minimum and maximum values. + * + * @param int $min + * @param int $max + * @return $this + */ + public function filterByValue(int $min, int $max): self + { + array_push($this->arguments, 'FILTER_BY_VALUE', $min, $max); + + return $this; + } + + /** + * Limits the number of returned samples. + * + * @param int $count + * @return $this + */ + public function count(int $count): self + { + array_push($this->arguments, 'COUNT', $count); + + return $this; + } + + /** + * Aggregates samples into time buckets. + * + * @param string $aggregator + * @param int $bucketDuration Is duration of each bucket, in milliseconds. + * @param int $align It controls the time bucket timestamps by changing the reference timestamp on which a bucket is defined. + * @param int $bucketTimestamp Controls how bucket timestamps are reported. + * @param bool $empty Is a flag, which, when specified, reports aggregations also for empty buckets. + * @return $this + */ + public function aggregation(string $aggregator, int $bucketDuration, int $align = 0, int $bucketTimestamp = 0, bool $empty = false): self + { + if ($align > 0) { + array_push($this->arguments, 'ALIGN', $align); + } + + array_push($this->arguments, 'AGGREGATION', $aggregator, $bucketDuration); + + if ($bucketTimestamp > 0) { + array_push($this->arguments, 'BUCKETTIMESTAMP', $bucketTimestamp); + } + + if (true === $empty) { + $this->arguments[] = 'EMPTY'; + } + + return $this; + } +} diff --git a/core/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php b/core/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php index 6542b5c090..05595ac11f 100644 --- a/core/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php +++ b/core/vendor/predis/predis/src/Command/Processor/KeyPrefixProcessor.php @@ -181,9 +181,116 @@ public function __construct($prefix) /* ---------------- Redis 5.0 ---------------- */ 'XADD' => $prefixFirst, 'XRANGE' => $prefixFirst, + 'XREVRANGE' => $prefixFirst, 'XDEL' => $prefixFirst, 'XLEN' => $prefixFirst, 'XACK' => $prefixFirst, + 'XTRIM' => $prefixFirst, + + /* ---------------- Redis 6.2 ---------------- */ + 'GETDEL' => $prefixFirst, + + /* RedisJSON */ + 'JSON.ARRAPPEND' => $prefixFirst, + 'JSON.ARRINDEX' => $prefixFirst, + 'JSON.ARRINSERT' => $prefixFirst, + 'JSON.ARRLEN' => $prefixFirst, + 'JSON.ARRPOP' => $prefixFirst, + 'JSON.ARRTRIM' => $prefixFirst, + 'JSON.CLEAR' => $prefixFirst, + 'JSON.DEBUG MEMORY' => $prefixFirst, + 'JSON.DEL' => $prefixFirst, + 'JSON.FORGET' => $prefixFirst, + 'JSON.GET' => $prefixFirst, + 'JSON.MGET' => $prefixAll, + 'JSON.NUMINCRBY' => $prefixFirst, + 'JSON.OBJKEYS' => $prefixFirst, + 'JSON.OBJLEN' => $prefixFirst, + 'JSON.RESP' => $prefixFirst, + 'JSON.SET' => $prefixFirst, + 'JSON.STRAPPEND' => $prefixFirst, + 'JSON.STRLEN' => $prefixFirst, + 'JSON.TOGGLE' => $prefixFirst, + 'JSON.TYPE' => $prefixFirst, + + /* RedisBloom */ + 'BF.ADD' => $prefixFirst, + 'BF.EXISTS' => $prefixFirst, + 'BF.INFO' => $prefixFirst, + 'BF.INSERT' => $prefixFirst, + 'BF.LOADCHUNK' => $prefixFirst, + 'BF.MADD' => $prefixFirst, + 'BF.MEXISTS' => $prefixFirst, + 'BF.RESERVE' => $prefixFirst, + 'BF.SCANDUMP' => $prefixFirst, + 'CF.ADD' => $prefixFirst, + 'CF.ADDNX' => $prefixFirst, + 'CF.COUNT' => $prefixFirst, + 'CF.DEL' => $prefixFirst, + 'CF.EXISTS' => $prefixFirst, + 'CF.INFO' => $prefixFirst, + 'CF.INSERT' => $prefixFirst, + 'CF.INSERTNX' => $prefixFirst, + 'CF.LOADCHUNK' => $prefixFirst, + 'CF.MEXISTS' => $prefixFirst, + 'CF.RESERVE' => $prefixFirst, + 'CF.SCANDUMP' => $prefixFirst, + 'CMS.INCRBY' => $prefixFirst, + 'CMS.INFO' => $prefixFirst, + 'CMS.INITBYDIM' => $prefixFirst, + 'CMS.INITBYPROB' => $prefixFirst, + 'CMS.QUERY' => $prefixFirst, + 'TDIGEST.ADD' => $prefixFirst, + 'TDIGEST.BYRANK' => $prefixFirst, + 'TDIGEST.BYREVRANK' => $prefixFirst, + 'TDIGEST.CDF' => $prefixFirst, + 'TDIGEST.CREATE' => $prefixFirst, + 'TDIGEST.INFO' => $prefixFirst, + 'TDIGEST.MAX' => $prefixFirst, + 'TDIGEST.MIN' => $prefixFirst, + 'TDIGEST.QUANTILE' => $prefixFirst, + 'TDIGEST.RANK' => $prefixFirst, + 'TDIGEST.RESET' => $prefixFirst, + 'TDIGEST.REVRANK' => $prefixFirst, + 'TDIGEST.TRIMMED_MEAN' => $prefixFirst, + 'TOPK.ADD' => $prefixFirst, + 'TOPK.INCRBY' => $prefixFirst, + 'TOPK.INFO' => $prefixFirst, + 'TOPK.LIST' => $prefixFirst, + 'TOPK.QUERY' => $prefixFirst, + 'TOPK.RESERVE' => $prefixFirst, + + /* RediSearch */ + 'FT.AGGREGATE' => $prefixFirst, + 'FT.ALTER' => $prefixFirst, + 'FT.CREATE' => $prefixFirst, + 'FT.CURSOR DEL' => $prefixFirst, + 'FT.CURSOR READ' => $prefixFirst, + 'FT.DROPINDEX' => $prefixFirst, + 'FT.EXPLAIN' => $prefixFirst, + 'FT.INFO' => $prefixFirst, + 'FT.PROFILE' => $prefixFirst, + 'FT.SEARCH' => $prefixFirst, + 'FT.SPELLCHECK' => $prefixFirst, + 'FT.SYNDUMP' => $prefixFirst, + 'FT.SYNUPDATE' => $prefixFirst, + 'FT.TAGVALS' => $prefixFirst, + + /* Redis TimeSeries */ + 'TS.ADD' => $prefixFirst, + 'TS.ALTER' => $prefixFirst, + 'TS.CREATE' => $prefixFirst, + 'TS.DECRBY' => $prefixFirst, + 'TS.DEL' => $prefixFirst, + 'TS.GET' => $prefixFirst, + 'TS.INCRBY' => $prefixFirst, + 'TS.INFO' => $prefixFirst, + 'TS.MGET' => $prefixFirst, + 'TS.MRANGE' => $prefixFirst, + 'TS.MREVRANGE' => $prefixFirst, + 'TS.QUERYINDEX' => $prefixFirst, + 'TS.RANGE' => $prefixFirst, + 'TS.REVRANGE' => $prefixFirst, ]; } diff --git a/core/vendor/predis/predis/src/Command/Processor/ProcessorChain.php b/core/vendor/predis/predis/src/Command/Processor/ProcessorChain.php index 8ecfc4d900..1ce915e2bb 100644 --- a/core/vendor/predis/predis/src/Command/Processor/ProcessorChain.php +++ b/core/vendor/predis/predis/src/Command/Processor/ProcessorChain.php @@ -93,7 +93,8 @@ public function count() } /** - * {@inheritdoc} + * @param int $index + * @return bool */ #[ReturnTypeWillChange] public function offsetExists($index) @@ -102,7 +103,8 @@ public function offsetExists($index) } /** - * {@inheritdoc} + * @param int $index + * @return ProcessorInterface */ #[ReturnTypeWillChange] public function offsetGet($index) @@ -111,7 +113,9 @@ public function offsetGet($index) } /** - * {@inheritdoc} + * @param int $index + * @param ProcessorInterface $processor + * @return void */ #[ReturnTypeWillChange] public function offsetSet($index, $processor) @@ -126,7 +130,8 @@ public function offsetSet($index, $processor) } /** - * {@inheritdoc} + * @param int $index + * @return void */ #[ReturnTypeWillChange] public function offsetUnset($index) diff --git a/core/vendor/predis/predis/src/Command/Redis/ACL.php b/core/vendor/predis/predis/src/Command/Redis/ACL.php new file mode 100644 index 0000000000..e8999ea2ed --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/ACL.php @@ -0,0 +1,53 @@ + 'CAPACITY', + 'size' => 'SIZE', + 'filters' => 'FILTERS', + 'items' => 'ITEMS', + 'expansion' => 'EXPANSION', + ]; + + public function getId() + { + return 'BF.INFO'; + } + + public function setArguments(array $arguments) + { + if (isset($arguments[1])) { + $modifier = array_pop($arguments); + + if ($modifier === '') { + parent::setArguments($arguments); + + return; + } + + if (!in_array(strtoupper($modifier), $this->modifierEnum)) { + $enumValues = implode(', ', array_keys($this->modifierEnum)); + throw new UnexpectedValueException("Argument accepts only: {$enumValues} values"); + } + + $arguments[] = $this->modifierEnum[strtolower($modifier)]; + } + + parent::setArguments($arguments); + } + + public function parseResponse($data) + { + if (count($data) > 1) { + $result = []; + + for ($i = 0, $iMax = count($data); $i < $iMax; ++$i) { + if (array_key_exists($i + 1, $data)) { + $result[(string) $data[$i]] = $data[++$i]; + } + } + + return $result; + } + + return $data; + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFINSERT.php b/core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFINSERT.php new file mode 100644 index 0000000000..50e23eeaf9 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFINSERT.php @@ -0,0 +1,72 @@ +setNoCreate($arguments); + $arguments = $this->getArguments(); + + if (array_key_exists(5, $arguments) && $arguments[5]) { + $arguments[5] = 'NONSCALING'; + } + + $this->setItems($arguments); + $arguments = $this->getArguments(); + + $this->setExpansion($arguments); + $arguments = $this->getArguments(); + + $this->setErrorRate($arguments); + $arguments = $this->getArguments(); + + $this->setCapacity($arguments); + $this->filterArguments(); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFLOADCHUNK.php b/core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFLOADCHUNK.php new file mode 100644 index 0000000000..76a78e997e --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFLOADCHUNK.php @@ -0,0 +1,28 @@ +setExpansion($arguments); + $this->filterArguments(); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFSCANDUMP.php b/core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFSCANDUMP.php new file mode 100644 index 0000000000..f8576d2d06 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/BloomFilter/BFSCANDUMP.php @@ -0,0 +1,29 @@ + 1) { + $result = []; + + for ($i = 0, $iMax = count($data); $i < $iMax; ++$i) { + if (array_key_exists($i + 1, $data)) { + $result[(string) $data[$i]] = $data[++$i]; + } + } + + return $result; + } + + return $data; + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYDIM.php b/core/vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYDIM.php new file mode 100644 index 0000000000..8f1f23ff30 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/CountMinSketch/CMSINITBYDIM.php @@ -0,0 +1,28 @@ + 1) { + $result = []; + + for ($i = 0, $iMax = count($data); $i < $iMax; ++$i) { + if (array_key_exists($i + 1, $data)) { + $result[(string) $data[$i]] = $data[++$i]; + } + } + + return $result; + } + + return $data; + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINSERT.php b/core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINSERT.php new file mode 100644 index 0000000000..3a49a38d74 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINSERT.php @@ -0,0 +1,52 @@ +setNoCreate($arguments); + $arguments = $this->getArguments(); + + $this->setItems($arguments); + $arguments = $this->getArguments(); + + $this->setCapacity($arguments); + $this->filterArguments(); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINSERTNX.php b/core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINSERTNX.php new file mode 100644 index 0000000000..629327b4f0 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFINSERTNX.php @@ -0,0 +1,27 @@ +setExpansion($arguments); + $arguments = $this->getArguments(); + + $this->setMaxIterations($arguments); + $arguments = $this->getArguments(); + + $this->setBucketSize($arguments); + $this->filterArguments(); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFSCANDUMP.php b/core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFSCANDUMP.php new file mode 100644 index 0000000000..59caa651c3 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/CuckooFilter/CFSCANDUMP.php @@ -0,0 +1,29 @@ + 2) { + for ($i = 2, $iMax = count($arguments); $i < $iMax; $i++) { + $processedArguments[] = $arguments[$i]; + } + } + + parent::setArguments($processedArguments); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/FUNCTIONS.php b/core/vendor/predis/predis/src/Command/Redis/FUNCTIONS.php index 6946590139..7f4fde79a2 100644 --- a/core/vendor/predis/predis/src/Command/Redis/FUNCTIONS.php +++ b/core/vendor/predis/predis/src/Command/Redis/FUNCTIONS.php @@ -41,7 +41,7 @@ public function getId() public function setArguments(array $arguments) { - $strategy = $this->strategyResolver->resolve('functions', $arguments[0]); + $strategy = $this->strategyResolver->resolve('functions', strtolower($arguments[0])); $arguments = $strategy->processArguments($arguments); parent::setArguments($arguments); diff --git a/core/vendor/predis/predis/src/Command/Redis/HGETALL.php b/core/vendor/predis/predis/src/Command/Redis/HGETALL.php index 5db3eded7d..c5f566bae0 100644 --- a/core/vendor/predis/predis/src/Command/Redis/HGETALL.php +++ b/core/vendor/predis/predis/src/Command/Redis/HGETALL.php @@ -32,6 +32,10 @@ public function getId() */ public function parseResponse($data) { + if ($data !== array_values($data)) { + return $data; // Relay + } + $result = []; for ($i = 0; $i < count($data); ++$i) { diff --git a/core/vendor/predis/predis/src/Command/Redis/HRANDFIELD.php b/core/vendor/predis/predis/src/Command/Redis/HRANDFIELD.php index 0d0fb75db5..62ce7dbe99 100644 --- a/core/vendor/predis/predis/src/Command/Redis/HRANDFIELD.php +++ b/core/vendor/predis/predis/src/Command/Redis/HRANDFIELD.php @@ -31,4 +31,23 @@ public function getId() { return 'HRANDFIELD'; } + + /** + * {@inheritdoc} + */ + public function parseResponse($data) + { + if (!is_array($data)) { + return $data; + } + + // flatten Relay (RESP3) maps + $return = []; + + array_walk_recursive($data, function ($value) use (&$return) { + $return[] = $value; + }); + + return $return; + } } diff --git a/core/vendor/predis/predis/src/Command/Redis/INFO.php b/core/vendor/predis/predis/src/Command/Redis/INFO.php index cb13a4cb59..26a62c2a31 100644 --- a/core/vendor/predis/predis/src/Command/Redis/INFO.php +++ b/core/vendor/predis/predis/src/Command/Redis/INFO.php @@ -97,6 +97,10 @@ public function parseOldResponseFormat($lines) */ protected function parseRow($row) { + if (preg_match('/^module:name/', $row)) { + return $this->parseModuleRow($row); + } + [$k, $v] = explode(':', $row, 2); if (preg_match('/^db\d+$/', $k)) { @@ -124,4 +128,30 @@ protected function parseDatabaseStats($str) return $db; } + + /** + * Parsing module rows because of different format. + * + * @param string $row + * @return array + */ + protected function parseModuleRow(string $row): array + { + [$moduleKeyword, $moduleData] = explode(':', $row); + $explodedData = explode(',', $moduleData); + $parsedData = []; + + foreach ($explodedData as $moduleDataRow) { + [$k, $v] = explode('=', $moduleDataRow); + + if ($k === 'name') { + $parsedData[0] = $v; + continue; + } + + $parsedData[1][$k] = $v; + } + + return $parsedData; + } } diff --git a/core/vendor/predis/predis/src/Command/Redis/Json/JSONARRAPPEND.php b/core/vendor/predis/predis/src/Command/Redis/Json/JSONARRAPPEND.php new file mode 100644 index 0000000000..1b2a92036c --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Json/JSONARRAPPEND.php @@ -0,0 +1,28 @@ +setSpace($arguments); + $arguments = $this->getArguments(); + + $this->setNewline($arguments); + $arguments = $this->getArguments(); + + $this->setIndent($arguments); + $this->filterArguments(); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Json/JSONMERGE.php b/core/vendor/predis/predis/src/Command/Redis/Json/JSONMERGE.php new file mode 100644 index 0000000000..a132228330 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Json/JSONMERGE.php @@ -0,0 +1,29 @@ +setSubcommand($arguments); + $this->filterArguments(); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Json/JSONSTRAPPEND.php b/core/vendor/predis/predis/src/Command/Redis/Json/JSONSTRAPPEND.php new file mode 100644 index 0000000000..9b11458e4f --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Json/JSONSTRAPPEND.php @@ -0,0 +1,28 @@ + $data[1], $data[2] => $data[3]]; } diff --git a/core/vendor/predis/predis/src/Command/Redis/SHUTDOWN.php b/core/vendor/predis/predis/src/Command/Redis/SHUTDOWN.php index 7af576c6af..4d2b74794f 100644 --- a/core/vendor/predis/predis/src/Command/Redis/SHUTDOWN.php +++ b/core/vendor/predis/predis/src/Command/Redis/SHUTDOWN.php @@ -26,4 +26,36 @@ public function getId() { return 'SHUTDOWN'; } + + /** + * {@inheritdoc} + */ + public function setArguments(array $arguments) + { + if (empty($arguments)) { + parent::setArguments($arguments); + + return; + } + + $processedArguments = []; + + if (array_key_exists(0, $arguments) && null !== $arguments[0]) { + $processedArguments[] = ($arguments[0]) ? 'SAVE' : 'NOSAVE'; + } + + if (array_key_exists(1, $arguments) && false !== $arguments[1]) { + $processedArguments[] = 'NOW'; + } + + if (array_key_exists(2, $arguments) && false !== $arguments[2]) { + $processedArguments[] = 'FORCE'; + } + + if (array_key_exists(3, $arguments) && false !== $arguments[3]) { + $processedArguments[] = 'ABORT'; + } + + parent::setArguments($processedArguments); + } } diff --git a/core/vendor/predis/predis/src/Command/Redis/SORT.php b/core/vendor/predis/predis/src/Command/Redis/SORT.php index c2b4be82b9..1338c81100 100644 --- a/core/vendor/predis/predis/src/Command/Redis/SORT.php +++ b/core/vendor/predis/predis/src/Command/Redis/SORT.php @@ -60,9 +60,9 @@ public function setArguments(array $arguments) } } - if (isset($sortParams['LIMIT']) && - is_array($sortParams['LIMIT']) && - count($sortParams['LIMIT']) == 2) { + if (isset($sortParams['LIMIT']) + && is_array($sortParams['LIMIT']) + && count($sortParams['LIMIT']) == 2) { $query[] = 'LIMIT'; $query[] = $sortParams['LIMIT'][0]; $query[] = $sortParams['LIMIT'][1]; diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTAGGREGATE.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTAGGREGATE.php new file mode 100644 index 0000000000..948455ed0d --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTAGGREGATE.php @@ -0,0 +1,40 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$index, $query], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTALIASADD.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTALIASADD.php new file mode 100644 index 0000000000..a2511ea326 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTALIASADD.php @@ -0,0 +1,28 @@ +toArray() : []; + + $schema = array_reduce($schema, static function (array $carry, FieldInterface $field) { + return array_merge($carry, $field->toArray()); + }, []); + + array_unshift($schema, 'SCHEMA', 'ADD'); + + parent::setArguments(array_merge( + [$index], + $commandArguments, + $schema + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTCONFIG.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTCONFIG.php new file mode 100644 index 0000000000..9cba60e053 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTCONFIG.php @@ -0,0 +1,30 @@ +toArray() : []; + + $schema = array_reduce($schema, static function (array $carry, FieldInterface $field) { + return array_merge($carry, $field->toArray()); + }, []); + + array_unshift($schema, 'SCHEMA'); + + parent::setArguments(array_merge( + [$index], + $commandArguments, + $schema + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTCURSOR.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTCURSOR.php new file mode 100644 index 0000000000..14a01948a8 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTCURSOR.php @@ -0,0 +1,34 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$subcommand, $index, $cursorId], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTDICTADD.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTDICTADD.php new file mode 100644 index 0000000000..c0bc3da729 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTDICTADD.php @@ -0,0 +1,28 @@ +toArray(); + } + + parent::setArguments(array_merge( + [$index], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTEXPLAIN.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTEXPLAIN.php new file mode 100644 index 0000000000..e2aa35d47c --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTEXPLAIN.php @@ -0,0 +1,43 @@ +toArray(); + } + + parent::setArguments(array_merge( + [$index, $query], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTINFO.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTINFO.php new file mode 100644 index 0000000000..02fa959749 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTINFO.php @@ -0,0 +1,28 @@ +toArray() + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTSEARCH.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTSEARCH.php new file mode 100644 index 0000000000..9fbe8a5638 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTSEARCH.php @@ -0,0 +1,39 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$index, $query], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTSPELLCHECK.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTSPELLCHECK.php new file mode 100644 index 0000000000..ac0232bb2c --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTSPELLCHECK.php @@ -0,0 +1,38 @@ +toArray(); + } + + parent::setArguments(array_merge( + [$index, $query], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTSUGADD.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTSUGADD.php new file mode 100644 index 0000000000..71c42a4a35 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTSUGADD.php @@ -0,0 +1,39 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$key, $string, $score], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTSUGDEL.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTSUGDEL.php new file mode 100644 index 0000000000..15457d10b7 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTSUGDEL.php @@ -0,0 +1,28 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$key, $prefix], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTSUGLEN.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTSUGLEN.php new file mode 100644 index 0000000000..1e11d8d307 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTSUGLEN.php @@ -0,0 +1,28 @@ +toArray(); + } + + $terms = array_slice($arguments, 3); + + parent::setArguments(array_merge( + [$index, $synonymGroupId], + $commandArguments, + $terms + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/Search/FTTAGVALS.php b/core/vendor/predis/predis/src/Command/Redis/Search/FTTAGVALS.php new file mode 100644 index 0000000000..b323949fef --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/Search/FTTAGVALS.php @@ -0,0 +1,28 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$key, $timestamp, $value], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSALTER.php b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSALTER.php new file mode 100644 index 0000000000..8797d68a38 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSALTER.php @@ -0,0 +1,39 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$key], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSCREATE.php b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSCREATE.php new file mode 100644 index 0000000000..0d88072c02 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSCREATE.php @@ -0,0 +1,39 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$key], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSCREATERULE.php b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSCREATERULE.php new file mode 100644 index 0000000000..c8bd62bcb4 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSCREATERULE.php @@ -0,0 +1,40 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$key, $value], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSDEL.php b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSDEL.php new file mode 100644 index 0000000000..747c5a629c --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSDEL.php @@ -0,0 +1,28 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$key], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSINCRBY.php b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSINCRBY.php new file mode 100644 index 0000000000..3141e5ded7 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSINCRBY.php @@ -0,0 +1,41 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$key, $value], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSINFO.php b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSINFO.php new file mode 100644 index 0000000000..d4941d407b --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSINFO.php @@ -0,0 +1,39 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$key], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMADD.php b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMADD.php new file mode 100644 index 0000000000..085224693e --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMADD.php @@ -0,0 +1,28 @@ +toArray(); + + array_push($processedArguments, 'FILTER', ...$arguments); + + parent::setArguments(array_merge( + $commandArguments, + $processedArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMRANGE.php b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMRANGE.php new file mode 100644 index 0000000000..3d68cdd998 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMRANGE.php @@ -0,0 +1,39 @@ +toArray(); + + parent::setArguments(array_merge( + [$fromTimestamp, $toTimestamp], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMREVRANGE.php b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMREVRANGE.php new file mode 100644 index 0000000000..987fd82010 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSMREVRANGE.php @@ -0,0 +1,26 @@ +toArray() : []; + + parent::setArguments(array_merge( + [$key, $fromTimestamp, $toTimestamp], + $commandArguments + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSREVRANGE.php b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSREVRANGE.php new file mode 100644 index 0000000000..1e8768e969 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TimeSeries/TSREVRANGE.php @@ -0,0 +1,26 @@ +filterArguments(); + } + + public function parseResponse($data) + { + if ($this->isWithCountModifier()) { + $result = []; + + for ($i = 0, $iMax = count($data); $i < $iMax; ++$i) { + if (array_key_exists($i + 1, $data)) { + $result[(string) $data[$i]] = $data[++$i]; + } + } + + return $result; + } + + return $data; + } + + /** + * Checks for the presence of the WITHCOUNT modifier. + * + * @return bool + */ + private function isWithCountModifier(): bool + { + $arguments = $this->getArguments(); + $lastArgument = (!empty($arguments)) ? $arguments[count($arguments) - 1] : null; + + return is_string($lastArgument) && strtoupper($lastArgument) === 'WITHCOUNT'; + } +} diff --git a/core/vendor/predis/predis/src/Command/Redis/TopK/TOPKQUERY.php b/core/vendor/predis/predis/src/Command/Redis/TopK/TOPKQUERY.php new file mode 100644 index 0000000000..1289021944 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Redis/TopK/TOPKQUERY.php @@ -0,0 +1,29 @@ +commands = [ @@ -44,13 +47,17 @@ public function getCommandClass(string $commandID): ?string $commandID = strtoupper($commandID); if (isset($this->commands[$commandID]) || array_key_exists($commandID, $this->commands)) { - $commandClass = $this->commands[$commandID]; - } elseif (class_exists($commandClass = "Predis\Command\Redis\\$commandID")) { - $this->commands[$commandID] = $commandClass; - } else { + return $this->commands[$commandID]; + } + + $commandClass = $this->resolve($commandID); + + if (null === $commandClass) { return null; } + $this->commands[$commandID] = $commandClass; + return $commandClass; } @@ -66,4 +73,40 @@ public function undefine(string $commandID): void // details of the implementation of this mechanism. $this->commands[strtoupper($commandID)] = null; } + + /** + * Resolves command object from given command ID. + * + * @param string $commandID Command ID of virtual method call + * @return string|null FQDN of corresponding command object + */ + private function resolve(string $commandID): ?string + { + if (class_exists($commandClass = self::COMMANDS_NAMESPACE . '\\' . $commandID)) { + return $commandClass; + } + + $commandModule = $this->resolveCommandModuleByPrefix($commandID); + + if (null === $commandModule) { + return null; + } + + if (class_exists($commandClass = self::COMMANDS_NAMESPACE . '\\' . $commandModule . '\\' . $commandID)) { + return $commandClass; + } + + return null; + } + + private function resolveCommandModuleByPrefix(string $commandID): ?string + { + foreach (ClientConfiguration::getModules() as $module) { + if (preg_match("/^{$module['commandPrefix']}/", $commandID)) { + return $module['name']; + } + } + + return null; + } } diff --git a/core/vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DumpStrategy.php b/core/vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DumpStrategy.php new file mode 100644 index 0000000000..13f49ab062 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Strategy/ContainerCommands/Functions/DumpStrategy.php @@ -0,0 +1,26 @@ +separator = $separator; + } + /** * {@inheritDoc} */ public function resolve(string $commandId, string $subcommandId): SubcommandStrategyInterface { - $subcommandStrategyClass = ucfirst(strtolower($subcommandId)) . 'Strategy'; - $commandDirectoryName = ucfirst(strtolower($commandId)); + $subcommandStrategyClass = ucwords($subcommandId) . 'Strategy'; + $commandDirectoryName = ucwords($commandId); + + if (!is_null($this->separator)) { + $subcommandStrategyClass = str_replace($this->separator, '', $subcommandStrategyClass); + $commandDirectoryName = str_replace($this->separator, '', $commandDirectoryName); + } if (class_exists( $containerCommandClass = self::CONTAINER_COMMANDS_NAMESPACE . '\\' . $commandDirectoryName . '\\' . $subcommandStrategyClass diff --git a/core/vendor/predis/predis/src/Command/Traits/BitByte.php b/core/vendor/predis/predis/src/Command/Traits/BitByte.php index b7ce689ce5..067302d22d 100644 --- a/core/vendor/predis/predis/src/Command/Traits/BitByte.php +++ b/core/vendor/predis/predis/src/Command/Traits/BitByte.php @@ -23,6 +23,12 @@ public function setArguments(array $arguments) { $value = array_pop($arguments); + if (null === $value) { + parent::setArguments($arguments); + + return; + } + if (in_array(strtoupper($value), self::$argumentEnum, true)) { $arguments[] = self::$argumentEnum[$value]; } else { diff --git a/core/vendor/predis/predis/src/Command/Traits/BloomFilters/BucketSize.php b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/BucketSize.php new file mode 100644 index 0000000000..99e22be053 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/BucketSize.php @@ -0,0 +1,57 @@ += $argumentsLength) { + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$bucketSizeArgumentPositionOffset] === -1) { + array_splice($arguments, static::$bucketSizeArgumentPositionOffset, 1, [false]); + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$bucketSizeArgumentPositionOffset] < 1) { + throw new UnexpectedValueException('Wrong bucket size argument value or position offset'); + } + + $argument = $arguments[static::$bucketSizeArgumentPositionOffset]; + $argumentsBefore = array_slice($arguments, 0, static::$bucketSizeArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$bucketSizeArgumentPositionOffset + 1); + + parent::setArguments(array_merge( + $argumentsBefore, + [self::$bucketSizeModifier], + [$argument], + $argumentsAfter + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Capacity.php b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Capacity.php new file mode 100644 index 0000000000..c0dccc8a43 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Capacity.php @@ -0,0 +1,57 @@ += $argumentsLength) { + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$capacityArgumentPositionOffset] === -1) { + array_splice($arguments, static::$capacityArgumentPositionOffset, 1, [false]); + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$capacityArgumentPositionOffset] < 1) { + throw new UnexpectedValueException('Wrong capacity argument value or position offset'); + } + + $argument = $arguments[static::$capacityArgumentPositionOffset]; + $argumentsBefore = array_slice($arguments, 0, static::$capacityArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$capacityArgumentPositionOffset + 1); + + parent::setArguments(array_merge( + $argumentsBefore, + [self::$capacityModifier], + [$argument], + $argumentsAfter + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Error.php b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Error.php new file mode 100644 index 0000000000..661def80f1 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Error.php @@ -0,0 +1,57 @@ += $argumentsLength) { + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$errorArgumentPositionOffset] === -1) { + array_splice($arguments, static::$errorArgumentPositionOffset, 1, [false]); + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$errorArgumentPositionOffset] < 0) { + throw new UnexpectedValueException('Wrong error argument value or position offset'); + } + + $argument = $arguments[static::$errorArgumentPositionOffset]; + $argumentsBefore = array_slice($arguments, 0, static::$errorArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$errorArgumentPositionOffset + 1); + + parent::setArguments(array_merge( + $argumentsBefore, + [self::$errorModifier], + [$argument], + $argumentsAfter + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Expansion.php b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Expansion.php new file mode 100644 index 0000000000..74d916f4c7 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Expansion.php @@ -0,0 +1,53 @@ += $argumentsLength) { + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$expansionArgumentPositionOffset] === -1) { + array_splice($arguments, static::$expansionArgumentPositionOffset, 1, [false]); + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$expansionArgumentPositionOffset] < 1) { + throw new UnexpectedValueException('Wrong expansion argument value or position offset'); + } + + $argument = $arguments[static::$expansionArgumentPositionOffset]; + $argumentsBefore = array_slice($arguments, 0, static::$expansionArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$expansionArgumentPositionOffset + 1); + + parent::setArguments(array_merge( + $argumentsBefore, + [self::$expansionModifier], + [$argument], + $argumentsAfter + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Items.php b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Items.php new file mode 100644 index 0000000000..9d2e4dcfe2 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/Items.php @@ -0,0 +1,45 @@ += $argumentsLength) { + parent::setArguments($arguments); + + return; + } + + $argument = $arguments[static::$itemsArgumentPositionOffset]; + $argumentsBefore = array_slice($arguments, 0, static::$itemsArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$itemsArgumentPositionOffset + 1); + + parent::setArguments(array_merge( + $argumentsBefore, + [self::$itemsModifier], + [$argument], + $argumentsAfter + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/BloomFilters/MaxIterations.php b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/MaxIterations.php new file mode 100644 index 0000000000..fb307e6d90 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/MaxIterations.php @@ -0,0 +1,57 @@ += $argumentsLength) { + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$maxIterationsArgumentPositionOffset] === -1) { + array_splice($arguments, static::$maxIterationsArgumentPositionOffset, 1, [false]); + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$maxIterationsArgumentPositionOffset] < 1) { + throw new UnexpectedValueException('Wrong max iterations argument value or position offset'); + } + + $argument = $arguments[static::$maxIterationsArgumentPositionOffset]; + $argumentsBefore = array_slice($arguments, 0, static::$maxIterationsArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$maxIterationsArgumentPositionOffset + 1); + + parent::setArguments(array_merge( + $argumentsBefore, + [self::$maxIterationsModifier], + [$argument], + $argumentsAfter + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/BloomFilters/NoCreate.php b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/NoCreate.php new file mode 100644 index 0000000000..7fc084ec8e --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/BloomFilters/NoCreate.php @@ -0,0 +1,49 @@ += $argumentsLength + || false === $arguments[static::$noCreateArgumentPositionOffset] + ) { + parent::setArguments($arguments); + + return; + } + + $argument = $arguments[static::$noCreateArgumentPositionOffset]; + + if (true === $argument) { + $argument = 'NOCREATE'; + } else { + throw new UnexpectedValueException('Wrong NOCREATE argument type'); + } + + $argumentsBefore = array_slice($arguments, 0, static::$noCreateArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$noCreateArgumentPositionOffset + 1); + + parent::setArguments(array_merge($argumentsBefore, [$argument], $argumentsAfter)); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/Expire/ExpireOptions.php b/core/vendor/predis/predis/src/Command/Traits/Expire/ExpireOptions.php index 85cff7a2a4..4f683f3ca9 100644 --- a/core/vendor/predis/predis/src/Command/Traits/Expire/ExpireOptions.php +++ b/core/vendor/predis/predis/src/Command/Traits/Expire/ExpireOptions.php @@ -25,6 +25,12 @@ public function setArguments(array $arguments) { $value = array_pop($arguments); + if (null === $value) { + parent::setArguments($arguments); + + return; + } + if (in_array(strtoupper($value), self::$argumentEnum, true)) { $arguments[] = self::$argumentEnum[strtolower($value)]; } else { diff --git a/core/vendor/predis/predis/src/Command/Traits/Json/Indent.php b/core/vendor/predis/predis/src/Command/Traits/Json/Indent.php new file mode 100644 index 0000000000..3e0dfb1332 --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/Json/Indent.php @@ -0,0 +1,54 @@ += $argumentsLength) { + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$indentArgumentPositionOffset] === '') { + array_splice($arguments, static::$indentArgumentPositionOffset, 1, [false]); + parent::setArguments($arguments); + + return; + } + + $argument = $arguments[static::$indentArgumentPositionOffset]; + + if (!is_string($argument)) { + throw new UnexpectedValueException('Indent argument value should be a string'); + } + + $argumentsBefore = array_slice($arguments, 0, static::$indentArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$indentArgumentPositionOffset + 1); + + parent::setArguments(array_merge( + $argumentsBefore, + [self::$indentModifier], + [$argument], + $argumentsAfter + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/Json/Newline.php b/core/vendor/predis/predis/src/Command/Traits/Json/Newline.php new file mode 100644 index 0000000000..7bab8205bc --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/Json/Newline.php @@ -0,0 +1,54 @@ += $argumentsLength) { + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$newlineArgumentPositionOffset] === '') { + array_splice($arguments, static::$newlineArgumentPositionOffset, 1, [false]); + parent::setArguments($arguments); + + return; + } + + $argument = $arguments[static::$newlineArgumentPositionOffset]; + + if (!is_string($argument)) { + throw new UnexpectedValueException('Newline argument value should be a string'); + } + + $argumentsBefore = array_slice($arguments, 0, static::$newlineArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$newlineArgumentPositionOffset + 1); + + parent::setArguments(array_merge( + $argumentsBefore, + [self::$newlineModifier], + [$argument], + $argumentsAfter + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/Json/NxXxArgument.php b/core/vendor/predis/predis/src/Command/Traits/Json/NxXxArgument.php new file mode 100644 index 0000000000..39d3cb234f --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/Json/NxXxArgument.php @@ -0,0 +1,64 @@ + 'NX', + 'xx' => 'XX', + ]; + + public function setArguments(array $arguments) + { + $argumentsLength = count($arguments); + + if (static::$nxXxArgumentPositionOffset >= $argumentsLength) { + parent::setArguments($arguments); + + return; + } + + if (null === $arguments[static::$nxXxArgumentPositionOffset]) { + array_splice($arguments, static::$nxXxArgumentPositionOffset, 1, [false]); + parent::setArguments($arguments); + + return; + } + + $argument = $arguments[static::$nxXxArgumentPositionOffset]; + + if (!in_array(strtoupper($argument), self::$argumentEnum, true)) { + $enumValues = implode(', ', array_keys(self::$argumentEnum)); + throw new UnexpectedValueException("Argument accepts only: {$enumValues} values"); + } + + $argumentsBefore = array_slice($arguments, 0, static::$nxXxArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$nxXxArgumentPositionOffset + 1); + + parent::setArguments(array_merge( + $argumentsBefore, + [self::$argumentEnum[strtolower($argument)]], + $argumentsAfter + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/Json/Space.php b/core/vendor/predis/predis/src/Command/Traits/Json/Space.php new file mode 100644 index 0000000000..5c99828f4c --- /dev/null +++ b/core/vendor/predis/predis/src/Command/Traits/Json/Space.php @@ -0,0 +1,54 @@ += $argumentsLength) { + parent::setArguments($arguments); + + return; + } + + if ($arguments[static::$spaceArgumentPositionOffset] === '') { + array_splice($arguments, static::$spaceArgumentPositionOffset, 1, [false]); + parent::setArguments($arguments); + + return; + } + + $argument = $arguments[static::$spaceArgumentPositionOffset]; + + if (!is_string($argument)) { + throw new UnexpectedValueException('Space argument value should be a string'); + } + + $argumentsBefore = array_slice($arguments, 0, static::$spaceArgumentPositionOffset); + $argumentsAfter = array_slice($arguments, static::$spaceArgumentPositionOffset + 1); + + parent::setArguments(array_merge( + $argumentsBefore, + [self::$spaceModifier], + [$argument], + $argumentsAfter + )); + } +} diff --git a/core/vendor/predis/predis/src/Command/Traits/Keys.php b/core/vendor/predis/predis/src/Command/Traits/Keys.php index a623e9cab9..5dc86ad7d7 100644 --- a/core/vendor/predis/predis/src/Command/Traits/Keys.php +++ b/core/vendor/predis/predis/src/Command/Traits/Keys.php @@ -25,8 +25,8 @@ public function setArguments(array $arguments, bool $withNumkeys = true) $argumentsLength = count($arguments); if ( - static::$keysArgumentPositionOffset > $argumentsLength || - !is_array($arguments[static::$keysArgumentPositionOffset]) + static::$keysArgumentPositionOffset > $argumentsLength + || !is_array($arguments[static::$keysArgumentPositionOffset]) ) { throw new UnexpectedValueException('Wrong keys argument type or position offset'); } diff --git a/core/vendor/predis/predis/src/Command/Traits/With/WithScores.php b/core/vendor/predis/predis/src/Command/Traits/With/WithScores.php index e98b4ea23b..bc81d36c98 100644 --- a/core/vendor/predis/predis/src/Command/Traits/With/WithScores.php +++ b/core/vendor/predis/predis/src/Command/Traits/With/WithScores.php @@ -53,7 +53,9 @@ public function parseResponse($data) $result = []; for ($i = 0, $iMax = count($data); $i < $iMax; ++$i) { - if ($data[$i + 1] ?? false) { + if (is_array($data[$i])) { + $result[$data[$i][0]] = $data[$i][1]; // Relay + } elseif (array_key_exists($i + 1, $data)) { $result[$data[$i]] = $data[++$i]; } } diff --git a/core/vendor/predis/predis/src/Configuration/Option/Connections.php b/core/vendor/predis/predis/src/Configuration/Option/Connections.php index fdc6656937..e37de4cadd 100644 --- a/core/vendor/predis/predis/src/Configuration/Option/Connections.php +++ b/core/vendor/predis/predis/src/Configuration/Option/Connections.php @@ -19,6 +19,7 @@ use Predis\Connection\FactoryInterface; use Predis\Connection\PhpiredisSocketConnection; use Predis\Connection\PhpiredisStreamConnection; +use Predis\Connection\RelayConnection; /** * Configures a new connection factory instance. @@ -57,7 +58,7 @@ public function filter(OptionsInterface $options, $value) * The factory instance is configured according to the supplied named array * mapping URI schemes (passed as keys) to the FCQN of classes implementing * Predis\Connection\NodeConnectionInterface, or callable objects acting as - * lazy initalizers and returning new instances of classes implementing + * lazy initializers and returning new instances of classes implementing * Predis\Connection\NodeConnectionInterface. * * @param OptionsInterface $options Client options @@ -89,6 +90,7 @@ protected function createFactoryByArray(OptionsInterface $options, array $value) * - "phpiredis-stream" maps tcp, redis, unix to PhpiredisStreamConnection * - "phpiredis-socket" maps tcp, redis, unix to PhpiredisSocketConnection * - "phpiredis" is an alias of "phpiredis-stream" + * - "relay" maps tcp, redis, unix, tls, rediss to RelayConnection * * @param OptionsInterface $options Client options * @param string $value Descriptive string identifying the desired configuration @@ -116,6 +118,12 @@ protected function createFactoryByString(OptionsInterface $options, string $valu $factory->define('unix', PhpiredisSocketConnection::class); break; + case 'relay': + $factory->define('tcp', RelayConnection::class); + $factory->define('redis', RelayConnection::class); + $factory->define('unix', RelayConnection::class); + break; + case 'default': return $factory; diff --git a/core/vendor/predis/predis/src/Configuration/Options.php b/core/vendor/predis/predis/src/Configuration/Options.php index de6504f7ad..3fff041296 100644 --- a/core/vendor/predis/predis/src/Configuration/Options.php +++ b/core/vendor/predis/predis/src/Configuration/Options.php @@ -67,8 +67,8 @@ public function getDefault($option) public function defined($option) { return - array_key_exists($option, $this->options) || - array_key_exists($option, $this->input) + array_key_exists($option, $this->options) + || array_key_exists($option, $this->input) ; } @@ -78,8 +78,8 @@ public function defined($option) public function __isset($option) { return ( - array_key_exists($option, $this->options) || - array_key_exists($option, $this->input) + array_key_exists($option, $this->options) + || array_key_exists($option, $this->input) ) && $this->__get($option) !== null; } diff --git a/core/vendor/predis/predis/src/Connection/AbstractConnection.php b/core/vendor/predis/predis/src/Connection/AbstractConnection.php index 5383924cc2..3273f38669 100644 --- a/core/vendor/predis/predis/src/Connection/AbstractConnection.php +++ b/core/vendor/predis/predis/src/Connection/AbstractConnection.php @@ -14,6 +14,7 @@ use InvalidArgumentException; use Predis\Command\CommandInterface; +use Predis\Command\RawCommand; use Predis\CommunicationException; use Predis\Protocol\ProtocolException; @@ -27,6 +28,10 @@ abstract class AbstractConnection implements NodeConnectionInterface private $cachedId; protected $parameters; + + /** + * @var RawCommand[] + */ protected $initCommands = []; /** @@ -101,6 +106,14 @@ public function addConnectCommand(CommandInterface $command) $this->initCommands[] = $command; } + /** + * {@inheritdoc} + */ + public function getInitCommands(): array + { + return $this->initCommands; + } + /** * {@inheritdoc} */ diff --git a/core/vendor/predis/predis/src/Connection/Cluster/PredisCluster.php b/core/vendor/predis/predis/src/Connection/Cluster/PredisCluster.php index 0ba29bb505..c30fd09d36 100644 --- a/core/vendor/predis/predis/src/Connection/Cluster/PredisCluster.php +++ b/core/vendor/predis/predis/src/Connection/Cluster/PredisCluster.php @@ -21,6 +21,7 @@ use Predis\Connection\NodeConnectionInterface; use Predis\NotSupportedException; use ReturnTypeWillChange; +use Traversable; /** * Abstraction for a cluster of aggregate connections to various Redis servers @@ -200,7 +201,7 @@ public function getClusterStrategy() } /** - * {@inheritdoc} + * @return int */ #[ReturnTypeWillChange] public function count() @@ -209,7 +210,7 @@ public function count() } /** - * {@inheritdoc} + * @return Traversable */ #[ReturnTypeWillChange] public function getIterator() diff --git a/core/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php b/core/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php index e037694034..7f3013c175 100644 --- a/core/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php +++ b/core/vendor/predis/predis/src/Connection/Cluster/RedisCluster.php @@ -31,6 +31,7 @@ use Predis\Response\ServerException; use ReturnTypeWillChange; use Throwable; +use Traversable; /** * Abstraction for a Redis-backed cluster of nodes (Redis >= 3.0.0). @@ -589,7 +590,7 @@ public function executeCommand(CommandInterface $command) } /** - * {@inheritdoc} + * @return int */ #[ReturnTypeWillChange] public function count() @@ -598,7 +599,7 @@ public function count() } /** - * {@inheritdoc} + * @return Traversable */ #[ReturnTypeWillChange] public function getIterator() diff --git a/core/vendor/predis/predis/src/Connection/Factory.php b/core/vendor/predis/predis/src/Connection/Factory.php index ad472360c4..c78c6d4065 100644 --- a/core/vendor/predis/predis/src/Connection/Factory.php +++ b/core/vendor/predis/predis/src/Connection/Factory.php @@ -13,6 +13,7 @@ namespace Predis\Connection; use InvalidArgumentException; +use Predis\Client; use Predis\Command\RawCommand; use ReflectionClass; use UnexpectedValueException; @@ -174,6 +175,16 @@ protected function prepareConnection(NodeConnectionInterface $connection) ); } + if (!$connection instanceof RelayConnection) { + $connection->addConnectCommand( + new RawCommand('CLIENT', ['SETINFO', 'LIB-NAME', 'predis']) + ); + + $connection->addConnectCommand( + new RawCommand('CLIENT', ['SETINFO', 'LIB-VER', Client::VERSION]) + ); + } + if (isset($parameters->database) && strlen($parameters->database)) { $connection->addConnectCommand( new RawCommand('SELECT', [$parameters->database]) diff --git a/core/vendor/predis/predis/src/Connection/ParametersInterface.php b/core/vendor/predis/predis/src/Connection/ParametersInterface.php index 25c7e1ae66..37ed97f7a0 100644 --- a/core/vendor/predis/predis/src/Connection/ParametersInterface.php +++ b/core/vendor/predis/predis/src/Connection/ParametersInterface.php @@ -26,11 +26,14 @@ * @property string $alias Alias for the connection. * @property float $timeout Timeout for the connect() operation. * @property float $read_write_timeout Timeout for read() and write() operations. - * @property bool $async_connect Performs the connect() operation asynchronously. - * @property bool $tcp_nodelay Toggles the Nagle's algorithm for coalescing. * @property bool $persistent Leaves the connection open after a GC collection. * @property string $password Password to access Redis (see the AUTH command). * @property string $database Database index (see the SELECT command). + * @property bool $async_connect Performs the connect() operation asynchronously. + * @property bool $tcp_nodelay Toggles the Nagle's algorithm for coalescing. + * @property bool $cache (Relay only) Whether to use in-memory caching. + * @property string $serializer (Relay only) Serializer used for data serialization. + * @property string $compression (Relay only) Algorithm used for data compression. */ interface ParametersInterface { diff --git a/core/vendor/predis/predis/src/Connection/RelayConnection.php b/core/vendor/predis/predis/src/Connection/RelayConnection.php new file mode 100644 index 0000000000..4ff674f5f4 --- /dev/null +++ b/core/vendor/predis/predis/src/Connection/RelayConnection.php @@ -0,0 +1,337 @@ +assertExtensions(); + + $this->parameters = $this->assertParameters($parameters); + $this->client = $this->createClient(); + } + + /** + * {@inheritdoc} + */ + public function isConnected() + { + return $this->client->isConnected(); + } + + /** + * {@inheritdoc} + */ + public function disconnect() + { + if ($this->client->isConnected()) { + $this->client->close(); + } + } + + /** + * Checks if the Relay extension is loaded in PHP. + */ + private function assertExtensions() + { + if (!extension_loaded('relay')) { + throw new NotSupportedException( + 'The "relay" extension is required by this connection backend.' + ); + } + } + + /** + * {@inheritdoc} + */ + protected function assertParameters(ParametersInterface $parameters) + { + if (!in_array($parameters->scheme, ['tcp', 'tls', 'unix', 'redis', 'rediss'])) { + throw new InvalidArgumentException("Invalid scheme: '{$parameters->scheme}'."); + } + + if (!in_array($parameters->serializer, [null, 'php', 'igbinary', 'msgpack', 'json'])) { + throw new InvalidArgumentException("Invalid serializer: '{$parameters->serializer}'."); + } + + if (!in_array($parameters->compression, [null, 'lzf', 'lz4', 'zstd'])) { + throw new InvalidArgumentException("Invalid compression algorithm: '{$parameters->compression}'."); + } + + return $parameters; + } + + /** + * Creates a new instance of the client. + * + * @return \Relay\Relay + */ + private function createClient() + { + $client = new Relay(); + + // throw when errors occur and return `null` for non-existent keys + $client->setOption(Relay::OPT_PHPREDIS_COMPATIBILITY, false); + + // use reply literals + $client->setOption(Relay::OPT_REPLY_LITERAL, true); + + // disable Relay's command/connection retry + $client->setOption(Relay::OPT_MAX_RETRIES, 0); + + // whether to use in-memory caching + $client->setOption(Relay::OPT_USE_CACHE, $this->parameters->cache ?? true); + + // set data serializer + $client->setOption(Relay::OPT_SERIALIZER, constant(sprintf( + '%s::SERIALIZER_%s', + Relay::class, + strtoupper($this->parameters->serializer ?? 'none') + ))); + + // set data compression algorithm + $client->setOption(Relay::OPT_COMPRESSION, constant(sprintf( + '%s::COMPRESSION_%s', + Relay::class, + strtoupper($this->parameters->compression ?? 'none') + ))); + + return $client; + } + + /** + * Returns the underlying client. + * + * @return \Relay\Relay + */ + public function getClient() + { + return $this->client; + } + + /** + * {@inheritdoc} + */ + protected function getIdentifier() + { + return $this->client->endpointId(); + } + + /** + * {@inheritdoc} + */ + protected function createStreamSocket(ParametersInterface $parameters, $address, $flags) + { + $timeout = isset($parameters->timeout) ? (float) $parameters->timeout : 5.0; + + $retry_interval = 0; + $read_timeout = 5.0; + + if (isset($parameters->read_write_timeout)) { + $read_timeout = (float) $parameters->read_write_timeout; + $read_timeout = $read_timeout > 0 ? $read_timeout : 0; + } + + try { + $this->client->connect( + $parameters->path ?? $parameters->host, + isset($parameters->path) ? 0 : $parameters->port, + $timeout, + null, + $retry_interval, + $read_timeout + ); + } catch (RelayException $ex) { + $this->onConnectionError($ex->getMessage(), $ex->getCode()); + } + + return $this->client; + } + + /** + * {@inheritdoc} + */ + public function executeCommand(CommandInterface $command) + { + if (!$this->client->isConnected()) { + $this->getResource(); + } + + try { + $name = $command->getId(); + + // When using compression or a serializer, we'll need a dedicated + // handler for `Predis\Command\RawCommand` calls, currently both + // parameters are unsupported until a future Relay release + return in_array($name, $this->atypicalCommands) + ? $this->client->{$name}(...$command->getArguments()) + : $this->client->rawCommand($name, ...$command->getArguments()); + } catch (RelayException $ex) { + throw $this->onCommandError($ex, $command); + } + } + + /** + * {@inheritdoc} + */ + public function onCommandError(RelayException $exception, CommandInterface $command) + { + $code = $exception->getCode(); + $message = $exception->getMessage(); + + if (strpos($message, 'RELAY_ERR_IO')) { + return new ConnectionException($this, $message, $code, $exception); + } + + if (strpos($message, 'RELAY_ERR_REDIS')) { + return new ServerException($message, $code, $exception); + } + + if (strpos($message, 'RELAY_ERR_WRONGTYPE') && strpos($message, "Got reply-type 'status'")) { + $message = 'Operation against a key holding the wrong kind of value'; + } + + return new ClientException($message, $code, $exception); + } + + /** + * Applies the configured serializer and compression to given value. + * + * @param mixed $value + * @return string + */ + public function pack($value) + { + return $this->client->_pack($value); + } + + /** + * Deserializes and decompresses to given value. + * + * @param mixed $value + * @return string + */ + public function unpack($value) + { + return $this->client->_unpack($value); + } + + /** + * {@inheritdoc} + */ + public function writeRequest(CommandInterface $command) + { + throw new NotSupportedException('The "relay" extension does not support writing requests.'); + } + + /** + * {@inheritdoc} + */ + public function readResponse(CommandInterface $command) + { + throw new NotSupportedException('The "relay" extension does not support reading responses.'); + } + + /** + * {@inheritdoc} + */ + public function __destruct() + { + $this->disconnect(); + } + + /** + * {@inheritdoc} + */ + public function __wakeup() + { + $this->assertExtensions(); + $this->client = $this->createClient(); + } +} diff --git a/core/vendor/predis/predis/src/Connection/RelayMethods.php b/core/vendor/predis/predis/src/Connection/RelayMethods.php new file mode 100644 index 0000000000..a52c4a035f --- /dev/null +++ b/core/vendor/predis/predis/src/Connection/RelayMethods.php @@ -0,0 +1,136 @@ +client->onFlushed($callback); + } + + /** + * Registers a new `invalidated` event listener. + * + * @param callable $callback + * @param string $pattern + * @return bool + */ + public function onInvalidated(?callable $callback, string $pattern = null) + { + return $this->client->onInvalidated($callback, $pattern); + } + + /** + * Dispatches all pending events. + * + * @return int|false + */ + public function dispatchEvents() + { + return $this->client->dispatchEvents(); + } + + /** + * Adds ignore pattern(s). Matching keys will not be cached in memory. + * + * @param string $pattern,... + * @return int + */ + public function addIgnorePatterns(string ...$pattern) + { + return $this->client->addIgnorePatterns(...$pattern); + } + + /** + * Adds allow pattern(s). Only matching keys will be cached in memory. + * + * @param string $pattern,... + * @return int + */ + public function addAllowPatterns(string ...$pattern) + { + return $this->client->addAllowPatterns(...$pattern); + } + + /** + * Returns the connection's endpoint identifier. + * + * @return string|false + */ + public function endpointId() + { + return $this->client->endpointId(); + } + + /** + * Returns a unique representation of the underlying socket connection identifier. + * + * @return string|false + */ + public function socketId() + { + return $this->client->socketId(); + } + + /** + * Returns information about the license. + * + * @return array + */ + public function license() + { + return $this->client->license(); + } + + /** + * Returns statistics about Relay. + * + * @return array> + */ + public function stats() + { + return $this->client->stats(); + } + + /** + * Returns the number of bytes allocated, or `0` in client-only mode. + * + * @return int + */ + public function maxMemory() + { + return $this->client->maxMemory(); + } + + /** + * Flushes Relay's in-memory cache of all databases. + * When given an endpoint, only that connection will be flushed. + * When given an endpoint and database index, only that database + * for that connection will be flushed. + * + * @param ?string $endpointId + * @param ?int $db + * @return bool + */ + public function flushMemory(string $endpointId = null, int $db = null) + { + return $this->client->flushMemory($endpointId, $db); + } +} diff --git a/core/vendor/predis/predis/src/Connection/Replication/SentinelReplication.php b/core/vendor/predis/predis/src/Connection/Replication/SentinelReplication.php index 13fbedb176..14dbe2758f 100644 --- a/core/vendor/predis/predis/src/Connection/Replication/SentinelReplication.php +++ b/core/vendor/predis/predis/src/Connection/Replication/SentinelReplication.php @@ -211,6 +211,7 @@ public function add(NodeConnectionInterface $connection) $this->master = $connection; } elseif ('sentinel' === $role) { $this->sentinels[] = $connection; + // sentinels are not considered part of the pool. return; } else { diff --git a/core/vendor/predis/predis/src/Connection/StreamConnection.php b/core/vendor/predis/predis/src/Connection/StreamConnection.php index 4402530677..2fe307067a 100644 --- a/core/vendor/predis/predis/src/Connection/StreamConnection.php +++ b/core/vendor/predis/predis/src/Connection/StreamConnection.php @@ -231,7 +231,9 @@ public function connect() foreach ($this->initCommands as $command) { $response = $this->executeCommand($command); - if ($response instanceof ErrorResponseInterface) { + if ($response instanceof ErrorResponseInterface && $command->getId() === 'CLIENT') { + // Do nothing on CLIENT SETINFO command failure + } elseif ($response instanceof ErrorResponseInterface) { $this->onConnectionError("`{$command->getId()}` failed: {$response->getMessage()}", 0); } } @@ -244,7 +246,10 @@ public function connect() public function disconnect() { if ($this->isConnected()) { - fclose($this->getResource()); + $resource = $this->getResource(); + if (is_resource($resource)) { + fclose($resource); + } parent::disconnect(); } } diff --git a/core/vendor/predis/predis/src/Monitor/Consumer.php b/core/vendor/predis/predis/src/Monitor/Consumer.php index eb46b049f8..9076bf12f5 100644 --- a/core/vendor/predis/predis/src/Monitor/Consumer.php +++ b/core/vendor/predis/predis/src/Monitor/Consumer.php @@ -90,7 +90,7 @@ public function stop() } /** - * {@inheritdoc} + * @return void */ #[ReturnTypeWillChange] public function rewind() @@ -110,7 +110,7 @@ public function current() } /** - * {@inheritdoc} + * @return int|null */ #[ReturnTypeWillChange] public function key() @@ -119,7 +119,7 @@ public function key() } /** - * {@inheritdoc} + * @return void */ #[ReturnTypeWillChange] public function next() diff --git a/core/vendor/predis/predis/src/Pipeline/Pipeline.php b/core/vendor/predis/predis/src/Pipeline/Pipeline.php index 3e1011f2be..1f67d0b9fe 100644 --- a/core/vendor/predis/predis/src/Pipeline/Pipeline.php +++ b/core/vendor/predis/predis/src/Pipeline/Pipeline.php @@ -33,7 +33,7 @@ */ class Pipeline implements ClientContextInterface { - private $client; + protected $client; private $pipeline; private $responses = []; diff --git a/core/vendor/predis/predis/src/Pipeline/RelayAtomic.php b/core/vendor/predis/predis/src/Pipeline/RelayAtomic.php new file mode 100644 index 0000000000..c36e108684 --- /dev/null +++ b/core/vendor/predis/predis/src/Pipeline/RelayAtomic.php @@ -0,0 +1,69 @@ +getClient(); + + $throw = $this->client->getOptions()->exceptions; + + try { + $transaction = $client->multi(); + + foreach ($commands as $command) { + $name = $command->getId(); + + in_array($name, $connection->atypicalCommands) + ? $transaction->{$name}(...$command->getArguments()) + : $transaction->rawCommand($name, ...$command->getArguments()); + } + + $responses = $transaction->exec(); + + if (!is_array($responses)) { + return $responses; + } + + foreach ($responses as $key => $response) { + if ($response instanceof RelayException) { + if ($throw) { + throw $response; + } + + $responses[$key] = new Error($response->getMessage()); + } + } + + return $responses; + } catch (RelayException $ex) { + if ($client->getMode() !== $client::ATOMIC) { + $client->discard(); + } + + throw new ServerException($ex->getMessage(), $ex->getCode(), $ex); + } + } +} diff --git a/core/vendor/predis/predis/src/Pipeline/RelayPipeline.php b/core/vendor/predis/predis/src/Pipeline/RelayPipeline.php new file mode 100644 index 0000000000..5f36a0aa4a --- /dev/null +++ b/core/vendor/predis/predis/src/Pipeline/RelayPipeline.php @@ -0,0 +1,75 @@ +getClient(); + + $throw = $this->client->getOptions()->exceptions; + + try { + $pipeline = $client->pipeline(); + + foreach ($commands as $command) { + $name = $command->getId(); + + in_array($name, $connection->atypicalCommands) + ? $pipeline->{$name}(...$command->getArguments()) + : $pipeline->rawCommand($name, ...$command->getArguments()); + } + + $responses = $pipeline->exec(); + + if (!is_array($responses)) { + return $responses; + } + + foreach ($responses as $key => $response) { + if ($response instanceof RelayException) { + if ($throw) { + throw $response; + } + + $responses[$key] = new Error($response->getMessage()); + } + } + + return $responses; + } catch (RelayException $ex) { + if ($client->getMode() !== $client::ATOMIC) { + $client->discard(); + } + + throw new ServerException($ex->getMessage(), $ex->getCode(), $ex); + } + } +} diff --git a/core/vendor/predis/predis/src/PubSub/AbstractConsumer.php b/core/vendor/predis/predis/src/PubSub/AbstractConsumer.php index f764693dfe..c9ea2d658f 100644 --- a/core/vendor/predis/predis/src/PubSub/AbstractConsumer.php +++ b/core/vendor/predis/predis/src/PubSub/AbstractConsumer.php @@ -32,8 +32,8 @@ abstract class AbstractConsumer implements Iterator public const STATUS_SUBSCRIBED = 2; // 0b0010 public const STATUS_PSUBSCRIBED = 4; // 0b0100 - private $position = null; - private $statusFlags = self::STATUS_VALID; + protected $position; + protected $statusFlags = self::STATUS_VALID; /** * Automatically stops the consumer when the garbage collector kicks in. @@ -151,7 +151,7 @@ abstract protected function disconnect(); abstract protected function writeRequest($method, $arguments); /** - * {@inheritdoc} + * @return void */ #[ReturnTypeWillChange] public function rewind() @@ -172,7 +172,7 @@ public function current() } /** - * {@inheritdoc} + * @return int|null */ #[ReturnTypeWillChange] public function key() @@ -181,7 +181,7 @@ public function key() } /** - * {@inheritdoc} + * @return int|null */ #[ReturnTypeWillChange] public function next() diff --git a/core/vendor/predis/predis/src/PubSub/Consumer.php b/core/vendor/predis/predis/src/PubSub/Consumer.php index 253c33fd47..b526732328 100644 --- a/core/vendor/predis/predis/src/PubSub/Consumer.php +++ b/core/vendor/predis/predis/src/PubSub/Consumer.php @@ -19,12 +19,12 @@ use Predis\NotSupportedException; /** - * PUB/SUB consumer abstraction. + * PUB/SUB consumer. */ class Consumer extends AbstractConsumer { - private $client; - private $options; + protected $client; + protected $options; /** * @param ClientInterface $client Client instance used by the consumer. @@ -59,7 +59,7 @@ public function getClient() * * @throws NotSupportedException */ - private function checkCapabilities(ClientInterface $client) + protected function checkCapabilities(ClientInterface $client) { if ($client->getConnection() instanceof ClusterInterface) { throw new NotSupportedException( @@ -81,7 +81,7 @@ private function checkCapabilities(ClientInterface $client) * * @param string $subscribeAction Type of subscription. */ - private function genericSubscribeInit($subscribeAction) + protected function genericSubscribeInit($subscribeAction) { if (isset($this->options[$subscribeAction])) { $this->$subscribeAction($this->options[$subscribeAction]); diff --git a/core/vendor/predis/predis/src/PubSub/RelayConsumer.php b/core/vendor/predis/predis/src/PubSub/RelayConsumer.php new file mode 100644 index 0000000000..2af67b844c --- /dev/null +++ b/core/vendor/predis/predis/src/PubSub/RelayConsumer.php @@ -0,0 +1,114 @@ +statusFlags |= self::STATUS_SUBSCRIBED; + + $command = $this->client->createCommand('subscribe', [ + $channels, + function ($relay, $channel, $message) use ($callback) { + $callback((object) [ + 'kind' => is_null($message) ? self::SUBSCRIBE : self::MESSAGE, + 'channel' => $channel, + 'payload' => $message, + ], $relay); + }, + ]); + + $this->client->getConnection()->executeCommand($command); + + $this->invalidate(); + } + + /** + * Subscribes to the specified channels using a pattern. + * + * @param string ...$pattern One or more channel name patterns. + * @param callable $callback The message callback. + */ + public function psubscribe(...$pattern) // @phpstan-ignore-line + { + $patterns = func_get_args(); + $callback = array_pop($patterns); + + $this->statusFlags |= self::STATUS_PSUBSCRIBED; + + $command = $this->client->createCommand('psubscribe', [ + $patterns, + function ($relay, $pattern, $channel, $message) use ($callback) { + $callback((object) [ + 'kind' => is_null($message) ? self::PSUBSCRIBE : self::PMESSAGE, + 'pattern' => $pattern, + 'channel' => $channel, + 'payload' => $message, + ], $relay); + }, + ]); + + $this->client->getConnection()->executeCommand($command); + + $this->invalidate(); + } + + /** + * {@inheritDoc} + */ + protected function genericSubscribeInit($subscribeAction) + { + if (isset($this->options[$subscribeAction])) { + throw new NotSupportedException('Relay does not support Pub/Sub constructor options.'); + } + } + + /** + * {@inheritDoc} + */ + public function ping($payload = null) + { + throw new NotSupportedException('Relay does not support PING in Pub/Sub.'); + } + + /** + * {@inheritDoc} + */ + public function stop($drop = false) + { + return false; + } + + /** + * {@inheritDoc} + */ + public function __destruct() + { + // NOOP + } +} diff --git a/core/vendor/predis/predis/src/Response/Iterator/MultiBulkIterator.php b/core/vendor/predis/predis/src/Response/Iterator/MultiBulkIterator.php index cbc74a12fa..cbc6138594 100644 --- a/core/vendor/predis/predis/src/Response/Iterator/MultiBulkIterator.php +++ b/core/vendor/predis/predis/src/Response/Iterator/MultiBulkIterator.php @@ -34,7 +34,7 @@ abstract class MultiBulkIterator implements Iterator, Countable, ResponseInterfa protected $size; /** - * {@inheritdoc} + * @return void */ #[ReturnTypeWillChange] public function rewind() @@ -43,7 +43,7 @@ public function rewind() } /** - * {@inheritdoc} + * @return mixed */ #[ReturnTypeWillChange] public function current() @@ -52,7 +52,7 @@ public function current() } /** - * {@inheritdoc} + * @return int|null */ #[ReturnTypeWillChange] public function key() @@ -61,7 +61,7 @@ public function key() } /** - * {@inheritdoc} + * @return void */ #[ReturnTypeWillChange] public function next() @@ -72,7 +72,7 @@ public function next() } /** - * {@inheritdoc} + * @return bool */ #[ReturnTypeWillChange] public function valid() diff --git a/core/vendor/predis/predis/src/Response/Iterator/MultiBulkTuple.php b/core/vendor/predis/predis/src/Response/Iterator/MultiBulkTuple.php index 77019aa8c2..4761f0ec2b 100644 --- a/core/vendor/predis/predis/src/Response/Iterator/MultiBulkTuple.php +++ b/core/vendor/predis/predis/src/Response/Iterator/MultiBulkTuple.php @@ -63,7 +63,7 @@ protected function checkPreconditions(MultiBulk $iterator) } /** - * {@inheritdoc} + * @return MultiBulk */ #[ReturnTypeWillChange] public function getInnerIterator() diff --git a/core/vendor/predis/predis/src/Session/Handler.php b/core/vendor/predis/predis/src/Session/Handler.php index 2e22a1819d..68c87378d9 100644 --- a/core/vendor/predis/predis/src/Session/Handler.php +++ b/core/vendor/predis/predis/src/Session/Handler.php @@ -53,7 +53,9 @@ public function register() } /** - * {@inheritdoc} + * @param string $save_path + * @param string $session_id + * @return bool */ #[ReturnTypeWillChange] public function open($save_path, $session_id) @@ -63,7 +65,7 @@ public function open($save_path, $session_id) } /** - * {@inheritdoc} + * @return bool */ #[ReturnTypeWillChange] public function close() @@ -73,7 +75,8 @@ public function close() } /** - * {@inheritdoc} + * @param int $maxlifetime + * @return bool */ #[ReturnTypeWillChange] public function gc($maxlifetime) @@ -83,7 +86,8 @@ public function gc($maxlifetime) } /** - * {@inheritdoc} + * @param string $session_id + * @return string */ #[ReturnTypeWillChange] public function read($session_id) @@ -96,7 +100,9 @@ public function read($session_id) } /** - * {@inheritdoc} + * @param string $session_id + * @param string $session_data + * @return bool */ #[ReturnTypeWillChange] public function write($session_id, $session_data) @@ -107,7 +113,8 @@ public function write($session_id, $session_data) } /** - * {@inheritdoc} + * @param string $session_id + * @return bool */ #[ReturnTypeWillChange] public function destroy($session_id) diff --git a/core/vendor/predis/predis/src/Transaction/MultiExec.php b/core/vendor/predis/predis/src/Transaction/MultiExec.php index 1f99d2a935..32ac1e1232 100644 --- a/core/vendor/predis/predis/src/Transaction/MultiExec.php +++ b/core/vendor/predis/predis/src/Transaction/MultiExec.php @@ -20,11 +20,15 @@ use Predis\Command\CommandInterface; use Predis\CommunicationException; use Predis\Connection\Cluster\ClusterInterface; +use Predis\Connection\RelayConnection; use Predis\NotSupportedException; use Predis\Protocol\ProtocolException; +use Predis\Response\Error; use Predis\Response\ErrorInterface as ErrorResponseInterface; use Predis\Response\ServerException; use Predis\Response\Status as StatusResponse; +use Relay\Exception as RelayException; +use Relay\Relay; use SplQueue; /** @@ -175,9 +179,25 @@ public function __call($method, $arguments) */ protected function call($commandID, array $arguments = []) { - $response = $this->client->executeCommand( - $this->client->createCommand($commandID, $arguments) - ); + try { + $response = $this->client->executeCommand( + $this->client->createCommand($commandID, $arguments) + ); + } catch (ServerException $exception) { + if (!$this->client->getConnection() instanceof RelayConnection) { + throw $exception; + } + + if (strcasecmp($commandID, 'EXEC') != 0) { + throw $exception; + } + + if (!strpos($exception->getMessage(), 'RELAY_ERR_REDIS')) { + throw $exception; + } + + return null; + } if ($response instanceof ErrorResponseInterface) { throw new ServerException($response->getMessage()); @@ -207,6 +227,8 @@ public function executeCommand(CommandInterface $command) if ($response instanceof StatusResponse && $response == 'QUEUED') { $this->commands->enqueue($command); + } elseif ($response instanceof Relay) { + $this->commands->enqueue($command); } elseif ($response instanceof ErrorResponseInterface) { throw new AbortedMultiExecException($this, $response->getMessage()); } else { @@ -375,7 +397,9 @@ public function execute($callable = null) $execResponse = $this->call('EXEC'); - if ($execResponse === null) { + // The additional `false` check is needed for Relay, + // let's hope it won't break anything + if ($execResponse === null || $execResponse === false) { if ($attempts === 0) { throw new AbortedMultiExecException( $this, 'The current transaction has been aborted by the server.' @@ -401,10 +425,20 @@ public function execute($callable = null) for ($i = 0; $i < $size; ++$i) { $cmdResponse = $execResponse[$i]; - if ($cmdResponse instanceof ErrorResponseInterface && $this->exceptions) { + if ($this->exceptions && $cmdResponse instanceof ErrorResponseInterface) { throw new ServerException($cmdResponse->getMessage()); } + if ($cmdResponse instanceof RelayException) { + if ($this->exceptions) { + throw new ServerException($cmdResponse->getMessage(), $cmdResponse->getCode(), $cmdResponse); + } + + $commands->dequeue(); + $response[$i] = new Error($cmdResponse->getMessage()); + continue; + } + $response[$i] = $commands->dequeue()->parseResponse($cmdResponse); } diff --git a/core/vendor/psr/clock/CHANGELOG.md b/core/vendor/psr/clock/CHANGELOG.md new file mode 100644 index 0000000000..3cd6b9b755 --- /dev/null +++ b/core/vendor/psr/clock/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog + +All notable changes to this project will be documented in this file, in reverse chronological order by release. + +## 1.0.0 + +First stable release after PSR-20 acceptance + +## 0.1.0 + +First release diff --git a/core/vendor/psr/clock/LICENSE b/core/vendor/psr/clock/LICENSE new file mode 100644 index 0000000000..be68342123 --- /dev/null +++ b/core/vendor/psr/clock/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2017 PHP Framework Interoperability Group + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/core/vendor/psr/clock/README.md b/core/vendor/psr/clock/README.md new file mode 100644 index 0000000000..6ca877eeb1 --- /dev/null +++ b/core/vendor/psr/clock/README.md @@ -0,0 +1,61 @@ +# PSR Clock + +This repository holds the interface for [PSR-20][psr-url]. + +Note that this is not a clock of its own. It is merely an interface that +describes a clock. See the specification for more details. + +## Installation + +```bash +composer require psr/clock +``` + +## Usage + +If you need a clock, you can use the interface like this: + +```php +clock = $clock; + } + + public function doSomething() + { + /** @var DateTimeImmutable $currentDateAndTime */ + $currentDateAndTime = $this->clock->now(); + // do something useful with that information + } +} +``` + +You can then pick one of the [implementations][implementation-url] of the interface to get a clock. + +If you want to implement the interface, you can require this package and +implement `Psr\Clock\ClockInterface` in your code. + +Don't forget to add `psr/clock-implementation` to your `composer.json`s `provides`-section like this: + +```json +{ + "provides": { + "psr/clock-implementation": "1.0" + } +} +``` + +And please read the [specification text][specification-url] for details on the interface. + +[psr-url]: https://www.php-fig.org/psr/psr-20 +[package-url]: https://packagist.org/packages/psr/clock +[implementation-url]: https://packagist.org/providers/psr/clock-implementation +[specification-url]: https://github.com/php-fig/fig-standards/blob/master/proposed/clock.md diff --git a/core/vendor/psr/clock/composer.json b/core/vendor/psr/clock/composer.json new file mode 100644 index 0000000000..77992eda75 --- /dev/null +++ b/core/vendor/psr/clock/composer.json @@ -0,0 +1,21 @@ +{ + "name": "psr/clock", + "description": "Common interface for reading the clock.", + "keywords": ["psr", "psr-20", "time", "clock", "now"], + "homepage": "https://github.com/php-fig/clock", + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "require": { + "php": "^7.0 || ^8.0" + }, + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + } +} diff --git a/core/vendor/psr/clock/src/ClockInterface.php b/core/vendor/psr/clock/src/ClockInterface.php new file mode 100644 index 0000000000..7b6d8d8aae --- /dev/null +++ b/core/vendor/psr/clock/src/ClockInterface.php @@ -0,0 +1,13 @@ +addLineBreaks($text, $width); $text = rtrim($text, "\n").($matches[1] ?? ''); if (!$currentLineLength && '' !== $current && !str_ends_with($current, "\n")) { @@ -265,4 +267,11 @@ private function applyCurrentStyle(string $text, string $current, int $width, in return implode("\n", $lines); } + + private function addLineBreaks(string $text, int $width): string + { + $encoding = mb_detect_encoding($text, null, true) ?: 'UTF-8'; + + return b($text)->toCodePointString($encoding)->wordwrap($width, "\n", true)->toByteString($encoding); + } } diff --git a/core/vendor/symfony/console/Output/ConsoleSectionOutput.php b/core/vendor/symfony/console/Output/ConsoleSectionOutput.php index 3f3f1434be..21c4a44a8e 100644 --- a/core/vendor/symfony/console/Output/ConsoleSectionOutput.php +++ b/core/vendor/symfony/console/Output/ConsoleSectionOutput.php @@ -48,9 +48,9 @@ public function __construct($stream, array &$sections, int $verbosity, bool $dec public function setMaxHeight(int $maxHeight): void { // when changing max height, clear output of current section and redraw again with the new height - $existingContent = $this->popStreamContentUntilCurrentSection($this->maxHeight ? min($this->maxHeight, $this->lines) : $this->lines); - + $previousMaxHeight = $this->maxHeight; $this->maxHeight = $maxHeight; + $existingContent = $this->popStreamContentUntilCurrentSection($previousMaxHeight ? min($previousMaxHeight, $this->lines) : $this->lines); parent::doWrite($this->getVisibleContent(), false); parent::doWrite($existingContent, false); @@ -119,8 +119,7 @@ public function addContent(string $input, bool $newline = true): int // re-add the line break (that has been removed in the above `explode()` for // - every line that is not the last line // - if $newline is required, also add it to the last line - // - if it's not new line, but input ending with `\PHP_EOL` - if ($i < $count || $newline || str_ends_with($input, \PHP_EOL)) { + if ($i < $count || $newline) { $lineContent .= \PHP_EOL; } @@ -168,6 +167,12 @@ public function addNewLineOfInputSubmit(): void */ protected function doWrite(string $message, bool $newline) { + // Simulate newline behavior for consistent output formatting, avoiding extra logic + if (!$newline && str_ends_with($message, \PHP_EOL)) { + $message = substr($message, 0, -\strlen(\PHP_EOL)); + $newline = true; + } + if (!$this->isDecorated()) { parent::doWrite($message, $newline); @@ -213,7 +218,7 @@ private function popStreamContentUntilCurrentSection(int $numberOfLinesToClearFr break; } - $numberOfLinesToClear += $section->lines; + $numberOfLinesToClear += $section->maxHeight ? min($section->lines, $section->maxHeight) : $section->lines; if ('' !== $sectionContent = $section->getVisibleContent()) { if (!str_ends_with($sectionContent, \PHP_EOL)) { $sectionContent .= \PHP_EOL; diff --git a/core/vendor/symfony/error-handler/Debug.php b/core/vendor/symfony/error-handler/Debug.php index 8bb460d274..641c273446 100644 --- a/core/vendor/symfony/error-handler/Debug.php +++ b/core/vendor/symfony/error-handler/Debug.php @@ -31,7 +31,6 @@ public static function enable(): ErrorHandler @ini_set('zend.assertions', 1); ini_set('assert.active', 1); - ini_set('assert.warning', 0); ini_set('assert.exception', 1); DebugClassLoader::enable(); diff --git a/core/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php b/core/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php index c86f438d41..866f4e64ff 100644 --- a/core/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php +++ b/core/vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php @@ -89,7 +89,11 @@ public function process(ContainerBuilder $container) ], 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')) { + if (null !== ($class = $container->getDefinition($id)->getClass()) && ($r = $container->getReflectionClass($class, false)) && !$r->hasMethod($event['method'])) { + if (!$r->hasMethod('__invoke')) { + throw new InvalidArgumentException(sprintf('None of the "%s" or "__invoke" methods exist for the service "%s". Please define the "method" attribute on "kernel.event_listener" tags.', $event['method'], $id)); + } + $event['method'] = '__invoke'; } } diff --git a/core/vendor/symfony/finder/Finder.php b/core/vendor/symfony/finder/Finder.php index 62c3f9e24f..a3bf9a1a7c 100644 --- a/core/vendor/symfony/finder/Finder.php +++ b/core/vendor/symfony/finder/Finder.php @@ -162,8 +162,8 @@ public function date(string|array $dates): static * * You can use patterns (delimited with / sign), globs or simple strings. * - * $finder->name('*.php') - * $finder->name('/\.php$/') // same as above + * $finder->name('/\.php$/') + * $finder->name('*.php') // same as above, without dot files * $finder->name('test.php') * $finder->name(['test.py', 'test.php']) * diff --git a/core/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php b/core/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php index 3582e6c168..34cced6889 100644 --- a/core/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php +++ b/core/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php @@ -24,7 +24,7 @@ class RecursiveDirectoryIterator extends \RecursiveDirectoryIterator { private bool $ignoreUnreadableDirs; - private ?bool $rewindable = null; + private bool $ignoreFirstRewind = true; // these 3 properties take part of the performance optimization to avoid redoing the same work in all iterations private string $rootPath; @@ -102,7 +102,6 @@ public function getChildren(): \RecursiveDirectoryIterator $children->ignoreUnreadableDirs = $this->ignoreUnreadableDirs; // performance optimization to avoid redoing the same work in all children - $children->rewindable = &$this->rewindable; $children->rootPath = $this->rootPath; } @@ -112,36 +111,23 @@ public function getChildren(): \RecursiveDirectoryIterator } } - /** - * Do nothing for non rewindable stream. - */ - public function rewind(): void + public function next(): void { - if (false === $this->isRewindable()) { - return; - } + $this->ignoreFirstRewind = false; - parent::rewind(); + parent::next(); } - /** - * Checks if the stream is rewindable. - */ - public function isRewindable(): bool + public function rewind(): void { - if (null !== $this->rewindable) { - return $this->rewindable; - } - - if (false !== $stream = @opendir($this->getPath())) { - $infos = stream_get_meta_data($stream); - closedir($stream); + // some streams like FTP are not rewindable, ignore the first rewind after creation, + // as newly created DirectoryIterator does not need to be rewound + if ($this->ignoreFirstRewind) { + $this->ignoreFirstRewind = false; - if ($infos['seekable']) { - return $this->rewindable = true; - } + return; } - return $this->rewindable = false; + parent::rewind(); } } diff --git a/core/vendor/symfony/http-foundation/File/UploadedFile.php b/core/vendor/symfony/http-foundation/File/UploadedFile.php index 5bf4cfe87d..e27cf3812d 100644 --- a/core/vendor/symfony/http-foundation/File/UploadedFile.php +++ b/core/vendor/symfony/http-foundation/File/UploadedFile.php @@ -74,7 +74,7 @@ public function __construct(string $path, string $originalName, string $mimeType * Returns the original file name. * * It is extracted from the request from which the file has been uploaded. - * Then it should not be considered as a safe value. + * This should not be considered as a safe value to use for a file name on your servers. */ public function getClientOriginalName(): string { @@ -85,7 +85,7 @@ public function getClientOriginalName(): string * Returns the original file extension. * * It is extracted from the original file name that was uploaded. - * Then it should not be considered as a safe value. + * This should not be considered as a safe value to use for a file name on your servers. */ public function getClientOriginalExtension(): string { diff --git a/core/vendor/symfony/http-foundation/Request.php b/core/vendor/symfony/http-foundation/Request.php index 633b4a63e2..cf1e82be21 100644 --- a/core/vendor/symfony/http-foundation/Request.php +++ b/core/vendor/symfony/http-foundation/Request.php @@ -239,6 +239,9 @@ class Request self::HEADER_X_FORWARDED_PREFIX => 'X_FORWARDED_PREFIX', ]; + /** @var bool */ + private $isIisRewrite = false; + /** * @param array $query The GET parameters * @param array $request The POST parameters @@ -1508,10 +1511,30 @@ public function getContent(bool $asResource = false) /** * Gets the decoded form or json request body. + * + * @throws JsonException When the body cannot be decoded to an array */ public function getPayload(): InputBag { - return $this->request->count() ? clone $this->request : new InputBag($this->toArray()); + if ($this->request->count()) { + return clone $this->request; + } + + if ('' === $content = $this->getContent()) { + return new InputBag([]); + } + + try { + $content = json_decode($content, true, 512, \JSON_BIGINT_AS_STRING | \JSON_THROW_ON_ERROR); + } catch (\JsonException $e) { + throw new JsonException('Could not decode request body.', $e->getCode(), $e); + } + + if (!\is_array($content)) { + throw new JsonException(sprintf('JSON content was expected to decode to an array, "%s" returned.', get_debug_type($content))); + } + + return new InputBag($content); } /** @@ -1739,11 +1762,10 @@ protected function prepareRequestUri() { $requestUri = ''; - if ('1' == $this->server->get('IIS_WasUrlRewritten') && '' != $this->server->get('UNENCODED_URL')) { + if ($this->isIisRewrite() && '' != $this->server->get('UNENCODED_URL')) { // IIS7 with URL Rewrite: make sure we get the unencoded URL (double slash problem) $requestUri = $this->server->get('UNENCODED_URL'); $this->server->remove('UNENCODED_URL'); - $this->server->remove('IIS_WasUrlRewritten'); } elseif ($this->server->has('REQUEST_URI')) { $requestUri = $this->server->get('REQUEST_URI'); @@ -1942,7 +1964,13 @@ private function setPhpDefaultLocale(string $locale): void */ private function getUrlencodedPrefix(string $string, string $prefix): ?string { - if (!str_starts_with(rawurldecode($string), $prefix)) { + if ($this->isIisRewrite()) { + // ISS with UrlRewriteModule might report SCRIPT_NAME/PHP_SELF with wrong case + // see https://github.com/php/php-src/issues/11981 + if (0 !== stripos(rawurldecode($string), $prefix)) { + return null; + } + } elseif (!str_starts_with(rawurldecode($string), $prefix)) { return null; } @@ -2071,4 +2099,20 @@ private function normalizeAndFilterClientIps(array $clientIps, string $ip): arra // Now the IP chain contains only untrusted proxies and the client IP return $clientIps ? array_reverse($clientIps) : [$firstTrustedIp]; } + + /** + * Is this IIS with UrlRewriteModule? + * + * This method consumes, caches and removed the IIS_WasUrlRewritten env var, + * so we don't inherit it to sub-requests. + */ + private function isIisRewrite(): bool + { + if (1 === $this->server->getInt('IIS_WasUrlRewritten')) { + $this->isIisRewrite = true; + $this->server->remove('IIS_WasUrlRewritten'); + } + + return $this->isIisRewrite; + } } diff --git a/core/vendor/symfony/http-foundation/Response.php b/core/vendor/symfony/http-foundation/Response.php index 888c6ad858..c7073e68ef 100644 --- a/core/vendor/symfony/http-foundation/Response.php +++ b/core/vendor/symfony/http-foundation/Response.php @@ -286,7 +286,7 @@ public function prepare(Request $request): static $charset = $this->charset ?: 'UTF-8'; if (!$headers->has('Content-Type')) { $headers->set('Content-Type', 'text/html; charset='.$charset); - } elseif (0 === stripos($headers->get('Content-Type'), 'text/') && false === stripos($headers->get('Content-Type'), 'charset')) { + } elseif (0 === stripos($headers->get('Content-Type') ?? '', 'text/') && false === stripos($headers->get('Content-Type') ?? '', 'charset')) { // add the charset $headers->set('Content-Type', $headers->get('Content-Type').'; charset='.$charset); } diff --git a/core/vendor/symfony/http-foundation/ServerBag.php b/core/vendor/symfony/http-foundation/ServerBag.php index 5b0fc8ac46..3e912cb800 100644 --- a/core/vendor/symfony/http-foundation/ServerBag.php +++ b/core/vendor/symfony/http-foundation/ServerBag.php @@ -49,7 +49,7 @@ public function getHeaders(): array * RewriteCond %{HTTP:Authorization} .+ * RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0] * RewriteCond %{REQUEST_FILENAME} !-f - * RewriteRule ^(.*)$ app.php [QSA,L] + * RewriteRule ^(.*)$ index.php [QSA,L] */ $authorizationHeader = null; 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 65452a5207..a40a7bc77b 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php @@ -380,8 +380,8 @@ public function updateTimestamp(#[\SensitiveParameter] string $sessionId, string $updateStmt = $this->pdo->prepare( "UPDATE $this->table SET $this->lifetimeCol = :expiry, $this->timeCol = :time WHERE $this->idCol = :id" ); - $updateStmt->bindParam(':id', $sessionId, \PDO::PARAM_STR); - $updateStmt->bindParam(':expiry', $expiry, \PDO::PARAM_INT); + $updateStmt->bindValue(':id', $sessionId, \PDO::PARAM_STR); + $updateStmt->bindValue(':expiry', $expiry, \PDO::PARAM_INT); $updateStmt->bindValue(':time', time(), \PDO::PARAM_INT); $updateStmt->execute(); } catch (\PDOException $e) { 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 dbbe7dc880..aac62296ef 100644 --- a/core/vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php +++ b/core/vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php @@ -11,7 +11,10 @@ namespace Symfony\Component\HttpFoundation\Session\Storage\Handler; +use Doctrine\DBAL\Configuration; use Doctrine\DBAL\DriverManager; +use Doctrine\DBAL\Schema\DefaultSchemaManagerFactory; +use Doctrine\DBAL\Tools\DsnParser; use Relay\Relay; use Symfony\Component\Cache\Adapter\AbstractAdapter; @@ -67,7 +70,15 @@ public static function createHandler(object|string $connection, array $options = if (!class_exists(DriverManager::class)) { throw new \InvalidArgumentException('Unsupported PDO OCI DSN. Try running "composer require doctrine/dbal".'); } - $connection = DriverManager::getConnection(['url' => $connection])->getWrappedConnection(); + $connection[3] = '-'; + $params = class_exists(DsnParser::class) ? (new DsnParser())->parse($connection) : ['url' => $connection]; + $config = new Configuration(); + if (class_exists(DefaultSchemaManagerFactory::class)) { + $config->setSchemaManagerFactory(new DefaultSchemaManagerFactory()); + } + + $connection = DriverManager::getConnection($params, $config); + $connection = method_exists($connection, 'getNativeConnection') ? $connection->getNativeConnection() : $connection->getWrappedConnection(); // no break; case str_starts_with($connection, 'mssql://'): diff --git a/core/vendor/symfony/http-foundation/StreamedResponse.php b/core/vendor/symfony/http-foundation/StreamedResponse.php index 2c8ff15f36..5c7817e3c9 100644 --- a/core/vendor/symfony/http-foundation/StreamedResponse.php +++ b/core/vendor/symfony/http-foundation/StreamedResponse.php @@ -56,6 +56,11 @@ public function setCallback(callable $callback): static return $this; } + public function getCallback(): \Closure + { + return ($this->callback)(...); + } + /** * This method only sends the headers once. * diff --git a/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php index 9ae65c7dfd..370097cda4 100644 --- a/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php +++ b/core/vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php @@ -72,6 +72,10 @@ public function resolve(Request $request, ArgumentMetadata $argument): iterable return []; } + if ($argument->isVariadic()) { + throw new \LogicException(sprintf('Mapping variadic argument "$%s" is not supported.', $argument->getName())); + } + $attribute->metadata = $argument; return [$attribute]; @@ -130,8 +134,12 @@ public function onKernelControllerArguments(ControllerArgumentsEvent $event): vo } } - if (null === $payload && !$argument->metadata->isNullable()) { - throw new HttpException($validationFailedCode); + if (null === $payload) { + $payload = match (true) { + $argument->metadata->hasDefaultValue() => $argument->metadata->getDefaultValue(), + $argument->metadata->isNullable() => null, + default => throw new HttpException($validationFailedCode) + }; } $arguments[$i] = $payload; diff --git a/core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php b/core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php index d52b02b773..7696023265 100644 --- a/core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php +++ b/core/vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php @@ -113,11 +113,11 @@ public function collect(Request $request, Response $response, \Throwable $except if (!$this->requestStack || !$response->headers->has('X-Debug-Token') || $response->isRedirection() - || ($response->headers->has('Content-Type') && !str_contains($response->headers->get('Content-Type'), 'html')) + || ($response->headers->has('Content-Type') && !str_contains($response->headers->get('Content-Type') ?? '', 'html')) || 'html' !== $request->getRequestFormat() || false === strripos($response->getContent(), '') ) { - if ($response->headers->has('Content-Type') && str_contains($response->headers->get('Content-Type'), 'html')) { + if ($response->headers->has('Content-Type') && str_contains($response->headers->get('Content-Type') ?? '', 'html')) { $dumper = new HtmlDumper('php://output', $this->charset); $dumper->setDisplayOptions(['fileLinkFormat' => $this->fileLinkFormat]); } else { diff --git a/core/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php b/core/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php index d0e05340d8..d43c6a3aef 100644 --- a/core/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php +++ b/core/vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php @@ -12,6 +12,7 @@ namespace Symfony\Component\HttpKernel\DependencyInjection; use Symfony\Component\DependencyInjection\Attribute\Autowire; +use Symfony\Component\DependencyInjection\Attribute\AutowireCallable; use Symfony\Component\DependencyInjection\Attribute\Target; use Symfony\Component\DependencyInjection\ChildDefinition; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; @@ -160,7 +161,12 @@ public function process(ContainerBuilder $container) } if ($autowireAttributes) { - $value = $autowireAttributes[0]->newInstance()->value; + $attribute = $autowireAttributes[0]->newInstance(); + $value = $parameterBag->resolveValue($attribute->value); + + if ($attribute instanceof AutowireCallable) { + $value = $attribute->buildDefinition($value, $type, $p); + } if ($value instanceof Reference) { $args[$p->name] = $type ? new TypedReference($value, $type, $invalidBehavior, $p->name) : new Reference($value, $invalidBehavior); diff --git a/core/vendor/symfony/http-kernel/HttpKernel.php b/core/vendor/symfony/http-kernel/HttpKernel.php index 794a55dc18..4999870e4c 100644 --- a/core/vendor/symfony/http-kernel/HttpKernel.php +++ b/core/vendor/symfony/http-kernel/HttpKernel.php @@ -15,6 +15,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpKernel\Controller\ArgumentResolver; use Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface; use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface; @@ -70,8 +71,9 @@ public function handle(Request $request, int $type = HttpKernelInterface::MAIN_R $request->headers->set('X-Php-Ob-Level', (string) ob_get_level()); $this->requestStack->push($request); + $response = null; try { - return $this->handleRaw($request, $type); + return $response = $this->handleRaw($request, $type); } catch (\Throwable $e) { if ($e instanceof \Error && !$this->handleAllThrowables) { throw $e; @@ -86,9 +88,23 @@ public function handle(Request $request, int $type = HttpKernelInterface::MAIN_R throw $e; } - return $this->handleThrowable($e, $request, $type); + return $response = $this->handleThrowable($e, $request, $type); } finally { $this->requestStack->pop(); + + if ($response instanceof StreamedResponse) { + $callback = $response->getCallback(); + $requestStack = $this->requestStack; + + $response->setCallback(static function () use ($request, $callback, $requestStack) { + $requestStack->push($request); + try { + $callback(); + } finally { + $requestStack->pop(); + } + }); + } } } diff --git a/core/vendor/symfony/http-kernel/Kernel.php b/core/vendor/symfony/http-kernel/Kernel.php index c98705163d..af4000b822 100644 --- a/core/vendor/symfony/http-kernel/Kernel.php +++ b/core/vendor/symfony/http-kernel/Kernel.php @@ -76,11 +76,11 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl */ private static array $freshCache = []; - public const VERSION = '6.3.0'; - public const VERSION_ID = 60300; + public const VERSION = '6.3.4'; + public const VERSION_ID = 60304; public const MAJOR_VERSION = 6; public const MINOR_VERSION = 3; - public const RELEASE_VERSION = 0; + public const RELEASE_VERSION = 4; public const EXTRA_VERSION = ''; public const END_OF_MAINTENANCE = '01/2024'; diff --git a/core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php b/core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php index 0fdbfc44ba..33a3f4242d 100644 --- a/core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php +++ b/core/vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php @@ -56,6 +56,12 @@ public function find(?string $ip, ?string $url, ?int $limit, ?string $method, in $result = []; while (\count($result) < $limit && $line = $this->readLineFromFile($file)) { $values = str_getcsv($line); + + if (7 !== \count($values)) { + // skip invalid lines + continue; + } + [$csvToken, $csvIp, $csvMethod, $csvUrl, $csvTime, $csvParent, $csvStatusCode] = $values; $csvTime = (int) $csvTime; @@ -309,7 +315,15 @@ private function removeExpiredProfiles(): void } while ($line = fgets($handle)) { - [$csvToken, , , , $csvTime] = str_getcsv($line); + $values = str_getcsv($line); + + if (7 !== \count($values)) { + // skip invalid lines + $offset += \strlen($line); + continue; + } + + [$csvToken, , , , $csvTime] = $values; if ($csvTime >= $minimalProfileTimestamp) { break; diff --git a/core/vendor/symfony/http-kernel/composer.json b/core/vendor/symfony/http-kernel/composer.json index bf8be24d05..1d806b88ff 100644 --- a/core/vendor/symfony/http-kernel/composer.json +++ b/core/vendor/symfony/http-kernel/composer.json @@ -20,7 +20,7 @@ "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/http-foundation": "^6.3.4", "symfony/polyfill-ctype": "^1.8", "psr/log": "^1|^2|^3" }, @@ -30,7 +30,7 @@ "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.3", + "symfony/dependency-injection": "^6.3.4", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", @@ -57,7 +57,7 @@ "symfony/config": "<6.1", "symfony/console": "<5.4", "symfony/form": "<5.4", - "symfony/dependency-injection": "<6.3", + "symfony/dependency-injection": "<6.3.4", "symfony/doctrine-bridge": "<5.4", "symfony/http-client": "<5.4", "symfony/http-client-contracts": "<2.5", diff --git a/core/vendor/symfony/mime/composer.json b/core/vendor/symfony/mime/composer.json index adaf43852f..b7bdc78243 100644 --- a/core/vendor/symfony/mime/composer.json +++ b/core/vendor/symfony/mime/composer.json @@ -17,6 +17,7 @@ ], "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -27,14 +28,14 @@ "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" + "symfony/serializer": "~6.2.13|^6.3.2" }, "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" + "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" }, "autoload": { "psr-4": { "Symfony\\Component\\Mime\\": "" }, diff --git a/core/vendor/symfony/polyfill-ctype/LICENSE b/core/vendor/symfony/polyfill-ctype/LICENSE index 3f853aaf35..7536caeae8 100644 --- a/core/vendor/symfony/polyfill-ctype/LICENSE +++ b/core/vendor/symfony/polyfill-ctype/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018-2019 Fabien Potencier +Copyright (c) 2018-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/symfony/polyfill-ctype/composer.json b/core/vendor/symfony/polyfill-ctype/composer.json index 1b3efff572..e5c978f15f 100644 --- a/core/vendor/symfony/polyfill-ctype/composer.json +++ b/core/vendor/symfony/polyfill-ctype/composer.json @@ -31,7 +31,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/core/vendor/symfony/polyfill-intl-grapheme/LICENSE b/core/vendor/symfony/polyfill-intl-grapheme/LICENSE index 4cd8bdd300..6e3afce692 100644 --- a/core/vendor/symfony/polyfill-intl-grapheme/LICENSE +++ b/core/vendor/symfony/polyfill-intl-grapheme/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2015-2019 Fabien Potencier +Copyright (c) 2015-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/symfony/polyfill-intl-grapheme/composer.json b/core/vendor/symfony/polyfill-intl-grapheme/composer.json index fde5537fc0..c00d4e9e43 100644 --- a/core/vendor/symfony/polyfill-intl-grapheme/composer.json +++ b/core/vendor/symfony/polyfill-intl-grapheme/composer.json @@ -28,7 +28,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/core/vendor/symfony/polyfill-intl-idn/Idn.php b/core/vendor/symfony/polyfill-intl-idn/Idn.php index 86710b94e5..3dc0612096 100644 --- a/core/vendor/symfony/polyfill-intl-idn/Idn.php +++ b/core/vendor/symfony/polyfill-intl-idn/Idn.php @@ -11,8 +11,6 @@ namespace Symfony\Polyfill\Intl\Idn; -use Exception; -use Normalizer; use Symfony\Polyfill\Intl\Idn\Resources\unidata\DisallowedRanges; use Symfony\Polyfill\Intl\Idn\Resources\unidata\Regex; @@ -167,7 +165,7 @@ public static function idn_to_ascii($domainName, $options = self::IDNA_DEFAULT, if (1 === preg_match('/[^\x00-\x7F]/', $label)) { try { $label = 'xn--'.self::punycodeEncode($label); - } catch (Exception $e) { + } catch (\Exception $e) { $info->errors |= self::ERROR_PUNYCODE; } @@ -335,8 +333,8 @@ private static function process($domain, array $options, Info $info) $domain = self::mapCodePoints($domain, $options, $info); // Step 2. Normalize the domain name string to Unicode Normalization Form C. - if (!Normalizer::isNormalized($domain, Normalizer::FORM_C)) { - $domain = Normalizer::normalize($domain, Normalizer::FORM_C); + if (!\Normalizer::isNormalized($domain, \Normalizer::FORM_C)) { + $domain = \Normalizer::normalize($domain, \Normalizer::FORM_C); } // Step 3. Break the string into labels at U+002E (.) FULL STOP. @@ -350,7 +348,7 @@ private static function process($domain, array $options, Info $info) if ('xn--' === substr($label, 0, 4)) { try { $label = self::punycodeDecode(substr($label, 4)); - } catch (Exception $e) { + } catch (\Exception $e) { $info->errors |= self::ERROR_PUNYCODE; continue; @@ -496,7 +494,7 @@ private static function validateLabel($label, Info $info, array $options, $canBe } // Step 1. The label must be in Unicode Normalization Form C. - if (!Normalizer::isNormalized($label, Normalizer::FORM_C)) { + if (!\Normalizer::isNormalized($label, \Normalizer::FORM_C)) { $info->errors |= self::ERROR_INVALID_ACE_LABEL; } @@ -583,7 +581,7 @@ private static function punycodeDecode($input) for ($j = 0; $j < $b; ++$j) { if ($bytes[$j] > 0x7F) { - throw new Exception('Invalid input'); + throw new \Exception('Invalid input'); } $output[$out++] = $input[$j]; @@ -599,17 +597,17 @@ private static function punycodeDecode($input) for ($k = self::BASE; /* no condition */; $k += self::BASE) { if ($in >= $inputLength) { - throw new Exception('Invalid input'); + throw new \Exception('Invalid input'); } $digit = self::$basicToDigit[$bytes[$in++] & 0xFF]; if ($digit < 0) { - throw new Exception('Invalid input'); + throw new \Exception('Invalid input'); } if ($digit > intdiv(self::MAX_INT - $i, $w)) { - throw new Exception('Integer overflow'); + throw new \Exception('Integer overflow'); } $i += $digit * $w; @@ -629,7 +627,7 @@ private static function punycodeDecode($input) $baseMinusT = self::BASE - $t; if ($w > intdiv(self::MAX_INT, $baseMinusT)) { - throw new Exception('Integer overflow'); + throw new \Exception('Integer overflow'); } $w *= $baseMinusT; @@ -639,7 +637,7 @@ private static function punycodeDecode($input) $bias = self::adaptBias($i - $oldi, $outPlusOne, 0 === $oldi); if (intdiv($i, $outPlusOne) > self::MAX_INT - $n) { - throw new Exception('Integer overflow'); + throw new \Exception('Integer overflow'); } $n += intdiv($i, $outPlusOne); @@ -694,7 +692,7 @@ private static function punycodeEncode($input) } if ($m - $n > intdiv(self::MAX_INT - $delta, $h + 1)) { - throw new Exception('Integer overflow'); + throw new \Exception('Integer overflow'); } $delta += ($m - $n) * ($h + 1); @@ -702,7 +700,7 @@ private static function punycodeEncode($input) foreach ($iter as $codePoint) { if ($codePoint < $n && 0 === ++$delta) { - throw new Exception('Integer overflow'); + throw new \Exception('Integer overflow'); } if ($codePoint === $n) { diff --git a/core/vendor/symfony/polyfill-intl-idn/LICENSE b/core/vendor/symfony/polyfill-intl-idn/LICENSE index 03c5e25774..fd0a0626a3 100644 --- a/core/vendor/symfony/polyfill-intl-idn/LICENSE +++ b/core/vendor/symfony/polyfill-intl-idn/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018-2019 Fabien Potencier and Trevor Rowbotham +Copyright (c) 2018-present Fabien Potencier and Trevor Rowbotham Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php b/core/vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php index 5bb70e48ac..d285acd13e 100644 --- a/core/vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php +++ b/core/vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Polyfill\Intl\Idn\Resources\unidata; /** diff --git a/core/vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php b/core/vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php index 5c1c51ddee..3c6af0c132 100644 --- a/core/vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php +++ b/core/vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php @@ -1,5 +1,14 @@ + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + namespace Symfony\Polyfill\Intl\Idn\Resources\unidata; /** diff --git a/core/vendor/symfony/polyfill-intl-idn/composer.json b/core/vendor/symfony/polyfill-intl-idn/composer.json index 105e3d06cc..78e478ee80 100644 --- a/core/vendor/symfony/polyfill-intl-idn/composer.json +++ b/core/vendor/symfony/polyfill-intl-idn/composer.json @@ -34,7 +34,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/core/vendor/symfony/polyfill-intl-normalizer/LICENSE b/core/vendor/symfony/polyfill-intl-normalizer/LICENSE index 4cd8bdd300..6e3afce692 100644 --- a/core/vendor/symfony/polyfill-intl-normalizer/LICENSE +++ b/core/vendor/symfony/polyfill-intl-normalizer/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2015-2019 Fabien Potencier +Copyright (c) 2015-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/symfony/polyfill-intl-normalizer/composer.json b/core/vendor/symfony/polyfill-intl-normalizer/composer.json index 65f72d645d..2c4de2c838 100644 --- a/core/vendor/symfony/polyfill-intl-normalizer/composer.json +++ b/core/vendor/symfony/polyfill-intl-normalizer/composer.json @@ -29,7 +29,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/core/vendor/symfony/polyfill-mbstring/LICENSE b/core/vendor/symfony/polyfill-mbstring/LICENSE index 4cd8bdd300..6e3afce692 100644 --- a/core/vendor/symfony/polyfill-mbstring/LICENSE +++ b/core/vendor/symfony/polyfill-mbstring/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2015-2019 Fabien Potencier +Copyright (c) 2015-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/symfony/polyfill-mbstring/Mbstring.php b/core/vendor/symfony/polyfill-mbstring/Mbstring.php index bce5c4a84a..2e0b96940a 100644 --- a/core/vendor/symfony/polyfill-mbstring/Mbstring.php +++ b/core/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -69,7 +69,7 @@ final class Mbstring { public const MB_CASE_FOLD = \PHP_INT_MAX; - private const CASE_FOLD = [ + private const SIMPLE_CASE_FOLD = [ ['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"], ['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'], ]; @@ -301,7 +301,11 @@ public static function mb_convert_case($s, $mode, $encoding = null) $map = $upper; } else { if (self::MB_CASE_FOLD === $mode) { - $s = str_replace(self::CASE_FOLD[0], self::CASE_FOLD[1], $s); + static $caseFolding = null; + if (null === $caseFolding) { + $caseFolding = self::getData('caseFolding'); + } + $s = strtr($s, $caseFolding); } static $lower = null; @@ -406,6 +410,12 @@ public static function mb_encoding_aliases($encoding) public static function mb_check_encoding($var = null, $encoding = null) { + if (PHP_VERSION_ID < 70200 && \is_array($var)) { + trigger_error('mb_check_encoding() expects parameter 1 to be string, array given', \E_USER_WARNING); + + return null; + } + if (null === $encoding) { if (null === $var) { return false; @@ -413,7 +423,21 @@ public static function mb_check_encoding($var = null, $encoding = null) $encoding = self::$internalEncoding; } - return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var); + if (!\is_array($var)) { + return self::mb_detect_encoding($var, [$encoding]) || false !== @iconv($encoding, $encoding, $var); + } + + foreach ($var as $key => $value) { + if (!self::mb_check_encoding($key, $encoding)) { + return false; + } + if (!self::mb_check_encoding($value, $encoding)) { + return false; + } + } + + return true; + } public static function mb_detect_encoding($str, $encodingList = null, $strict = false) @@ -638,8 +662,10 @@ public static function mb_substr($s, $start, $length = null, $encoding = null) public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) { - $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); - $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + [$haystack, $needle] = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], [ + self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding), + self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding), + ]); return self::mb_strpos($haystack, $needle, $offset, $encoding); } @@ -674,8 +700,11 @@ public static function mb_strrichr($haystack, $needle, $part = false, $encoding public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) { - $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); - $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + $haystack = self::mb_convert_case($haystack, \MB_CASE_LOWER, $encoding); + $needle = self::mb_convert_case($needle, \MB_CASE_LOWER, $encoding); + + $haystack = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $haystack); + $needle = str_replace(self::SIMPLE_CASE_FOLD[0], self::SIMPLE_CASE_FOLD[1], $needle); return self::mb_strrpos($haystack, $needle, $offset, $encoding); } @@ -798,6 +827,50 @@ public static function mb_ord($s, $encoding = null) return $code; } + public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, string $encoding = null): string + { + if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) { + throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH'); + } + + if (null === $encoding) { + $encoding = self::mb_internal_encoding(); + } + + try { + $validEncoding = @self::mb_check_encoding('', $encoding); + } catch (\ValueError $e) { + throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + // BC for PHP 7.3 and lower + if (!$validEncoding) { + throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + if (self::mb_strlen($pad_string, $encoding) <= 0) { + throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string'); + } + + $paddingRequired = $length - self::mb_strlen($string, $encoding); + + if ($paddingRequired < 1) { + return $string; + } + + switch ($pad_type) { + case \STR_PAD_LEFT: + return self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string; + case \STR_PAD_RIGHT: + return $string.self::mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding); + default: + $leftPaddingLength = floor($paddingRequired / 2); + $rightPaddingLength = $paddingRequired - $leftPaddingLength; + + return self::mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.self::mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding); + } + } + private static function getSubpart($pos, $part, $haystack, $encoding) { if (false === $pos) { diff --git a/core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php b/core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php new file mode 100644 index 0000000000..512bba0bfd --- /dev/null +++ b/core/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php @@ -0,0 +1,119 @@ + 'i̇', + 'µ' => 'μ', + 'ſ' => 's', + 'ͅ' => 'ι', + 'ς' => 'σ', + 'ϐ' => 'β', + 'ϑ' => 'θ', + 'ϕ' => 'φ', + 'ϖ' => 'π', + 'ϰ' => 'κ', + 'ϱ' => 'ρ', + 'ϵ' => 'ε', + 'ẛ' => 'ṡ', + 'ι' => 'ι', + 'ß' => 'ss', + 'ʼn' => 'ʼn', + 'ǰ' => 'ǰ', + 'ΐ' => 'ΐ', + 'ΰ' => 'ΰ', + 'և' => 'եւ', + 'ẖ' => 'ẖ', + 'ẗ' => 'ẗ', + 'ẘ' => 'ẘ', + 'ẙ' => 'ẙ', + 'ẚ' => 'aʾ', + 'ẞ' => 'ss', + 'ὐ' => 'ὐ', + 'ὒ' => 'ὒ', + 'ὔ' => 'ὔ', + 'ὖ' => 'ὖ', + 'ᾀ' => 'ἀι', + 'ᾁ' => 'ἁι', + 'ᾂ' => 'ἂι', + 'ᾃ' => 'ἃι', + 'ᾄ' => 'ἄι', + 'ᾅ' => 'ἅι', + 'ᾆ' => 'ἆι', + 'ᾇ' => 'ἇι', + 'ᾈ' => 'ἀι', + 'ᾉ' => 'ἁι', + 'ᾊ' => 'ἂι', + 'ᾋ' => 'ἃι', + 'ᾌ' => 'ἄι', + 'ᾍ' => 'ἅι', + 'ᾎ' => 'ἆι', + 'ᾏ' => 'ἇι', + 'ᾐ' => 'ἠι', + 'ᾑ' => 'ἡι', + 'ᾒ' => 'ἢι', + 'ᾓ' => 'ἣι', + 'ᾔ' => 'ἤι', + 'ᾕ' => 'ἥι', + 'ᾖ' => 'ἦι', + 'ᾗ' => 'ἧι', + 'ᾘ' => 'ἠι', + 'ᾙ' => 'ἡι', + 'ᾚ' => 'ἢι', + 'ᾛ' => 'ἣι', + 'ᾜ' => 'ἤι', + 'ᾝ' => 'ἥι', + 'ᾞ' => 'ἦι', + 'ᾟ' => 'ἧι', + 'ᾠ' => 'ὠι', + 'ᾡ' => 'ὡι', + 'ᾢ' => 'ὢι', + 'ᾣ' => 'ὣι', + 'ᾤ' => 'ὤι', + 'ᾥ' => 'ὥι', + 'ᾦ' => 'ὦι', + 'ᾧ' => 'ὧι', + 'ᾨ' => 'ὠι', + 'ᾩ' => 'ὡι', + 'ᾪ' => 'ὢι', + 'ᾫ' => 'ὣι', + 'ᾬ' => 'ὤι', + 'ᾭ' => 'ὥι', + 'ᾮ' => 'ὦι', + 'ᾯ' => 'ὧι', + 'ᾲ' => 'ὰι', + 'ᾳ' => 'αι', + 'ᾴ' => 'άι', + 'ᾶ' => 'ᾶ', + 'ᾷ' => 'ᾶι', + 'ᾼ' => 'αι', + 'ῂ' => 'ὴι', + 'ῃ' => 'ηι', + 'ῄ' => 'ήι', + 'ῆ' => 'ῆ', + 'ῇ' => 'ῆι', + 'ῌ' => 'ηι', + 'ῒ' => 'ῒ', + 'ῖ' => 'ῖ', + 'ῗ' => 'ῗ', + 'ῢ' => 'ῢ', + 'ῤ' => 'ῤ', + 'ῦ' => 'ῦ', + 'ῧ' => 'ῧ', + 'ῲ' => 'ὼι', + 'ῳ' => 'ωι', + 'ῴ' => 'ώι', + 'ῶ' => 'ῶ', + 'ῷ' => 'ῶι', + 'ῼ' => 'ωι', + 'ff' => 'ff', + 'fi' => 'fi', + 'fl' => 'fl', + 'ffi' => 'ffi', + 'ffl' => 'ffl', + 'ſt' => 'st', + 'st' => 'st', + 'ﬓ' => 'մն', + 'ﬔ' => 'մե', + 'ﬕ' => 'մի', + 'ﬖ' => 'վն', + 'ﬗ' => 'մխ', +]; diff --git a/core/vendor/symfony/polyfill-mbstring/bootstrap.php b/core/vendor/symfony/polyfill-mbstring/bootstrap.php index 1fedd1f7c8..ecf1a03522 100644 --- a/core/vendor/symfony/polyfill-mbstring/bootstrap.php +++ b/core/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -132,6 +132,10 @@ function mb_scrub($string, $encoding = null) { $encoding = null === $encoding ? function mb_str_split($string, $length = 1, $encoding = null) { return p\Mbstring::mb_str_split($string, $length, $encoding); } } +if (!function_exists('mb_str_pad')) { + function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } +} + if (extension_loaded('mbstring')) { return; } diff --git a/core/vendor/symfony/polyfill-mbstring/bootstrap80.php b/core/vendor/symfony/polyfill-mbstring/bootstrap80.php index 82f5ac4d0f..2f9fb5b421 100644 --- a/core/vendor/symfony/polyfill-mbstring/bootstrap80.php +++ b/core/vendor/symfony/polyfill-mbstring/bootstrap80.php @@ -128,6 +128,10 @@ function mb_scrub(?string $string, ?string $encoding = null): string { $encoding function mb_str_split(?string $string, ?int $length = 1, ?string $encoding = null): array { return p\Mbstring::mb_str_split((string) $string, (int) $length, $encoding); } } +if (!function_exists('mb_str_pad')) { + function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Mbstring::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } +} + if (extension_loaded('mbstring')) { return; } diff --git a/core/vendor/symfony/polyfill-mbstring/composer.json b/core/vendor/symfony/polyfill-mbstring/composer.json index 44895536ba..943e502968 100644 --- a/core/vendor/symfony/polyfill-mbstring/composer.json +++ b/core/vendor/symfony/polyfill-mbstring/composer.json @@ -31,7 +31,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/core/vendor/symfony/polyfill-php72/LICENSE b/core/vendor/symfony/polyfill-php72/LICENSE index 4cd8bdd300..6e3afce692 100644 --- a/core/vendor/symfony/polyfill-php72/LICENSE +++ b/core/vendor/symfony/polyfill-php72/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2015-2019 Fabien Potencier +Copyright (c) 2015-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/symfony/polyfill-php72/composer.json b/core/vendor/symfony/polyfill-php72/composer.json index 5f17af3438..b61b4c8a23 100644 --- a/core/vendor/symfony/polyfill-php72/composer.json +++ b/core/vendor/symfony/polyfill-php72/composer.json @@ -25,7 +25,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/core/vendor/symfony/polyfill-php73/LICENSE b/core/vendor/symfony/polyfill-php73/LICENSE index 3f853aaf35..7536caeae8 100644 --- a/core/vendor/symfony/polyfill-php73/LICENSE +++ b/core/vendor/symfony/polyfill-php73/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2018-2019 Fabien Potencier +Copyright (c) 2018-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/symfony/polyfill-php73/composer.json b/core/vendor/symfony/polyfill-php73/composer.json index b5c58ec193..48295ef974 100644 --- a/core/vendor/symfony/polyfill-php73/composer.json +++ b/core/vendor/symfony/polyfill-php73/composer.json @@ -26,7 +26,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/core/vendor/symfony/polyfill-php80/LICENSE b/core/vendor/symfony/polyfill-php80/LICENSE index 5593b1d84f..0ed3a24655 100644 --- a/core/vendor/symfony/polyfill-php80/LICENSE +++ b/core/vendor/symfony/polyfill-php80/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2020 Fabien Potencier +Copyright (c) 2020-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/symfony/polyfill-php80/composer.json b/core/vendor/symfony/polyfill-php80/composer.json index bd9a3262a9..f1801f4030 100644 --- a/core/vendor/symfony/polyfill-php80/composer.json +++ b/core/vendor/symfony/polyfill-php80/composer.json @@ -30,7 +30,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/core/vendor/symfony/polyfill-php81/LICENSE b/core/vendor/symfony/polyfill-php81/LICENSE index efb17f98e7..99c6bdf356 100644 --- a/core/vendor/symfony/polyfill-php81/LICENSE +++ b/core/vendor/symfony/polyfill-php81/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2021 Fabien Potencier +Copyright (c) 2021-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/symfony/polyfill-php81/README.md b/core/vendor/symfony/polyfill-php81/README.md index 7d8dd19078..c07ef78202 100644 --- a/core/vendor/symfony/polyfill-php81/README.md +++ b/core/vendor/symfony/polyfill-php81/README.md @@ -7,6 +7,7 @@ This component provides features added to PHP 8.1 core: - [`enum_exists`](https://php.net/enum-exists) - [`MYSQLI_REFRESH_REPLICA`](https://php.net/mysqli.constants#constantmysqli-refresh-replica) constant - [`ReturnTypeWillChange`](https://wiki.php.net/rfc/internal_method_return_types) +- [`CURLStringFile`](https://php.net/CURLStringFile) (but only if PHP >= 7.4 is used) More information can be found in the [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). diff --git a/core/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php b/core/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php new file mode 100644 index 0000000000..eb5952ee3a --- /dev/null +++ b/core/vendor/symfony/polyfill-php81/Resources/stubs/CURLStringFile.php @@ -0,0 +1,51 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID >= 70400 && extension_loaded('curl')) { + /** + * @property string $data + */ + class CURLStringFile extends CURLFile + { + private $data; + + public function __construct(string $data, string $postname, string $mime = 'application/octet-stream') + { + $this->data = $data; + parent::__construct('data://application/octet-stream;base64,'.base64_encode($data), $mime, $postname); + } + + public function __set(string $name, $value): void + { + if ('data' !== $name) { + $this->$name = $value; + + return; + } + + if (is_object($value) ? !method_exists($value, '__toString') : !is_scalar($value)) { + throw new \TypeError('Cannot assign '.gettype($value).' to property CURLStringFile::$data of type string'); + } + + $this->name = 'data://application/octet-stream;base64,'.base64_encode($value); + } + + public function __isset(string $name): bool + { + return isset($this->$name); + } + + public function &__get(string $name) + { + return $this->$name; + } + } +} diff --git a/core/vendor/symfony/polyfill-php81/composer.json b/core/vendor/symfony/polyfill-php81/composer.json index 149b598215..e02d673d44 100644 --- a/core/vendor/symfony/polyfill-php81/composer.json +++ b/core/vendor/symfony/polyfill-php81/composer.json @@ -26,7 +26,7 @@ "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/core/vendor/symfony/polyfill-php83/LICENSE b/core/vendor/symfony/polyfill-php83/LICENSE index 0ece8964f7..733c826ebc 100644 --- a/core/vendor/symfony/polyfill-php83/LICENSE +++ b/core/vendor/symfony/polyfill-php83/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2022 Fabien Potencier +Copyright (c) 2022-present Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/core/vendor/symfony/polyfill-php83/Php83.php b/core/vendor/symfony/polyfill-php83/Php83.php index 04a5ad46a6..23a9cf3890 100644 --- a/core/vendor/symfony/polyfill-php83/Php83.php +++ b/core/vendor/symfony/polyfill-php83/Php83.php @@ -30,7 +30,7 @@ public static function json_validate(string $json, int $depth = 512, int $flags throw new \ValueError('json_validate(): Argument #2 ($depth) must be greater than 0'); } - if ($depth >= self::JSON_MAX_DEPTH) { + if ($depth > self::JSON_MAX_DEPTH) { throw new \ValueError(sprintf('json_validate(): Argument #2 ($depth) must be less than %d', self::JSON_MAX_DEPTH)); } @@ -38,4 +38,48 @@ public static function json_validate(string $json, int $depth = 512, int $flags return \JSON_ERROR_NONE === json_last_error(); } + + public static function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = \STR_PAD_RIGHT, string $encoding = null): string + { + if (!\in_array($pad_type, [\STR_PAD_RIGHT, \STR_PAD_LEFT, \STR_PAD_BOTH], true)) { + throw new \ValueError('mb_str_pad(): Argument #4 ($pad_type) must be STR_PAD_LEFT, STR_PAD_RIGHT, or STR_PAD_BOTH'); + } + + if (null === $encoding) { + $encoding = mb_internal_encoding(); + } + + try { + $validEncoding = @mb_check_encoding('', $encoding); + } catch (\ValueError $e) { + throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + // BC for PHP 7.3 and lower + if (!$validEncoding) { + throw new \ValueError(sprintf('mb_str_pad(): Argument #5 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + if (mb_strlen($pad_string, $encoding) <= 0) { + throw new \ValueError('mb_str_pad(): Argument #3 ($pad_string) must be a non-empty string'); + } + + $paddingRequired = $length - mb_strlen($string, $encoding); + + if ($paddingRequired < 1) { + return $string; + } + + switch ($pad_type) { + case \STR_PAD_LEFT: + return mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding).$string; + case \STR_PAD_RIGHT: + return $string.mb_substr(str_repeat($pad_string, $paddingRequired), 0, $paddingRequired, $encoding); + default: + $leftPaddingLength = floor($paddingRequired / 2); + $rightPaddingLength = $paddingRequired - $leftPaddingLength; + + return mb_substr(str_repeat($pad_string, $leftPaddingLength), 0, $leftPaddingLength, $encoding).$string.mb_substr(str_repeat($pad_string, $rightPaddingLength), 0, $rightPaddingLength, $encoding); + } + } } diff --git a/core/vendor/symfony/polyfill-php83/README.md b/core/vendor/symfony/polyfill-php83/README.md index bc3ae3f065..92516e7a45 100644 --- a/core/vendor/symfony/polyfill-php83/README.md +++ b/core/vendor/symfony/polyfill-php83/README.md @@ -4,6 +4,12 @@ Symfony Polyfill / Php83 This component provides features added to PHP 8.3 core: - [`json_validate`](https://wiki.php.net/rfc/json_validate) +- [`Override`](https://wiki.php.net/rfc/marking_overriden_methods) +- [`mb_str_pad`](https://wiki.php.net/rfc/mb_str_pad) +- [`ldap_exop_sync`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures) +- [`ldap_connect_wallet`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures) +- [`stream_context_set_options`](https://wiki.php.net/rfc/deprecate_functions_with_overloaded_signatures) +- [`Date*Exception/Error classes`](https://wiki.php.net/rfc/datetime-exceptions) More information can be found in the [main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md). diff --git a/core/vendor/symfony/polyfill-php83/Resources/stubs/DateError.php b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateError.php new file mode 100644 index 0000000000..6e7ed8c864 --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateError.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80300) { + class DateError extends Error + { + } +} diff --git a/core/vendor/symfony/polyfill-php83/Resources/stubs/DateException.php b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateException.php new file mode 100644 index 0000000000..041710af55 --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80300) { + class DateException extends Exception + { + } +} diff --git a/core/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php new file mode 100644 index 0000000000..e2e9dfc95f --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80300) { + class DateInvalidOperationException extends DateException + { + } +} diff --git a/core/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php new file mode 100644 index 0000000000..75bcd267a5 --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80300) { + class DateInvalidTimeZoneException extends DateException + { + } +} diff --git a/core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php new file mode 100644 index 0000000000..af91b8e4d5 --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80300) { + class DateMalformedIntervalStringException extends DateException + { + } +} diff --git a/core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php new file mode 100644 index 0000000000..9b6d2764e3 --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80300) { + class DateMalformedPeriodStringException extends DateException + { + } +} diff --git a/core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php new file mode 100644 index 0000000000..7ad04849fc --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80300) { + class DateMalformedStringException extends DateException + { + } +} diff --git a/core/vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php new file mode 100644 index 0000000000..11f0edc682 --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80300) { + class DateObjectError extends DateError + { + } +} diff --git a/core/vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php new file mode 100644 index 0000000000..98e67036ef --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80300) { + class DateRangeError extends DateError + { + } +} diff --git a/core/vendor/symfony/polyfill-php83/Resources/stubs/Override.php b/core/vendor/symfony/polyfill-php83/Resources/stubs/Override.php new file mode 100644 index 0000000000..d3e6b3e1dd --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/Resources/stubs/Override.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 80300) { + #[Attribute(Attribute::TARGET_METHOD)] + final class Override + { + public function __construct() + { + } + } +} diff --git a/core/vendor/symfony/polyfill-php83/bootstrap.php b/core/vendor/symfony/polyfill-php83/bootstrap.php index 3b8ccc8b00..b5beb71a60 100644 --- a/core/vendor/symfony/polyfill-php83/bootstrap.php +++ b/core/vendor/symfony/polyfill-php83/bootstrap.php @@ -18,3 +18,23 @@ if (!function_exists('json_validate')) { function json_validate(string $json, int $depth = 512, int $flags = 0): bool { return p\Php83::json_validate($json, $depth, $flags); } } + +if (!function_exists('mb_str_pad') && function_exists('mb_substr')) { + function mb_str_pad(string $string, int $length, string $pad_string = ' ', int $pad_type = STR_PAD_RIGHT, ?string $encoding = null): string { return p\Php83::mb_str_pad($string, $length, $pad_string, $pad_type, $encoding); } +} + +if (!function_exists('stream_context_set_options')) { + function stream_context_set_options($context, array $options): bool { return stream_context_set_option($context, $options); } +} + +if (\PHP_VERSION_ID >= 80100) { + return require __DIR__.'/bootstrap81.php'; +} + +if (!function_exists('ldap_exop_sync') && function_exists('ldap_exop')) { + function ldap_exop_sync($ldap, string $request_oid, string $request_data = null, array $controls = null, &$response_data = null, &$response_oid = null): bool { return ldap_exop($ldap, $request_oid, $request_data, $controls, $response_data, $response_oid); } +} + +if (!function_exists('ldap_connect_wallet') && function_exists('ldap_connect')) { + function ldap_connect_wallet(?string $uri, string $wallet, string $password, int $auth_mode = \GSLC_SSL_NO_AUTH) { return ldap_connect($uri, $wallet, $password, $auth_mode); } +} diff --git a/core/vendor/symfony/polyfill-php83/bootstrap81.php b/core/vendor/symfony/polyfill-php83/bootstrap81.php new file mode 100644 index 0000000000..63a4f78008 --- /dev/null +++ b/core/vendor/symfony/polyfill-php83/bootstrap81.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID >= 80300) { + return; +} + +if (!function_exists('ldap_exop_sync') && function_exists('ldap_exop')) { + function ldap_exop_sync(\LDAP\Connection $ldap, string $request_oid, string $request_data = null, array $controls = null, &$response_data = null, &$response_oid = null): bool { return ldap_exop($ldap, $request_oid, $request_data, $controls, $response_data, $response_oid); } +} + +if (!function_exists('ldap_connect_wallet') && function_exists('ldap_connect')) { + function ldap_connect_wallet(?string $uri, string $wallet, #[\SensitiveParameter] string $password, int $auth_mode = \GSLC_SSL_NO_AUTH): \LDAP\Connection|false { return ldap_connect($uri, $wallet, $password, $auth_mode); } +} diff --git a/core/vendor/symfony/polyfill-php83/composer.json b/core/vendor/symfony/polyfill-php83/composer.json index 31c96ea5be..51c81b16a2 100644 --- a/core/vendor/symfony/polyfill-php83/composer.json +++ b/core/vendor/symfony/polyfill-php83/composer.json @@ -21,12 +21,13 @@ }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Php83\\": "" }, - "files": [ "bootstrap.php" ] + "files": [ "bootstrap.php" ], + "classmap": [ "Resources/stubs" ] }, "minimum-stability": "dev", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", diff --git a/core/vendor/symfony/process/Process.php b/core/vendor/symfony/process/Process.php index 40dbd41620..3e08b51fdd 100644 --- a/core/vendor/symfony/process/Process.php +++ b/core/vendor/symfony/process/Process.php @@ -328,7 +328,7 @@ public function start(callable $callback = null, array $env = []) // See https://unix.stackexchange.com/questions/71205/background-process-pipe-input $commandline = '{ ('.$commandline.') <&3 3<&- 3>/dev/null & } 3<&0;'; - $commandline .= 'pid=$!; echo $pid >&3; wait $pid; code=$?; echo $code >&3; exit $code'; + $commandline .= 'pid=$!; echo $pid >&3; wait $pid 2>/dev/null; code=$?; echo $code >&3; exit $code'; // Workaround for the bug, when PTS functionality is enabled. // @see : https://bugs.php.net/69442 diff --git a/core/vendor/symfony/routing/Matcher/Dumper/CompiledUrlMatcherDumper.php b/core/vendor/symfony/routing/Matcher/Dumper/CompiledUrlMatcherDumper.php index e92a5ea3d7..50c29e44b8 100644 --- a/core/vendor/symfony/routing/Matcher/Dumper/CompiledUrlMatcherDumper.php +++ b/core/vendor/symfony/routing/Matcher/Dumper/CompiledUrlMatcherDumper.php @@ -139,7 +139,7 @@ private function generateCompiledRoutes(): string foreach ($staticRoutes as $path => $routes) { $code .= sprintf(" %s => [\n", self::export($path)); foreach ($routes as $route) { - $code .= sprintf(" [%s, %s, %s, %s, %s, %s, %s],\n", ...array_map([__CLASS__, 'export'], $route)); + $code .= vsprintf(" [%s, %s, %s, %s, %s, %s, %s],\n", array_map([__CLASS__, 'export'], $route)); } $code .= " ],\n"; } @@ -151,7 +151,7 @@ private function generateCompiledRoutes(): string foreach ($dynamicRoutes as $path => $routes) { $code .= sprintf(" %s => [\n", self::export($path)); foreach ($routes as $route) { - $code .= sprintf(" [%s, %s, %s, %s, %s, %s, %s],\n", ...array_map([__CLASS__, 'export'], $route)); + $code .= vsprintf(" [%s, %s, %s, %s, %s, %s, %s],\n", array_map([__CLASS__, 'export'], $route)); } $code .= " ],\n"; } diff --git a/core/vendor/symfony/routing/composer.json b/core/vendor/symfony/routing/composer.json index 2405632b57..5de3340c6c 100644 --- a/core/vendor/symfony/routing/composer.json +++ b/core/vendor/symfony/routing/composer.json @@ -16,7 +16,8 @@ } ], "require": { - "php": ">=8.1" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "require-dev": { "symfony/config": "^6.2", diff --git a/core/vendor/symfony/string/Inflector/EnglishInflector.php b/core/vendor/symfony/string/Inflector/EnglishInflector.php index 2871e4e51e..2cd6bb87b6 100644 --- a/core/vendor/symfony/string/Inflector/EnglishInflector.php +++ b/core/vendor/symfony/string/Inflector/EnglishInflector.php @@ -94,6 +94,9 @@ final class EnglishInflector implements InflectorInterface // accesses (access), addresses (address), kisses (kiss) ['sess', 4, true, false, 'ss'], + // statuses (status) + ['sesutats', 8, true, true, 'status'], + // analyses (analysis), ellipses (ellipsis), fungi (fungus), // neuroses (neurosis), theses (thesis), emphases (emphasis), // oases (oasis), crises (crisis), houses (house), bases (base), @@ -138,6 +141,9 @@ final class EnglishInflector implements InflectorInterface // shoes (shoe) ['se', 2, true, true, ['', 'e']], + // status (status) + ['sutats', 6, true, true, 'status'], + // tags (tag) ['s', 1, true, true, ''], @@ -279,6 +285,9 @@ final class EnglishInflector implements InflectorInterface // circuses (circus) ['suc', 3, true, true, 'cuses'], + // status (status) + ['sutats', 6, true, true, ['status', 'statuses']], + // conspectuses (conspectus), prospectuses (prospectus) ['sutcep', 6, true, true, 'pectuses'], diff --git a/core/vendor/symfony/translation/composer.json b/core/vendor/symfony/translation/composer.json index 17edae6461..ee8e415dd5 100644 --- a/core/vendor/symfony/translation/composer.json +++ b/core/vendor/symfony/translation/composer.json @@ -17,6 +17,7 @@ ], "require": { "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, diff --git a/core/vendor/symfony/var-dumper/Caster/DateCaster.php b/core/vendor/symfony/var-dumper/Caster/DateCaster.php index 1394a78132..a0cbddb76f 100644 --- a/core/vendor/symfony/var-dumper/Caster/DateCaster.php +++ b/core/vendor/symfony/var-dumper/Caster/DateCaster.php @@ -30,7 +30,7 @@ class DateCaster public static function castDateTime(\DateTimeInterface $d, array $a, Stub $stub, bool $isNested, int $filter) { $prefix = Caster::PREFIX_VIRTUAL; - $location = $d->getTimezone()->getLocation(); + $location = $d->getTimezone() ? $d->getTimezone()->getLocation() : null; $fromNow = (new \DateTimeImmutable())->diff($d); $title = $d->format('l, F j, Y') diff --git a/core/vendor/symfony/var-dumper/Caster/SplCaster.php b/core/vendor/symfony/var-dumper/Caster/SplCaster.php index ea86cb4988..814d824d19 100644 --- a/core/vendor/symfony/var-dumper/Caster/SplCaster.php +++ b/core/vendor/symfony/var-dumper/Caster/SplCaster.php @@ -269,7 +269,11 @@ private static function castSplArray(\ArrayObject|\ArrayIterator $c, array $a, S $a = Caster::castObject($c, $c::class, method_exists($c, '__debugInfo'), $stub->class); $c->setFlags($flags); } + + unset($a["\0ArrayObject\0storage"], $a["\0ArrayIterator\0storage"]); + $a += [ + $prefix.'storage' => $c->getArrayCopy(), $prefix.'flag::STD_PROP_LIST' => (bool) ($flags & \ArrayObject::STD_PROP_LIST), $prefix.'flag::ARRAY_AS_PROPS' => (bool) ($flags & \ArrayObject::ARRAY_AS_PROPS), ]; diff --git a/core/vendor/symfony/var-dumper/Dumper/CliDumper.php b/core/vendor/symfony/var-dumper/Dumper/CliDumper.php index c155d4c79a..b3358f515e 100644 --- a/core/vendor/symfony/var-dumper/Dumper/CliDumper.php +++ b/core/vendor/symfony/var-dumper/Dumper/CliDumper.php @@ -134,6 +134,7 @@ public function setDisplayOptions(array $displayOptions) public function dumpScalar(Cursor $cursor, string $type, string|int|float|bool|null $value) { $this->dumpKey($cursor); + $this->collapseNextHash = $this->expandNextHash = false; $style = 'const'; $attr = $cursor->attr; @@ -197,6 +198,7 @@ public function dumpScalar(Cursor $cursor, string $type, string|int|float|bool|n public function dumpString(Cursor $cursor, string $str, bool $bin, int $cut) { $this->dumpKey($cursor); + $this->collapseNextHash = $this->expandNextHash = false; $attr = $cursor->attr; if ($bin) { @@ -290,6 +292,7 @@ public function enterHash(Cursor $cursor, int $type, string|int|null $class, boo $this->colors ??= $this->supportsColors(); $this->dumpKey($cursor); + $this->expandNextHash = false; $attr = $cursor->attr; if ($this->collapseNextHash) { diff --git a/core/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php b/core/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php index d36e8bcf6f..790285c97e 100644 --- a/core/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php +++ b/core/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php @@ -44,7 +44,7 @@ public function getContext(): ?array $file = $trace[1]['file']; $line = $trace[1]['line']; - $name = false; + $name = '-' === $file || 'Standard input code' === $file ? 'Standard input code' : false; $fileExcerpt = false; for ($i = 2; $i < $this->limit; ++$i) { diff --git a/core/vendor/symfony/var-dumper/Dumper/HtmlDumper.php b/core/vendor/symfony/var-dumper/Dumper/HtmlDumper.php index 345a89cf72..8a2570b2c4 100644 --- a/core/vendor/symfony/var-dumper/Dumper/HtmlDumper.php +++ b/core/vendor/symfony/var-dumper/Dumper/HtmlDumper.php @@ -163,9 +163,7 @@ protected function getDumpHeader() - -``` +[![Server Error 500](https://nette.github.io/tracy/images/tracy-error2.png)](https://nette.github.io/tracy/tracy-production.html) +Production mode suppresses the display of all debugging information sent out using [dump() |dumper], and of course also all error messages generated by PHP. So if you have forgotten some `dump($obj)` in the code, you don't have to worry, nothing will be displayed on the production server. -AJAX and redirected requests ----------------------------- +How does mode auto-detection work? The mode is development if the application is running on localhost (i.e., IP address `127.0.0.1` or `::1`) and there is no proxy (i.e., its HTTP header). Otherwise, it runs in production mode. -Tracy is able to show Debug bar and Bluescreens for AJAX and redirected requests. Tracy keeps the data in a temporary files and uses the `tracy-session` cookie. Tracy can be configured to use a standard PHP session: +If you want to enable development mode in other cases, for example for developers accessing from a specific IP address, you can specify it as a parameter of the `enable()` method: ```php -Debugger::setSessionStorage(new Tracy\NativeSession); -Debugger::enable(); +Debugger::enable('23.75.345.200'); // you can also provide an array of IP addresses ``` -In case you use non-standard session handler, you can start Tracy immediately (in order to handle any errors), then initialize your session handler -and then inform Tracy that session is ready to use via `dispatch()`: +We definitely recommend combining the IP address with a cookie. Store a secret token, e.g., `secret1234`, in the `tracy-debug` cookie, and in this way, activate the development mode only for developers accessing from a specific IP address who have the mentioned token in the cookie: ```php -Debugger::setSessionStorage(new Tracy\NativeSession); -Debugger::enable(); - -// initialize session handler -session_start(); - -Debugger::dispatch(); +Debugger::enable('secret1234@23.75.345.200'); ``` +You can also directly set the development/production mode using the `Debugger::Development` or `Debugger::Production` constants as a parameter of the `enable()` method. -Opening files in the editor ---------------------------- - -When the error page is displayed, you can click on file names and they will open in your editor with the cursor on the corresponding line. Files can also be created (action `create file`) or bug fixed in them (action `fix it`). In order to do this, you need to [configure the browser and the system](https://tracy.nette.org/cs/open-files-in-ide). - - -Production mode and error logging ---------------------------------- +(If you use the Nette Framework, take a look at how to set the mode for it, and it will then also be used for Tracy.) -As you can see, Tracy is quite eloquent. It is appreciated in a development environment, but on a production server, it would cause a disaster. Any debugging information cannot be listed there. Therefore Tracy has an environment autodetection and logging functionality. Instead of showing herself, Tracy stores information into a log file and shows the visitor a user-comprehensible server error message: -[![Server Error 500](https://nette.github.io/tracy/images/tracy-error2.png)](https://nette.github.io/tracy/tracy-production.html) - -Production output mode suppresses all debugging information which is sent out via `dump()` or `Debugger::fireLog()`, and of course all error messages generated by PHP. So, even if you forget `dump($obj)` in the source code, you do not have to worry about it on your production server. Nothing will be seen. +Error Logging +------------- -The output mode is set by the first parameter of `Debugger::enable()`. You can specify either a constant `Debugger::Production` or `Debugger::Development`. Other option is to set it up in a way, that development mode will be on when the application is accessed from a defined IP address with a defined value of `tracy-debug` cookie. The syntax used to achieve this is `cookie-value@ip-address`. +In production mode, Tracy automatically logs all errors and exceptions to a text log. In order for logging to take place, you need to set the absolute path to the log directory to the `$logDirectory` variable or pass it as the second parameter to `enable()` method: -If it is not specified, the default value `Debugger::Detect` is used. In this case, the system detects a server by IP address. The production mode is chosen if an application is accessed via a public IP address. A local IP address leads to development mode. It is not necessary to set the mode in most cases. The mode is correctly recognized when you are launching the application on your local server or in production. +```php +Debugger::$logDirectory = __DIR__ . '/log'; +``` -In the production mode, Tracy automatically captures all errors and exceptions into a text log. Unless you specify otherwise, it will be stored in log/error.log. This error logging is extremely useful. Imagine, that all users of your application are actually betatesters. They are doing cutting-edge work for free when hunting bugs and you would be silly if you threw away their valuable reports to a recycle bin unnoticed. +Error logging is extremely useful. Imagine that all users of your application are actually beta testers who do top-notch work in finding errors for free, and you would be foolish to throw their valuable reports away unnoticed into the trash bin. If you need to log your own messages or caught exceptions, use the method `log()`: @@ -241,12 +188,6 @@ try { } ``` -A directory for errors logging can be set by the second parameter of the enable() method: - -```php -Debugger::enable(Debugger::Detect, __DIR__ . '/mylog'); -``` - If you want Tracy to log PHP errors like `E_NOTICE` or `E_WARNING` with detailed information (HTML report), set `Debugger::$logSeverity`: ```php @@ -259,12 +200,18 @@ For a real professional the error log is a crucial source of information and he Debugger::$email = 'admin@example.com'; ``` -If you use the Nette Framework, you can set this and others in the configuration file. +(If you use the Nette Framework, you can set this and others in the configuration file.) To protect your e-mail box from flood, Tracy sends **only one message** and creates a file `email-sent`. When a developer receives the e-mail notification, he checks the log, corrects his application and deletes the `email-sent` monitoring file. This activates the e-mail sending again. -Variable dumping +Opening Files in the Editor +--------------------------- + +When the error page is displayed, you can click on file names and they will open in your editor with the cursor on the corresponding line. Files can also be created (action `create file`) or bug fixed in them (action `fix it`). In order to do this, you need to [configure the browser and the system](https://tracy.nette.org/cs/open-files-in-ide). + + +Variable Dumping ---------------- Every debugging developer is a good friend with the function `var_dump`, which lists all contents of any variable in detail. Unfortunately, its output is without HTML formatting and outputs the dump into a single line of HTML code, not to mention context escaping. It is necessary to replace the `var_dump` with a more handy function. That is just what `dump()` is. @@ -273,41 +220,50 @@ Every debugging developer is a good friend with the function `var_dump`, which l $arr = [10, 20.2, true, null, 'hello']; dump($arr); -// or Tracy\Debugger::dump($arr); +// or Debugger::dump($arr); ``` generates the output: -![dump](https://nette.github.io/tracy/images/tracy-dump.png) +![dump](https://nette.github.io/tracy/images/dump-basic.webp) + +You can change the default light theme to dark: + +```php +Debugger::$dumpTheme = 'dark'; +``` + +![dump](https://nette.github.io/tracy/images/dump-dark.webp) You can also change the nesting depth by `Debugger::$maxDepth` and displayed strings length by `Debugger::$maxLength`. Naturally, lower values accelerate Tracy rendering. ```php -Debugger::$maxDepth = 2; // default: 7 +Debugger::$maxDepth = 2; // default: 3 Debugger::$maxLength = 50; // default: 150 Debugger::$dumpTheme = 'dark'; // default: light ``` -The `dump()` function can display useful location information: +The `dump()` function can display other useful information. `Tracy\Dumper::LOCATION_SOURCE` adds a tooltip with path to the file, where the function was called. `Tracy\Dumper::LOCATION_LINK` adds a link to the file. `Tracy\Dumper::LOCATION_CLASS` adds a tooltip to every dumped object containing path to the file, in which the object's class is defined. All these constants can be set in `Debugger::$showLocation` variable before calling the `dump()`. You can set multiple values at once using the `|` operator. ```php -Debugger::$showLocation = true; // shows tooltip with path to the file, where the dump() was called, and tooltips for every dumped objects -Debugger::$showLocation = Tracy\Dumper::LOCATION_CLASS; // shows only tooltips for every dumped object containing path to the file -Debugger::$showLocation = false; // hides all location information +Debugger::$showLocation = Tracy\Dumper::LOCATION_SOURCE; // Shows path to where the dump() was called +Debugger::$showLocation = Tracy\Dumper::LOCATION_CLASS | Tracy\Dumper::LOCATION_LINK; // Shows both paths to the classes and link to where the dump() was called +Debugger::$showLocation = false; // Hides additional location information +Debugger::$showLocation = true; // Shows all additional location information ``` -Very handy alternative to `dump()` is `dumpe()` (ie. dump and exit) and `bdump()`. This allows us to dump variables in Debugger Bar. This is useful, because dumps don't mess up the output and we can also add a title to the dump. +Very handy alternative to `dump()` is `dumpe()` (ie. dump and exit) and `bdump()`. This allows us to dump variables in Tracy Bar. This is useful, because dumps don't mess up the output and we can also add a title to the dump. ```php bdump([2, 4, 6, 8], 'even numbers up to ten'); bdump([1, 3, 5, 7, 9], 'odd numbers up to ten'); ``` -![bar dump](https://nette.github.io/tracy/images/tracy-bardump.png) +![bar dump](https://nette.github.io/tracy/images/bardump-en.webp) -Timing ------- +Stopwatch +--------- Another useful tool is the debugger stopwatch with a precision of microseconds: @@ -374,6 +330,93 @@ services: ``` +Monolog Integration +------------------- + +This package provides a PSR-3 adapter, allowing for integration of [monolog/monolog](https://github.com/Seldaek/monolog). + +```php +$monolog = new Monolog\Logger('main-channel'); +$monolog->pushHandler(new Monolog\Handler\StreamHandler($logFilePath, Monolog\Logger::DEBUG)); + +$tracyLogger = new Tracy\Bridges\Psr\PsrToTracyLoggerAdapter($monolog); +Debugger::setLogger($tracyLogger); +Debugger::enable(); + +Debugger::log('info'); // writes: [] main-channel.INFO: info [] [] +Debugger::log('warning', Debugger::WARNING); // writes: [] main-channel.WARNING: warning [] [] +``` + + +Faster Loading +-------------- + +The basic integration is straightforward, however if you have slow blocking scripts in web page, they can slow the Tracy loading. +The solution is to place `` into your template before any scripts: + +```html + + + + ...<title> + <?php Tracy\Debugger::renderLoader() ?> + <link rel="stylesheet" href="assets/style.css"> + <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script> +</head> +``` + + +AJAX and Redirected Requests +---------------------------- + +Tracy can display Debug bar and Bluescreens for AJAX requests and redirects. Tracy creates its own sessions, stores data in its own temporary files, and uses a `tracy-session` cookie. + +Tracy can also be configured to use a native PHP session, which is started before Tracy is turned on: + +```php +session_start(); +Debugger::setSessionStorage(new Tracy\NativeSession); +Debugger::enable(); +``` + +In case starting a session requires more complex initialization, you can start Tracy immediately (so that it can handle any errors that occur) and then initialize the session handler and finally inform Tracy that the session is ready to be used using the `dispatch()` function: + +```php +Debugger::setSessionStorage(new Tracy\NativeSession); +Debugger::enable(); + +// followed by session initialization +// and start the session +session_start(); + +Debugger::dispatch(); +``` + +The `setSessionStorage()` function has existed since version 2.9, before that Tracy always used the native PHP session. + + +Content Security Policy +----------------------- + +If your site uses Content Security Policy, you'll need to add `'nonce-<value>'` and `'strict-dynamic'` to `script-src` for Tracy to work properly. Some 3rd plugins may require additional directives. +Nonce is not supported in the `style-src` directive, if you use this directive you need to add `'unsafe-inline'`, but this should be avoided in production mode. + +Configuration example for [Nette Framework](https://nette.org): + +```neon +http: + csp: + script-src: [nonce, strict-dynamic] +``` + +Example in pure PHP: + +```php +$nonce = base64_encode(random_bytes(20)); +header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';"); +``` + + nginx ----- diff --git a/core/vendor/tracy/tracy/src/Bridges/Nette/MailSender.php b/core/vendor/tracy/tracy/src/Bridges/Nette/MailSender.php index bac96ae506..b6abcc5ce4 100644 --- a/core/vendor/tracy/tracy/src/Bridges/Nette/MailSender.php +++ b/core/vendor/tracy/tracy/src/Bridges/Nette/MailSender.php @@ -22,20 +22,24 @@ class MailSender private Nette\Mail\IMailer $mailer; - /** @var string|null sender of email notifications */ + /** sender of email notifications */ private ?string $fromEmail = null; + /** actual host on which notification occurred */ + private ?string $host = null; - public function __construct(Nette\Mail\IMailer $mailer, ?string $fromEmail = null) + + public function __construct(Nette\Mail\IMailer $mailer, ?string $fromEmail = null, ?string $host = null) { $this->mailer = $mailer; $this->fromEmail = $fromEmail; + $this->host = $host; } public function send(mixed $message, string $email): void { - $host = preg_replace('#[^\w.-]+#', '', $_SERVER['SERVER_NAME'] ?? php_uname('n')); + $host = preg_replace('#[^\w.-]+#', '', $this->host ?? $_SERVER['SERVER_NAME'] ?? php_uname('n')); $mail = new Nette\Mail\Message; $mail->setHeader('X-Mailer', 'Tracy'); diff --git a/core/vendor/tracy/tracy/src/Bridges/Nette/TracyExtension.php b/core/vendor/tracy/tracy/src/Bridges/Nette/TracyExtension.php index cb01421221..9a11a58a27 100644 --- a/core/vendor/tracy/tracy/src/Bridges/Nette/TracyExtension.php +++ b/core/vendor/tracy/tracy/src/Bridges/Nette/TracyExtension.php @@ -116,8 +116,14 @@ public function afterCompile(Nette\PhpGenerator\ClassType $class) } if ($this->config->netteMailer && $builder->getByType(Nette\Mail\IMailer::class)) { + $params = []; + $params['fromEmail'] = $this->config->fromEmail; + if (class_exists(Nette\Http\Request::class)) { + $params['host'] = new Statement('$this->getByType(?, false)\?->getUrl()->getHost()', [Nette\Http\Request::class]); + } + $initialize->addBody($builder->formatPhp('if ($logger instanceof Tracy\Logger) $logger->mailer = ?;', [ - [new Statement(Tracy\Bridges\Nette\MailSender::class, ['fromEmail' => $this->config->fromEmail]), 'send'], + [new Statement(Tracy\Bridges\Nette\MailSender::class, $params), 'send'], ])); } diff --git a/core/vendor/tracy/tracy/src/Tracy/BlueScreen/assets/section-cli.phtml b/core/vendor/tracy/tracy/src/Tracy/BlueScreen/assets/section-cli.phtml index 92fd9e1095..6d06e40d60 100644 --- a/core/vendor/tracy/tracy/src/Tracy/BlueScreen/assets/section-cli.phtml +++ b/core/vendor/tracy/tracy/src/Tracy/BlueScreen/assets/section-cli.phtml @@ -18,15 +18,19 @@ if (!Helpers::isCli()) { <div class="tracy-section-panel tracy-collapsed"> <h3>Process ID <?= Helpers::escapeHtml(getmypid()) ?></h3> - <pre>php<?= Helpers::escapeHtml(explode('):', $source, 2)[1]) ?></pre> +<?php if (count($tmp = explode('):', $source, 2)) === 2): ?> + <pre>php<?= Helpers::escapeHtml($tmp[1]) ?></pre> +<?php endif; ?> +<?php if (isset($_SERVER['argv'])): ?> <h3>Arguments</h3> <div class="tracy-pane"> <table> -<?php foreach ($_SERVER['argv'] as $k => $v): ?> +<?php foreach ($_SERVER['argv'] as $k => $v): ?> <tr><th><?= Helpers::escapeHtml($k) ?></th><td><?= $dump($v, $k) ?></td></tr> -<?php endforeach ?> +<?php endforeach ?> </table> </div> +<?php endif; ?> </div> </section> diff --git a/core/vendor/tracy/tracy/src/Tracy/Debugger/Debugger.php b/core/vendor/tracy/tracy/src/Tracy/Debugger/Debugger.php index 055ea6a363..eafe719aac 100644 --- a/core/vendor/tracy/tracy/src/Tracy/Debugger/Debugger.php +++ b/core/vendor/tracy/tracy/src/Tracy/Debugger/Debugger.php @@ -17,7 +17,7 @@ */ class Debugger { - public const VERSION = '2.10.2'; + public const VERSION = '2.10.3'; /** server modes for Debugger::enable() */ public const @@ -538,6 +538,7 @@ public static function barDump(mixed $var, ?string $title = null, array $options $panel->data[] = ['title' => $title, 'dump' => Dumper::toHtml($var, $options + [ Dumper::DEPTH => self::$maxDepth, + Dumper::ITEMS => self::$maxItems, Dumper::TRUNCATE => self::$maxLength, Dumper::LOCATION => self::$showLocation ?: Dumper::LOCATION_CLASS | Dumper::LOCATION_SOURCE, Dumper::LAZY => true, diff --git a/core/vendor/tracy/tracy/src/Tracy/Debugger/ProductionStrategy.php b/core/vendor/tracy/tracy/src/Tracy/Debugger/ProductionStrategy.php index 93ddfa2f20..52ac3a4677 100644 --- a/core/vendor/tracy/tracy/src/Tracy/Debugger/ProductionStrategy.php +++ b/core/vendor/tracy/tracy/src/Tracy/Debugger/ProductionStrategy.php @@ -42,9 +42,8 @@ public function handleException(\Throwable $exception, bool $firstTime): void (fn($logged) => require Debugger::$errorTemplate ?: __DIR__ . '/assets/error.500.phtml')(empty($e)); - } elseif (Helpers::isCli()) { - // @ triggers E_NOTICE when strerr is closed since PHP 7.4 - @fwrite(STDERR, "ERROR: {$exception->getMessage()}\n" + } elseif (Helpers::isCli() && is_resource(STDERR)) { + fwrite(STDERR, "ERROR: {$exception->getMessage()}\n" . (isset($e) ? 'Unable to log error. You may try enable debug mode to inspect the problem.' : 'Check log to see more info.') diff --git a/core/vendor/tracy/tracy/src/Tracy/Dumper/Exposer.php b/core/vendor/tracy/tracy/src/Tracy/Dumper/Exposer.php index 04a5d4f602..5a7d5c0e5d 100644 --- a/core/vendor/tracy/tracy/src/Tracy/Dumper/Exposer.php +++ b/core/vendor/tracy/tracy/src/Tracy/Dumper/Exposer.php @@ -239,7 +239,7 @@ public static function exposeDsCollection( Describer $describer, ): void { - foreach ($obj as $k => $v) { + foreach (clone $obj as $k => $v) { $describer->addPropertyTo($value, (string) $k, $v); } } diff --git a/core/vendor/webmozart/assert/CHANGELOG.md b/core/vendor/webmozart/assert/CHANGELOG.md new file mode 100644 index 0000000000..56c8011dee --- /dev/null +++ b/core/vendor/webmozart/assert/CHANGELOG.md @@ -0,0 +1,207 @@ +Changelog +========= + +## UNRELEASED + +## 1.11.0 + +### Added + +* Added explicit (non magic) `allNullOr*` methods, with `@psalm-assert` annotations, for better Psalm support. + +### Changed + +* Trait methods will now check the assertion themselves, instead of using `__callStatic` +* `isList` will now deal correctly with (modified) lists that contain `NaN` +* `reportInvalidArgument` now has a return type of `never`. + +### Removed + +* Removed `symfony/polyfill-ctype` as a dependency, and require `ext-cytpe` instead. + * You can still require the `symfony/polyfill-ctype` in your project if you need it, as it provides `ext-ctype` + +## 1.10.0 + +### Added + +* On invalid assertion, we throw a `Webmozart\Assert\InvalidArgumentException` +* Added `Assert::positiveInteger()` + +### Changed + +* Using a trait with real implementations of `all*()` and `nullOr*()` methods to improve psalm compatibility. + +### Removed + +* Support for PHP <7.2 + +## 1.9.1 + +## Fixed + +* provisional support for PHP 8.0 + +## 1.9.0 + +* added better Psalm support for `all*` & `nullOr*` methods +* These methods are now understood by Psalm through a mixin. You may need a newer version of Psalm in order to use this +* added `@psalm-pure` annotation to `Assert::notFalse()` +* added more `@psalm-assert` annotations where appropriate + +## Changed + +* the `all*` & `nullOr*` methods are now declared on an interface, instead of `@method` annotations. +This interface is linked to the `Assert` class with a `@mixin` annotation. Most IDE's have supported this +for a long time, and you should not lose any autocompletion capabilities. PHPStan has supported this since +version `0.12.20`. This package is marked incompatible (with a composer conflict) with phpstan version prior to that. +If you do not use PHPStan than this does not matter. + +## 1.8.0 + +### Added + +* added `Assert::notStartsWith()` +* added `Assert::notEndsWith()` +* added `Assert::inArray()` +* added `@psalm-pure` annotations to pure assertions + +### Fixed + +* Exception messages of comparisons between `DateTime(Immutable)` objects now display their date & time. +* Custom Exception messages for `Assert::count()` now use the values to render the exception message. + +## 1.7.0 (2020-02-14) + +### Added + +* added `Assert::notFalse()` +* added `Assert::isAOf()` +* added `Assert::isAnyOf()` +* added `Assert::isNotA()` + +## 1.6.0 (2019-11-24) + +### Added + +* added `Assert::validArrayKey()` +* added `Assert::isNonEmptyList()` +* added `Assert::isNonEmptyMap()` +* added `@throws InvalidArgumentException` annotations to all methods that throw. +* added `@psalm-assert` for the list type to the `isList` assertion. + +### Fixed + +* `ResourceBundle` & `SimpleXMLElement` now pass the `isCountable` assertions. +They are countable, without implementing the `Countable` interface. +* The doc block of `range` now has the proper variables. +* An empty array will now pass `isList` and `isMap`. As it is a valid form of both. +If a non-empty variant is needed, use `isNonEmptyList` or `isNonEmptyMap`. + +### Changed + +* Removed some `@psalm-assert` annotations, that were 'side effect' assertions See: + * [#144](https://github.com/webmozart/assert/pull/144) + * [#145](https://github.com/webmozart/assert/issues/145) + * [#146](https://github.com/webmozart/assert/pull/146) + * [#150](https://github.com/webmozart/assert/pull/150) +* If you use Psalm, the minimum version needed is `3.6.0`. Which is enforced through a composer conflict. +If you don't use Psalm, then this has no impact. + +## 1.5.0 (2019-08-24) + +### Added + +* added `Assert::uniqueValues()` +* added `Assert::unicodeLetters()` +* added: `Assert::email()` +* added support for [Psalm](https://github.com/vimeo/psalm), by adding `@psalm-assert` annotations where appropriate. + +### Fixed + +* `Assert::endsWith()` would not give the correct result when dealing with a multibyte suffix. +* `Assert::length(), minLength, maxLength, lengthBetween` would not give the correct result when dealing with multibyte characters. + +**NOTE**: These 2 changes may break your assertions if you relied on the fact that multibyte characters didn't behave correctly. + +### Changed + +* The names of some variables have been updated to better reflect what they are. +* All function calls are now in their FQN form, slightly increasing performance. +* Tests are now properly ran against HHVM-3.30 and PHP nightly. + +### Deprecation + +* deprecated `Assert::isTraversable()` in favor of `Assert::isIterable()` + * This was already done in 1.3.0, but it was only done through a silenced `trigger_error`. It is now annotated as well. + +## 1.4.0 (2018-12-25) + +### Added + +* added `Assert::ip()` +* added `Assert::ipv4()` +* added `Assert::ipv6()` +* added `Assert::notRegex()` +* added `Assert::interfaceExists()` +* added `Assert::isList()` +* added `Assert::isMap()` +* added polyfill for ctype + +### Fixed + +* Special case when comparing objects implementing `__toString()` + +## 1.3.0 (2018-01-29) + +### Added + +* added `Assert::minCount()` +* added `Assert::maxCount()` +* added `Assert::countBetween()` +* added `Assert::isCountable()` +* added `Assert::notWhitespaceOnly()` +* added `Assert::natural()` +* added `Assert::notContains()` +* added `Assert::isArrayAccessible()` +* added `Assert::isInstanceOfAny()` +* added `Assert::isIterable()` + +### Fixed + +* `stringNotEmpty` will no longer report "0" is an empty string + +### Deprecation + +* deprecated `Assert::isTraversable()` in favor of `Assert::isIterable()` + +## 1.2.0 (2016-11-23) + + * added `Assert::throws()` + * added `Assert::count()` + * added extension point `Assert::reportInvalidArgument()` for custom subclasses + +## 1.1.0 (2016-08-09) + + * added `Assert::object()` + * added `Assert::propertyExists()` + * added `Assert::propertyNotExists()` + * added `Assert::methodExists()` + * added `Assert::methodNotExists()` + * added `Assert::uuid()` + +## 1.0.2 (2015-08-24) + + * integrated Style CI + * add tests for minimum package dependencies on Travis CI + +## 1.0.1 (2015-05-12) + + * added support for PHP 5.3.3 + +## 1.0.0 (2015-05-12) + + * first stable release + +## 1.0.0-beta (2015-03-19) + + * first beta release diff --git a/core/vendor/webmozart/assert/LICENSE b/core/vendor/webmozart/assert/LICENSE new file mode 100644 index 0000000000..9e2e3075eb --- /dev/null +++ b/core/vendor/webmozart/assert/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Bernhard Schussek + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/core/vendor/webmozart/assert/README.md b/core/vendor/webmozart/assert/README.md new file mode 100644 index 0000000000..3b2397a1ab --- /dev/null +++ b/core/vendor/webmozart/assert/README.md @@ -0,0 +1,287 @@ +Webmozart Assert +================ + +[![Latest Stable Version](https://poser.pugx.org/webmozart/assert/v/stable.svg)](https://packagist.org/packages/webmozart/assert) +[![Total Downloads](https://poser.pugx.org/webmozart/assert/downloads.svg)](https://packagist.org/packages/webmozart/assert) + +This library contains efficient assertions to test the input and output of +your methods. With these assertions, you can greatly reduce the amount of coding +needed to write a safe implementation. + +All assertions in the [`Assert`] class throw an `Webmozart\Assert\InvalidArgumentException` if +they fail. + +FAQ +--- + +**What's the difference to [beberlei/assert]?** + +This library is heavily inspired by Benjamin Eberlei's wonderful [assert package], +but fixes a usability issue with error messages that can't be fixed there without +breaking backwards compatibility. + +This package features usable error messages by default. However, you can also +easily write custom error messages: + +``` +Assert::string($path, 'The path is expected to be a string. Got: %s'); +``` + +In [beberlei/assert], the ordering of the `%s` placeholders is different for +every assertion. This package, on the contrary, provides consistent placeholder +ordering for all assertions: + +* `%s`: The tested value as string, e.g. `"/foo/bar"`. +* `%2$s`, `%3$s`, ...: Additional assertion-specific values, e.g. the + minimum/maximum length, allowed values, etc. + +Check the source code of the assertions to find out details about the additional +available placeholders. + +Installation +------------ + +Use [Composer] to install the package: + +```bash +composer require webmozart/assert +``` + +Example +------- + +```php +use Webmozart\Assert\Assert; + +class Employee +{ + public function __construct($id) + { + Assert::integer($id, 'The employee ID must be an integer. Got: %s'); + Assert::greaterThan($id, 0, 'The employee ID must be a positive integer. Got: %s'); + } +} +``` + +If you create an employee with an invalid ID, an exception is thrown: + +```php +new Employee('foobar'); +// => Webmozart\Assert\InvalidArgumentException: +// The employee ID must be an integer. Got: string + +new Employee(-10); +// => Webmozart\Assert\InvalidArgumentException: +// The employee ID must be a positive integer. Got: -10 +``` + +Assertions +---------- + +The [`Assert`] class provides the following assertions: + +### Type Assertions + +Method | Description +-------------------------------------------------------- | -------------------------------------------------- +`string($value, $message = '')` | Check that a value is a string +`stringNotEmpty($value, $message = '')` | Check that a value is a non-empty string +`integer($value, $message = '')` | Check that a value is an integer +`integerish($value, $message = '')` | Check that a value casts to an integer +`positiveInteger($value, $message = '')` | Check that a value is a positive (non-zero) integer +`float($value, $message = '')` | Check that a value is a float +`numeric($value, $message = '')` | Check that a value is numeric +`natural($value, $message= ''')` | Check that a value is a non-negative integer +`boolean($value, $message = '')` | Check that a value is a boolean +`scalar($value, $message = '')` | Check that a value is a scalar +`object($value, $message = '')` | Check that a value is an object +`resource($value, $type = null, $message = '')` | Check that a value is a resource +`isCallable($value, $message = '')` | Check that a value is a callable +`isArray($value, $message = '')` | Check that a value is an array +`isTraversable($value, $message = '')` (deprecated) | Check that a value is an array or a `\Traversable` +`isIterable($value, $message = '')` | Check that a value is an array or a `\Traversable` +`isCountable($value, $message = '')` | Check that a value is an array or a `\Countable` +`isInstanceOf($value, $class, $message = '')` | Check that a value is an `instanceof` a class +`isInstanceOfAny($value, array $classes, $message = '')` | Check that a value is an `instanceof` at least one class on the array of classes +`notInstanceOf($value, $class, $message = '')` | Check that a value is not an `instanceof` a class +`isAOf($value, $class, $message = '')` | Check that a value is of the class or has one of its parents +`isAnyOf($value, array $classes, $message = '')` | Check that a value is of at least one of the classes or has one of its parents +`isNotA($value, $class, $message = '')` | Check that a value is not of the class or has not one of its parents +`isArrayAccessible($value, $message = '')` | Check that a value can be accessed as an array +`uniqueValues($values, $message = '')` | Check that the given array contains unique values + +### Comparison Assertions + +Method | Description +----------------------------------------------- | ------------------------------------------------------------------ +`true($value, $message = '')` | Check that a value is `true` +`false($value, $message = '')` | Check that a value is `false` +`notFalse($value, $message = '')` | Check that a value is not `false` +`null($value, $message = '')` | Check that a value is `null` +`notNull($value, $message = '')` | Check that a value is not `null` +`isEmpty($value, $message = '')` | Check that a value is `empty()` +`notEmpty($value, $message = '')` | Check that a value is not `empty()` +`eq($value, $value2, $message = '')` | Check that a value equals another (`==`) +`notEq($value, $value2, $message = '')` | Check that a value does not equal another (`!=`) +`same($value, $value2, $message = '')` | Check that a value is identical to another (`===`) +`notSame($value, $value2, $message = '')` | Check that a value is not identical to another (`!==`) +`greaterThan($value, $value2, $message = '')` | Check that a value is greater than another +`greaterThanEq($value, $value2, $message = '')` | Check that a value is greater than or equal to another +`lessThan($value, $value2, $message = '')` | Check that a value is less than another +`lessThanEq($value, $value2, $message = '')` | Check that a value is less than or equal to another +`range($value, $min, $max, $message = '')` | Check that a value is within a range +`inArray($value, array $values, $message = '')` | Check that a value is one of a list of values +`oneOf($value, array $values, $message = '')` | Check that a value is one of a list of values (alias of `inArray`) + +### String Assertions + +You should check that a value is a string with `Assert::string()` before making +any of the following assertions. + +Method | Description +--------------------------------------------------- | ----------------------------------------------------------------- +`contains($value, $subString, $message = '')` | Check that a string contains a substring +`notContains($value, $subString, $message = '')` | Check that a string does not contain a substring +`startsWith($value, $prefix, $message = '')` | Check that a string has a prefix +`notStartsWith($value, $prefix, $message = '')` | Check that a string does not have a prefix +`startsWithLetter($value, $message = '')` | Check that a string starts with a letter +`endsWith($value, $suffix, $message = '')` | Check that a string has a suffix +`notEndsWith($value, $suffix, $message = '')` | Check that a string does not have a suffix +`regex($value, $pattern, $message = '')` | Check that a string matches a regular expression +`notRegex($value, $pattern, $message = '')` | Check that a string does not match a regular expression +`unicodeLetters($value, $message = '')` | Check that a string contains Unicode letters only +`alpha($value, $message = '')` | Check that a string contains letters only +`digits($value, $message = '')` | Check that a string contains digits only +`alnum($value, $message = '')` | Check that a string contains letters and digits only +`lower($value, $message = '')` | Check that a string contains lowercase characters only +`upper($value, $message = '')` | Check that a string contains uppercase characters only +`length($value, $length, $message = '')` | Check that a string has a certain number of characters +`minLength($value, $min, $message = '')` | Check that a string has at least a certain number of characters +`maxLength($value, $max, $message = '')` | Check that a string has at most a certain number of characters +`lengthBetween($value, $min, $max, $message = '')` | Check that a string has a length in the given range +`uuid($value, $message = '')` | Check that a string is a valid UUID +`ip($value, $message = '')` | Check that a string is a valid IP (either IPv4 or IPv6) +`ipv4($value, $message = '')` | Check that a string is a valid IPv4 +`ipv6($value, $message = '')` | Check that a string is a valid IPv6 +`email($value, $message = '')` | Check that a string is a valid e-mail address +`notWhitespaceOnly($value, $message = '')` | Check that a string contains at least one non-whitespace character + +### File Assertions + +Method | Description +----------------------------------- | -------------------------------------------------- +`fileExists($value, $message = '')` | Check that a value is an existing path +`file($value, $message = '')` | Check that a value is an existing file +`directory($value, $message = '')` | Check that a value is an existing directory +`readable($value, $message = '')` | Check that a value is a readable path +`writable($value, $message = '')` | Check that a value is a writable path + +### Object Assertions + +Method | Description +----------------------------------------------------- | -------------------------------------------------- +`classExists($value, $message = '')` | Check that a value is an existing class name +`subclassOf($value, $class, $message = '')` | Check that a class is a subclass of another +`interfaceExists($value, $message = '')` | Check that a value is an existing interface name +`implementsInterface($value, $class, $message = '')` | Check that a class implements an interface +`propertyExists($value, $property, $message = '')` | Check that a property exists in a class/object +`propertyNotExists($value, $property, $message = '')` | Check that a property does not exist in a class/object +`methodExists($value, $method, $message = '')` | Check that a method exists in a class/object +`methodNotExists($value, $method, $message = '')` | Check that a method does not exist in a class/object + +### Array Assertions + +Method | Description +-------------------------------------------------- | ------------------------------------------------------------------ +`keyExists($array, $key, $message = '')` | Check that a key exists in an array +`keyNotExists($array, $key, $message = '')` | Check that a key does not exist in an array +`validArrayKey($key, $message = '')` | Check that a value is a valid array key (int or string) +`count($array, $number, $message = '')` | Check that an array contains a specific number of elements +`minCount($array, $min, $message = '')` | Check that an array contains at least a certain number of elements +`maxCount($array, $max, $message = '')` | Check that an array contains at most a certain number of elements +`countBetween($array, $min, $max, $message = '')` | Check that an array has a count in the given range +`isList($array, $message = '')` | Check that an array is a non-associative list +`isNonEmptyList($array, $message = '')` | Check that an array is a non-associative list, and not empty +`isMap($array, $message = '')` | Check that an array is associative and has strings as keys +`isNonEmptyMap($array, $message = '')` | Check that an array is associative and has strings as keys, and is not empty + +### Function Assertions + +Method | Description +------------------------------------------- | ----------------------------------------------------------------------------------------------------- +`throws($closure, $class, $message = '')` | Check that a function throws a certain exception. Subclasses of the exception class will be accepted. + +### Collection Assertions + +All of the above assertions can be prefixed with `all*()` to test the contents +of an array or a `\Traversable`: + +```php +Assert::allIsInstanceOf($employees, 'Acme\Employee'); +``` + +### Nullable Assertions + +All of the above assertions can be prefixed with `nullOr*()` to run the +assertion only if it the value is not `null`: + +```php +Assert::nullOrString($middleName, 'The middle name must be a string or null. Got: %s'); +``` + +### Extending Assert + +The `Assert` class comes with a few methods, which can be overridden to change the class behaviour. You can also extend it to +add your own assertions. + +#### Overriding methods + +Overriding the following methods in your assertion class allows you to change the behaviour of the assertions: + +* `public static function __callStatic($name, $arguments)` + * This method is used to 'create' the `nullOr` and `all` versions of the assertions. +* `protected static function valueToString($value)` + * This method is used for error messages, to convert the value to a string value for displaying. You could use this for representing a value object with a `__toString` method for example. +* `protected static function typeToString($value)` + * This method is used for error messages, to convert the a value to a string representing its type. +* `protected static function strlen($value)` + * This method is used to calculate string length for relevant methods, using the `mb_strlen` if available and useful. +* `protected static function reportInvalidArgument($message)` + * This method is called when an assertion fails, with the specified error message. Here you can throw your own exception, or log something. + +## Static analysis support + +Where applicable, assertion functions are annotated to support Psalm's +[Assertion syntax](https://psalm.dev/docs/annotating_code/assertion_syntax/). +A dedicated [PHPStan Plugin](https://github.com/phpstan/phpstan-webmozart-assert) is +required for proper type support. + +Authors +------- + +* [Bernhard Schussek] a.k.a. [@webmozart] +* [The Community Contributors] + +Contribute +---------- + +Contributions to the package are always welcome! + +* Report any bugs or issues you find on the [issue tracker]. +* You can grab the source code at the package's [Git repository]. + +License +------- + +All contents of this package are licensed under the [MIT license]. + +[beberlei/assert]: https://github.com/beberlei/assert +[assert package]: https://github.com/beberlei/assert +[Composer]: https://getcomposer.org +[Bernhard Schussek]: https://webmozarts.com +[The Community Contributors]: https://github.com/webmozart/assert/graphs/contributors +[issue tracker]: https://github.com/webmozart/assert/issues +[Git repository]: https://github.com/webmozart/assert +[@webmozart]: https://twitter.com/webmozart +[MIT license]: LICENSE +[`Assert`]: src/Assert.php diff --git a/core/vendor/webmozart/assert/composer.json b/core/vendor/webmozart/assert/composer.json new file mode 100644 index 0000000000..b340452c7f --- /dev/null +++ b/core/vendor/webmozart/assert/composer.json @@ -0,0 +1,43 @@ +{ + "name": "webmozart/assert", + "description": "Assertions to validate method input/output with nice error messages.", + "license": "MIT", + "keywords": [ + "assert", + "check", + "validate" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "require": { + "php": "^7.2 || ^8.0", + "ext-ctype": "*" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Webmozart\\Assert\\Tests\\": "tests/", + "Webmozart\\Assert\\Bin\\": "bin/src" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + } +} diff --git a/core/vendor/webmozart/assert/src/Assert.php b/core/vendor/webmozart/assert/src/Assert.php new file mode 100644 index 0000000000..db1f3a51a3 --- /dev/null +++ b/core/vendor/webmozart/assert/src/Assert.php @@ -0,0 +1,2080 @@ +<?php + +/* + * This file is part of the webmozart/assert package. + * + * (c) Bernhard Schussek <bschussek@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Webmozart\Assert; + +use ArrayAccess; +use BadMethodCallException; +use Closure; +use Countable; +use DateTime; +use DateTimeImmutable; +use Exception; +use ResourceBundle; +use SimpleXMLElement; +use Throwable; +use Traversable; + +/** + * Efficient assertions to validate the input/output of your methods. + * + * @since 1.0 + * + * @author Bernhard Schussek <bschussek@gmail.com> + */ +class Assert +{ + use Mixin; + + /** + * @psalm-pure + * @psalm-assert string $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function string($value, $message = '') + { + if (!\is_string($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a string. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert non-empty-string $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function stringNotEmpty($value, $message = '') + { + static::string($value, $message); + static::notEq($value, '', $message); + } + + /** + * @psalm-pure + * @psalm-assert int $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function integer($value, $message = '') + { + if (!\is_int($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an integer. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert numeric $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function integerish($value, $message = '') + { + if (!\is_numeric($value) || $value != (int) $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an integerish value. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert positive-int $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function positiveInteger($value, $message = '') + { + if (!(\is_int($value) && $value > 0)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a positive integer. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert float $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function float($value, $message = '') + { + if (!\is_float($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a float. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert numeric $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function numeric($value, $message = '') + { + if (!\is_numeric($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a numeric. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert positive-int|0 $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function natural($value, $message = '') + { + if (!\is_int($value) || $value < 0) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a non-negative integer. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert bool $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function boolean($value, $message = '') + { + if (!\is_bool($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a boolean. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert scalar $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function scalar($value, $message = '') + { + if (!\is_scalar($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a scalar. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert object $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function object($value, $message = '') + { + if (!\is_object($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an object. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert resource $value + * + * @param mixed $value + * @param string|null $type type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function resource($value, $type = null, $message = '') + { + if (!\is_resource($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a resource. Got: %s', + static::typeToString($value) + )); + } + + if ($type && $type !== \get_resource_type($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a resource of type %2$s. Got: %s', + static::typeToString($value), + $type + )); + } + } + + /** + * @psalm-pure + * @psalm-assert callable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isCallable($value, $message = '') + { + if (!\is_callable($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a callable. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert array $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isArray($value, $message = '') + { + if (!\is_array($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @deprecated use "isIterable" or "isInstanceOf" instead + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isTraversable($value, $message = '') + { + @\trigger_error( + \sprintf( + 'The "%s" assertion is deprecated. You should stop using it, as it will soon be removed in 2.0 version. Use "isIterable" or "isInstanceOf" instead.', + __METHOD__ + ), + \E_USER_DEPRECATED + ); + + if (!\is_array($value) && !($value instanceof Traversable)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a traversable. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert array|ArrayAccess $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isArrayAccessible($value, $message = '') + { + if (!\is_array($value) && !($value instanceof ArrayAccess)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array accessible. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert countable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isCountable($value, $message = '') + { + if ( + !\is_array($value) + && !($value instanceof Countable) + && !($value instanceof ResourceBundle) + && !($value instanceof SimpleXMLElement) + ) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a countable. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isIterable($value, $message = '') + { + if (!\is_array($value) && !($value instanceof Traversable)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an iterable. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert ExpectedType $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isInstanceOf($value, $class, $message = '') + { + if (!($value instanceof $class)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an instance of %2$s. Got: %s', + static::typeToString($value), + $class + )); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert !ExpectedType $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notInstanceOf($value, $class, $message = '') + { + if ($value instanceof $class) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an instance other than %2$s. Got: %s', + static::typeToString($value), + $class + )); + } + } + + /** + * @psalm-pure + * @psalm-param array<class-string> $classes + * + * @param mixed $value + * @param array<object|string> $classes + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isInstanceOfAny($value, array $classes, $message = '') + { + foreach ($classes as $class) { + if ($value instanceof $class) { + return; + } + } + + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an instance of any of %2$s. Got: %s', + static::typeToString($value), + \implode(', ', \array_map(array(static::class, 'valueToString'), $classes)) + )); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert ExpectedType|class-string<ExpectedType> $value + * + * @param object|string $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isAOf($value, $class, $message = '') + { + static::string($class, 'Expected class as a string. Got: %s'); + + if (!\is_a($value, $class, \is_string($value))) { + static::reportInvalidArgument(sprintf( + $message ?: 'Expected an instance of this class or to this class among its parents "%2$s". Got: %s', + static::valueToString($value), + $class + )); + } + } + + /** + * @psalm-pure + * @psalm-template UnexpectedType of object + * @psalm-param class-string<UnexpectedType> $class + * @psalm-assert !UnexpectedType $value + * @psalm-assert !class-string<UnexpectedType> $value + * + * @param object|string $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isNotA($value, $class, $message = '') + { + static::string($class, 'Expected class as a string. Got: %s'); + + if (\is_a($value, $class, \is_string($value))) { + static::reportInvalidArgument(sprintf( + $message ?: 'Expected an instance of this class or to this class among its parents other than "%2$s". Got: %s', + static::valueToString($value), + $class + )); + } + } + + /** + * @psalm-pure + * @psalm-param array<class-string> $classes + * + * @param object|string $value + * @param string[] $classes + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isAnyOf($value, array $classes, $message = '') + { + foreach ($classes as $class) { + static::string($class, 'Expected class as a string. Got: %s'); + + if (\is_a($value, $class, \is_string($value))) { + return; + } + } + + static::reportInvalidArgument(sprintf( + $message ?: 'Expected an instance of any of this classes or any of those classes among their parents "%2$s". Got: %s', + static::valueToString($value), + \implode(', ', $classes) + )); + } + + /** + * @psalm-pure + * @psalm-assert empty $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isEmpty($value, $message = '') + { + if (!empty($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an empty value. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert !empty $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notEmpty($value, $message = '') + { + if (empty($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a non-empty value. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function null($value, $message = '') + { + if (null !== $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected null. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert !null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notNull($value, $message = '') + { + if (null === $value) { + static::reportInvalidArgument( + $message ?: 'Expected a value other than null.' + ); + } + } + + /** + * @psalm-pure + * @psalm-assert true $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function true($value, $message = '') + { + if (true !== $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be true. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert false $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function false($value, $message = '') + { + if (false !== $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be false. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert !false $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notFalse($value, $message = '') + { + if (false === $value) { + static::reportInvalidArgument( + $message ?: 'Expected a value other than false.' + ); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function ip($value, $message = '') + { + if (false === \filter_var($value, \FILTER_VALIDATE_IP)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be an IP. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function ipv4($value, $message = '') + { + if (false === \filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be an IPv4. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function ipv6($value, $message = '') + { + if (false === \filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be an IPv6. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function email($value, $message = '') + { + if (false === \filter_var($value, FILTER_VALIDATE_EMAIL)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be a valid e-mail address. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * Does non strict comparisons on the items, so ['3', 3] will not pass the assertion. + * + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function uniqueValues(array $values, $message = '') + { + $allValues = \count($values); + $uniqueValues = \count(\array_unique($values)); + + if ($allValues !== $uniqueValues) { + $difference = $allValues - $uniqueValues; + + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array of unique values, but %s of them %s duplicated', + $difference, + (1 === $difference ? 'is' : 'are') + )); + } + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function eq($value, $expect, $message = '') + { + if ($expect != $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value equal to %2$s. Got: %s', + static::valueToString($value), + static::valueToString($expect) + )); + } + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notEq($value, $expect, $message = '') + { + if ($expect == $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a different value than %s.', + static::valueToString($expect) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function same($value, $expect, $message = '') + { + if ($expect !== $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value identical to %2$s. Got: %s', + static::valueToString($value), + static::valueToString($expect) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notSame($value, $expect, $message = '') + { + if ($expect === $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value not identical to %s.', + static::valueToString($expect) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function greaterThan($value, $limit, $message = '') + { + if ($value <= $limit) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value greater than %2$s. Got: %s', + static::valueToString($value), + static::valueToString($limit) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function greaterThanEq($value, $limit, $message = '') + { + if ($value < $limit) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value greater than or equal to %2$s. Got: %s', + static::valueToString($value), + static::valueToString($limit) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function lessThan($value, $limit, $message = '') + { + if ($value >= $limit) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value less than %2$s. Got: %s', + static::valueToString($value), + static::valueToString($limit) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function lessThanEq($value, $limit, $message = '') + { + if ($value > $limit) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value less than or equal to %2$s. Got: %s', + static::valueToString($value), + static::valueToString($limit) + )); + } + } + + /** + * Inclusive range, so Assert::(3, 3, 5) passes. + * + * @psalm-pure + * + * @param mixed $value + * @param mixed $min + * @param mixed $max + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function range($value, $min, $max, $message = '') + { + if ($value < $min || $value > $max) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value between %2$s and %3$s. Got: %s', + static::valueToString($value), + static::valueToString($min), + static::valueToString($max) + )); + } + } + + /** + * A more human-readable alias of Assert::inArray(). + * + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function oneOf($value, array $values, $message = '') + { + static::inArray($value, $values, $message); + } + + /** + * Does strict comparison, so Assert::inArray(3, ['3']) does not pass the assertion. + * + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function inArray($value, array $values, $message = '') + { + if (!\in_array($value, $values, true)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected one of: %2$s. Got: %s', + static::valueToString($value), + \implode(', ', \array_map(array(static::class, 'valueToString'), $values)) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function contains($value, $subString, $message = '') + { + if (false === \strpos($value, $subString)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain %2$s. Got: %s', + static::valueToString($value), + static::valueToString($subString) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notContains($value, $subString, $message = '') + { + if (false !== \strpos($value, $subString)) { + static::reportInvalidArgument(\sprintf( + $message ?: '%2$s was not expected to be contained in a value. Got: %s', + static::valueToString($value), + static::valueToString($subString) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notWhitespaceOnly($value, $message = '') + { + if (\preg_match('/^\s*$/', $value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a non-whitespace string. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function startsWith($value, $prefix, $message = '') + { + if (0 !== \strpos($value, $prefix)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to start with %2$s. Got: %s', + static::valueToString($value), + static::valueToString($prefix) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notStartsWith($value, $prefix, $message = '') + { + if (0 === \strpos($value, $prefix)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value not to start with %2$s. Got: %s', + static::valueToString($value), + static::valueToString($prefix) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function startsWithLetter($value, $message = '') + { + static::string($value); + + $valid = isset($value[0]); + + if ($valid) { + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = \ctype_alpha($value[0]); + \setlocale(LC_CTYPE, $locale); + } + + if (!$valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to start with a letter. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function endsWith($value, $suffix, $message = '') + { + if ($suffix !== \substr($value, -\strlen($suffix))) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to end with %2$s. Got: %s', + static::valueToString($value), + static::valueToString($suffix) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notEndsWith($value, $suffix, $message = '') + { + if ($suffix === \substr($value, -\strlen($suffix))) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value not to end with %2$s. Got: %s', + static::valueToString($value), + static::valueToString($suffix) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function regex($value, $pattern, $message = '') + { + if (!\preg_match($pattern, $value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The value %s does not match the expected pattern.', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notRegex($value, $pattern, $message = '') + { + if (\preg_match($pattern, $value, $matches, PREG_OFFSET_CAPTURE)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The value %s matches the pattern %s (at offset %d).', + static::valueToString($value), + static::valueToString($pattern), + $matches[0][1] + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function unicodeLetters($value, $message = '') + { + static::string($value); + + if (!\preg_match('/^\p{L}+$/u', $value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain only Unicode letters. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function alpha($value, $message = '') + { + static::string($value); + + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = !\ctype_alpha($value); + \setlocale(LC_CTYPE, $locale); + + if ($valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain only letters. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function digits($value, $message = '') + { + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = !\ctype_digit($value); + \setlocale(LC_CTYPE, $locale); + + if ($valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain digits only. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function alnum($value, $message = '') + { + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = !\ctype_alnum($value); + \setlocale(LC_CTYPE, $locale); + + if ($valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain letters and digits only. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert lowercase-string $value + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function lower($value, $message = '') + { + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = !\ctype_lower($value); + \setlocale(LC_CTYPE, $locale); + + if ($valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain lowercase characters only. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert !lowercase-string $value + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function upper($value, $message = '') + { + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = !\ctype_upper($value); + \setlocale(LC_CTYPE, $locale); + + if ($valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain uppercase characters only. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param int $length + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function length($value, $length, $message = '') + { + if ($length !== static::strlen($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain %2$s characters. Got: %s', + static::valueToString($value), + $length + )); + } + } + + /** + * Inclusive min. + * + * @psalm-pure + * + * @param string $value + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function minLength($value, $min, $message = '') + { + if (static::strlen($value) < $min) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain at least %2$s characters. Got: %s', + static::valueToString($value), + $min + )); + } + } + + /** + * Inclusive max. + * + * @psalm-pure + * + * @param string $value + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function maxLength($value, $max, $message = '') + { + if (static::strlen($value) > $max) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain at most %2$s characters. Got: %s', + static::valueToString($value), + $max + )); + } + } + + /** + * Inclusive , so Assert::lengthBetween('asd', 3, 5); passes the assertion. + * + * @psalm-pure + * + * @param string $value + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function lengthBetween($value, $min, $max, $message = '') + { + $length = static::strlen($value); + + if ($length < $min || $length > $max) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain between %2$s and %3$s characters. Got: %s', + static::valueToString($value), + $min, + $max + )); + } + } + + /** + * Will also pass if $value is a directory, use Assert::file() instead if you need to be sure it is a file. + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function fileExists($value, $message = '') + { + static::string($value); + + if (!\file_exists($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The file %s does not exist.', + static::valueToString($value) + )); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function file($value, $message = '') + { + static::fileExists($value, $message); + + if (!\is_file($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The path %s is not a file.', + static::valueToString($value) + )); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function directory($value, $message = '') + { + static::fileExists($value, $message); + + if (!\is_dir($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The path %s is no directory.', + static::valueToString($value) + )); + } + } + + /** + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function readable($value, $message = '') + { + if (!\is_readable($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The path %s is not readable.', + static::valueToString($value) + )); + } + } + + /** + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function writable($value, $message = '') + { + if (!\is_writable($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The path %s is not writable.', + static::valueToString($value) + )); + } + } + + /** + * @psalm-assert class-string $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function classExists($value, $message = '') + { + if (!\class_exists($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an existing class name. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert class-string<ExpectedType>|ExpectedType $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function subclassOf($value, $class, $message = '') + { + if (!\is_subclass_of($value, $class)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a sub-class of %2$s. Got: %s', + static::valueToString($value), + static::valueToString($class) + )); + } + } + + /** + * @psalm-assert class-string $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function interfaceExists($value, $message = '') + { + if (!\interface_exists($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an existing interface name. got %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $interface + * @psalm-assert class-string<ExpectedType> $value + * + * @param mixed $value + * @param mixed $interface + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function implementsInterface($value, $interface, $message = '') + { + if (!\in_array($interface, \class_implements($value))) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an implementation of %2$s. Got: %s', + static::valueToString($value), + static::valueToString($interface) + )); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object $classOrObject + * + * @param string|object $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function propertyExists($classOrObject, $property, $message = '') + { + if (!\property_exists($classOrObject, $property)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the property %s to exist.', + static::valueToString($property) + )); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object $classOrObject + * + * @param string|object $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function propertyNotExists($classOrObject, $property, $message = '') + { + if (\property_exists($classOrObject, $property)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the property %s to not exist.', + static::valueToString($property) + )); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object $classOrObject + * + * @param string|object $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function methodExists($classOrObject, $method, $message = '') + { + if (!(\is_string($classOrObject) || \is_object($classOrObject)) || !\method_exists($classOrObject, $method)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the method %s to exist.', + static::valueToString($method) + )); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object $classOrObject + * + * @param string|object $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function methodNotExists($classOrObject, $method, $message = '') + { + if ((\is_string($classOrObject) || \is_object($classOrObject)) && \method_exists($classOrObject, $method)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the method %s to not exist.', + static::valueToString($method) + )); + } + } + + /** + * @psalm-pure + * + * @param array $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function keyExists($array, $key, $message = '') + { + if (!(isset($array[$key]) || \array_key_exists($key, $array))) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the key %s to exist.', + static::valueToString($key) + )); + } + } + + /** + * @psalm-pure + * + * @param array $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function keyNotExists($array, $key, $message = '') + { + if (isset($array[$key]) || \array_key_exists($key, $array)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the key %s to not exist.', + static::valueToString($key) + )); + } + } + + /** + * Checks if a value is a valid array key (int or string). + * + * @psalm-pure + * @psalm-assert array-key $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function validArrayKey($value, $message = '') + { + if (!(\is_int($value) || \is_string($value))) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected string or integer. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * Does not check if $array is countable, this can generate a warning on php versions after 7.2. + * + * @param Countable|array $array + * @param int $number + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function count($array, $number, $message = '') + { + static::eq( + \count($array), + $number, + \sprintf( + $message ?: 'Expected an array to contain %d elements. Got: %d.', + $number, + \count($array) + ) + ); + } + + /** + * Does not check if $array is countable, this can generate a warning on php versions after 7.2. + * + * @param Countable|array $array + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function minCount($array, $min, $message = '') + { + if (\count($array) < $min) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array to contain at least %2$d elements. Got: %d', + \count($array), + $min + )); + } + } + + /** + * Does not check if $array is countable, this can generate a warning on php versions after 7.2. + * + * @param Countable|array $array + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function maxCount($array, $max, $message = '') + { + if (\count($array) > $max) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array to contain at most %2$d elements. Got: %d', + \count($array), + $max + )); + } + } + + /** + * Does not check if $array is countable, this can generate a warning on php versions after 7.2. + * + * @param Countable|array $array + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function countBetween($array, $min, $max, $message = '') + { + $count = \count($array); + + if ($count < $min || $count > $max) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array to contain between %2$d and %3$d elements. Got: %d', + $count, + $min, + $max + )); + } + } + + /** + * @psalm-pure + * @psalm-assert list $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isList($array, $message = '') + { + if (!\is_array($array)) { + static::reportInvalidArgument( + $message ?: 'Expected list - non-associative array.' + ); + } + + if ($array === \array_values($array)) { + return; + } + + $nextKey = -1; + foreach ($array as $k => $v) { + if ($k !== ++$nextKey) { + static::reportInvalidArgument( + $message ?: 'Expected list - non-associative array.' + ); + } + } + } + + /** + * @psalm-pure + * @psalm-assert non-empty-list $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isNonEmptyList($array, $message = '') + { + static::isList($array, $message); + static::notEmpty($array, $message); + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param mixed|array<T> $array + * @psalm-assert array<string, T> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isMap($array, $message = '') + { + if ( + !\is_array($array) || + \array_keys($array) !== \array_filter(\array_keys($array), '\is_string') + ) { + static::reportInvalidArgument( + $message ?: 'Expected map - associative array with string keys.' + ); + } + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param mixed|array<T> $array + * @psalm-assert array<string, T> $array + * @psalm-assert !empty $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isNonEmptyMap($array, $message = '') + { + static::isMap($array, $message); + static::notEmpty($array, $message); + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function uuid($value, $message = '') + { + $value = \str_replace(array('urn:', 'uuid:', '{', '}'), '', $value); + + // The nil UUID is special form of UUID that is specified to have all + // 128 bits set to zero. + if ('00000000-0000-0000-0000-000000000000' === $value) { + return; + } + + if (!\preg_match('/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/', $value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Value %s is not a valid UUID.', + static::valueToString($value) + )); + } + } + + /** + * @psalm-param class-string<Throwable> $class + * + * @param Closure $expression + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function throws(Closure $expression, $class = 'Exception', $message = '') + { + static::string($class); + + $actual = 'none'; + + try { + $expression(); + } catch (Exception $e) { + $actual = \get_class($e); + if ($e instanceof $class) { + return; + } + } catch (Throwable $e) { + $actual = \get_class($e); + if ($e instanceof $class) { + return; + } + } + + static::reportInvalidArgument($message ?: \sprintf( + 'Expected to throw "%s", got "%s"', + $class, + $actual + )); + } + + /** + * @throws BadMethodCallException + */ + public static function __callStatic($name, $arguments) + { + if ('nullOr' === \substr($name, 0, 6)) { + if (null !== $arguments[0]) { + $method = \lcfirst(\substr($name, 6)); + \call_user_func_array(array(static::class, $method), $arguments); + } + + return; + } + + if ('all' === \substr($name, 0, 3)) { + static::isIterable($arguments[0]); + + $method = \lcfirst(\substr($name, 3)); + $args = $arguments; + + foreach ($arguments[0] as $entry) { + $args[0] = $entry; + + \call_user_func_array(array(static::class, $method), $args); + } + + return; + } + + throw new BadMethodCallException('No such method: '.$name); + } + + /** + * @param mixed $value + * + * @return string + */ + protected static function valueToString($value) + { + if (null === $value) { + return 'null'; + } + + if (true === $value) { + return 'true'; + } + + if (false === $value) { + return 'false'; + } + + if (\is_array($value)) { + return 'array'; + } + + if (\is_object($value)) { + if (\method_exists($value, '__toString')) { + return \get_class($value).': '.self::valueToString($value->__toString()); + } + + if ($value instanceof DateTime || $value instanceof DateTimeImmutable) { + return \get_class($value).': '.self::valueToString($value->format('c')); + } + + return \get_class($value); + } + + if (\is_resource($value)) { + return 'resource'; + } + + if (\is_string($value)) { + return '"'.$value.'"'; + } + + return (string) $value; + } + + /** + * @param mixed $value + * + * @return string + */ + protected static function typeToString($value) + { + return \is_object($value) ? \get_class($value) : \gettype($value); + } + + protected static function strlen($value) + { + if (!\function_exists('mb_detect_encoding')) { + return \strlen($value); + } + + if (false === $encoding = \mb_detect_encoding($value)) { + return \strlen($value); + } + + return \mb_strlen($value, $encoding); + } + + /** + * @param string $message + * + * @throws InvalidArgumentException + * + * @psalm-pure this method is not supposed to perform side-effects + * @psalm-return never + */ + protected static function reportInvalidArgument($message) + { + throw new InvalidArgumentException($message); + } + + private function __construct() + { + } +} diff --git a/core/vendor/webmozart/assert/src/InvalidArgumentException.php b/core/vendor/webmozart/assert/src/InvalidArgumentException.php new file mode 100644 index 0000000000..9d95a58c50 --- /dev/null +++ b/core/vendor/webmozart/assert/src/InvalidArgumentException.php @@ -0,0 +1,16 @@ +<?php + +/* + * This file is part of the webmozart/assert package. + * + * (c) Bernhard Schussek <bschussek@gmail.com> + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Webmozart\Assert; + +class InvalidArgumentException extends \InvalidArgumentException +{ +} diff --git a/core/vendor/webmozart/assert/src/Mixin.php b/core/vendor/webmozart/assert/src/Mixin.php new file mode 100644 index 0000000000..0f0a75e330 --- /dev/null +++ b/core/vendor/webmozart/assert/src/Mixin.php @@ -0,0 +1,5089 @@ +<?php + +namespace Webmozart\Assert; + +use ArrayAccess; +use Closure; +use Countable; +use Throwable; + +/** + * This trait provides nurllOr*, all* and allNullOr* variants of assertion base methods. + * Do not use this trait directly: it will change, and is not designed for reuse. + */ +trait Mixin +{ + /** + * @psalm-pure + * @psalm-assert string|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrString($value, $message = '') + { + null === $value || static::string($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<string> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allString($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::string($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<string|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrString($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::string($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert non-empty-string|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrStringNotEmpty($value, $message = '') + { + null === $value || static::stringNotEmpty($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<non-empty-string> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allStringNotEmpty($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::stringNotEmpty($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<non-empty-string|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrStringNotEmpty($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::stringNotEmpty($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert int|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrInteger($value, $message = '') + { + null === $value || static::integer($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<int> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allInteger($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::integer($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<int|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrInteger($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::integer($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert numeric|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIntegerish($value, $message = '') + { + null === $value || static::integerish($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<numeric> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIntegerish($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::integerish($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<numeric|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIntegerish($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::integerish($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert positive-int|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrPositiveInteger($value, $message = '') + { + null === $value || static::positiveInteger($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<positive-int> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allPositiveInteger($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::positiveInteger($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<positive-int|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrPositiveInteger($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::positiveInteger($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert float|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrFloat($value, $message = '') + { + null === $value || static::float($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<float> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allFloat($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::float($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<float|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrFloat($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::float($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert numeric|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNumeric($value, $message = '') + { + null === $value || static::numeric($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<numeric> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNumeric($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::numeric($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<numeric|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNumeric($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::numeric($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert positive-int|0|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNatural($value, $message = '') + { + null === $value || static::natural($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<positive-int|0> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNatural($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::natural($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<positive-int|0|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNatural($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::natural($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert bool|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrBoolean($value, $message = '') + { + null === $value || static::boolean($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<bool> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allBoolean($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::boolean($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<bool|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrBoolean($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::boolean($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert scalar|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrScalar($value, $message = '') + { + null === $value || static::scalar($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<scalar> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allScalar($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::scalar($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<scalar|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrScalar($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::scalar($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert object|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrObject($value, $message = '') + { + null === $value || static::object($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<object> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allObject($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::object($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<object|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrObject($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::object($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert resource|null $value + * + * @param mixed $value + * @param string|null $type type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrResource($value, $type = null, $message = '') + { + null === $value || static::resource($value, $type, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<resource> $value + * + * @param mixed $value + * @param string|null $type type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allResource($value, $type = null, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::resource($entry, $type, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<resource|null> $value + * + * @param mixed $value + * @param string|null $type type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrResource($value, $type = null, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::resource($entry, $type, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert callable|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsCallable($value, $message = '') + { + null === $value || static::isCallable($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<callable> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsCallable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isCallable($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<callable|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsCallable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isCallable($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert array|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsArray($value, $message = '') + { + null === $value || static::isArray($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<array> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsArray($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isArray($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<array|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsArray($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isArray($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable|null $value + * + * @deprecated use "isIterable" or "isInstanceOf" instead + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsTraversable($value, $message = '') + { + null === $value || static::isTraversable($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<iterable> $value + * + * @deprecated use "isIterable" or "isInstanceOf" instead + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsTraversable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isTraversable($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<iterable|null> $value + * + * @deprecated use "isIterable" or "isInstanceOf" instead + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsTraversable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isTraversable($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert array|ArrayAccess|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsArrayAccessible($value, $message = '') + { + null === $value || static::isArrayAccessible($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<array|ArrayAccess> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsArrayAccessible($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isArrayAccessible($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<array|ArrayAccess|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsArrayAccessible($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isArrayAccessible($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert countable|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsCountable($value, $message = '') + { + null === $value || static::isCountable($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<countable> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsCountable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isCountable($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<countable|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsCountable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isCountable($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsIterable($value, $message = '') + { + null === $value || static::isIterable($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<iterable> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsIterable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isIterable($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<iterable|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsIterable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isIterable($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert ExpectedType|null $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsInstanceOf($value, $class, $message = '') + { + null === $value || static::isInstanceOf($value, $class, $message); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert iterable<ExpectedType> $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsInstanceOf($value, $class, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isInstanceOf($entry, $class, $message); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert iterable<ExpectedType|null> $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsInstanceOf($value, $class, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isInstanceOf($entry, $class, $message); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotInstanceOf($value, $class, $message = '') + { + null === $value || static::notInstanceOf($value, $class, $message); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotInstanceOf($value, $class, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notInstanceOf($entry, $class, $message); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert iterable<!ExpectedType|null> $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNotInstanceOf($value, $class, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::notInstanceOf($entry, $class, $message); + } + } + + /** + * @psalm-pure + * @psalm-param array<class-string> $classes + * + * @param mixed $value + * @param array<object|string> $classes + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsInstanceOfAny($value, $classes, $message = '') + { + null === $value || static::isInstanceOfAny($value, $classes, $message); + } + + /** + * @psalm-pure + * @psalm-param array<class-string> $classes + * + * @param mixed $value + * @param array<object|string> $classes + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsInstanceOfAny($value, $classes, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isInstanceOfAny($entry, $classes, $message); + } + } + + /** + * @psalm-pure + * @psalm-param array<class-string> $classes + * + * @param mixed $value + * @param array<object|string> $classes + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsInstanceOfAny($value, $classes, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isInstanceOfAny($entry, $classes, $message); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert ExpectedType|class-string<ExpectedType>|null $value + * + * @param object|string|null $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsAOf($value, $class, $message = '') + { + null === $value || static::isAOf($value, $class, $message); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert iterable<ExpectedType|class-string<ExpectedType>> $value + * + * @param iterable<object|string> $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsAOf($value, $class, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isAOf($entry, $class, $message); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert iterable<ExpectedType|class-string<ExpectedType>|null> $value + * + * @param iterable<object|string|null> $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsAOf($value, $class, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isAOf($entry, $class, $message); + } + } + + /** + * @psalm-pure + * @psalm-template UnexpectedType of object + * @psalm-param class-string<UnexpectedType> $class + * + * @param object|string|null $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsNotA($value, $class, $message = '') + { + null === $value || static::isNotA($value, $class, $message); + } + + /** + * @psalm-pure + * @psalm-template UnexpectedType of object + * @psalm-param class-string<UnexpectedType> $class + * + * @param iterable<object|string> $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsNotA($value, $class, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isNotA($entry, $class, $message); + } + } + + /** + * @psalm-pure + * @psalm-template UnexpectedType of object + * @psalm-param class-string<UnexpectedType> $class + * @psalm-assert iterable<!UnexpectedType|null> $value + * @psalm-assert iterable<!class-string<UnexpectedType>|null> $value + * + * @param iterable<object|string|null> $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsNotA($value, $class, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isNotA($entry, $class, $message); + } + } + + /** + * @psalm-pure + * @psalm-param array<class-string> $classes + * + * @param object|string|null $value + * @param string[] $classes + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsAnyOf($value, $classes, $message = '') + { + null === $value || static::isAnyOf($value, $classes, $message); + } + + /** + * @psalm-pure + * @psalm-param array<class-string> $classes + * + * @param iterable<object|string> $value + * @param string[] $classes + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsAnyOf($value, $classes, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isAnyOf($entry, $classes, $message); + } + } + + /** + * @psalm-pure + * @psalm-param array<class-string> $classes + * + * @param iterable<object|string|null> $value + * @param string[] $classes + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsAnyOf($value, $classes, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isAnyOf($entry, $classes, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert empty $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsEmpty($value, $message = '') + { + null === $value || static::isEmpty($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<empty> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsEmpty($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::isEmpty($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<empty|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsEmpty($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::isEmpty($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotEmpty($value, $message = '') + { + null === $value || static::notEmpty($value, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotEmpty($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notEmpty($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<!empty|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNotEmpty($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::notEmpty($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNull($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::null($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotNull($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notNull($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert true|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrTrue($value, $message = '') + { + null === $value || static::true($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<true> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allTrue($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::true($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<true|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrTrue($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::true($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert false|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrFalse($value, $message = '') + { + null === $value || static::false($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<false> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allFalse($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::false($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<false|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrFalse($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::false($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotFalse($value, $message = '') + { + null === $value || static::notFalse($value, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotFalse($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notFalse($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<!false|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNotFalse($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::notFalse($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIp($value, $message = '') + { + null === $value || static::ip($value, $message); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIp($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::ip($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIp($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::ip($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIpv4($value, $message = '') + { + null === $value || static::ipv4($value, $message); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIpv4($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::ipv4($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIpv4($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::ipv4($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIpv6($value, $message = '') + { + null === $value || static::ipv6($value, $message); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIpv6($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::ipv6($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIpv6($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::ipv6($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrEmail($value, $message = '') + { + null === $value || static::email($value, $message); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allEmail($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::email($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrEmail($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::email($entry, $message); + } + } + + /** + * @param array|null $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrUniqueValues($values, $message = '') + { + null === $values || static::uniqueValues($values, $message); + } + + /** + * @param iterable<array> $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allUniqueValues($values, $message = '') + { + static::isIterable($values); + + foreach ($values as $entry) { + static::uniqueValues($entry, $message); + } + } + + /** + * @param iterable<array|null> $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrUniqueValues($values, $message = '') + { + static::isIterable($values); + + foreach ($values as $entry) { + null === $entry || static::uniqueValues($entry, $message); + } + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrEq($value, $expect, $message = '') + { + null === $value || static::eq($value, $expect, $message); + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allEq($value, $expect, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::eq($entry, $expect, $message); + } + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrEq($value, $expect, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::eq($entry, $expect, $message); + } + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotEq($value, $expect, $message = '') + { + null === $value || static::notEq($value, $expect, $message); + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotEq($value, $expect, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notEq($entry, $expect, $message); + } + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNotEq($value, $expect, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::notEq($entry, $expect, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrSame($value, $expect, $message = '') + { + null === $value || static::same($value, $expect, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allSame($value, $expect, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::same($entry, $expect, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrSame($value, $expect, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::same($entry, $expect, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotSame($value, $expect, $message = '') + { + null === $value || static::notSame($value, $expect, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotSame($value, $expect, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notSame($entry, $expect, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNotSame($value, $expect, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::notSame($entry, $expect, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrGreaterThan($value, $limit, $message = '') + { + null === $value || static::greaterThan($value, $limit, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allGreaterThan($value, $limit, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::greaterThan($entry, $limit, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrGreaterThan($value, $limit, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::greaterThan($entry, $limit, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrGreaterThanEq($value, $limit, $message = '') + { + null === $value || static::greaterThanEq($value, $limit, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allGreaterThanEq($value, $limit, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::greaterThanEq($entry, $limit, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrGreaterThanEq($value, $limit, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::greaterThanEq($entry, $limit, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrLessThan($value, $limit, $message = '') + { + null === $value || static::lessThan($value, $limit, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allLessThan($value, $limit, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::lessThan($entry, $limit, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrLessThan($value, $limit, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::lessThan($entry, $limit, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrLessThanEq($value, $limit, $message = '') + { + null === $value || static::lessThanEq($value, $limit, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allLessThanEq($value, $limit, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::lessThanEq($entry, $limit, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrLessThanEq($value, $limit, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::lessThanEq($entry, $limit, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $min + * @param mixed $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrRange($value, $min, $max, $message = '') + { + null === $value || static::range($value, $min, $max, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $min + * @param mixed $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allRange($value, $min, $max, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::range($entry, $min, $max, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $min + * @param mixed $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrRange($value, $min, $max, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::range($entry, $min, $max, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrOneOf($value, $values, $message = '') + { + null === $value || static::oneOf($value, $values, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allOneOf($value, $values, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::oneOf($entry, $values, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrOneOf($value, $values, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::oneOf($entry, $values, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrInArray($value, $values, $message = '') + { + null === $value || static::inArray($value, $values, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allInArray($value, $values, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::inArray($entry, $values, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrInArray($value, $values, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::inArray($entry, $values, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrContains($value, $subString, $message = '') + { + null === $value || static::contains($value, $subString, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allContains($value, $subString, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::contains($entry, $subString, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrContains($value, $subString, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::contains($entry, $subString, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotContains($value, $subString, $message = '') + { + null === $value || static::notContains($value, $subString, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotContains($value, $subString, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notContains($entry, $subString, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNotContains($value, $subString, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::notContains($entry, $subString, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotWhitespaceOnly($value, $message = '') + { + null === $value || static::notWhitespaceOnly($value, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotWhitespaceOnly($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notWhitespaceOnly($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNotWhitespaceOnly($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::notWhitespaceOnly($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrStartsWith($value, $prefix, $message = '') + { + null === $value || static::startsWith($value, $prefix, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allStartsWith($value, $prefix, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::startsWith($entry, $prefix, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrStartsWith($value, $prefix, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::startsWith($entry, $prefix, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotStartsWith($value, $prefix, $message = '') + { + null === $value || static::notStartsWith($value, $prefix, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotStartsWith($value, $prefix, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notStartsWith($entry, $prefix, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNotStartsWith($value, $prefix, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::notStartsWith($entry, $prefix, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrStartsWithLetter($value, $message = '') + { + null === $value || static::startsWithLetter($value, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allStartsWithLetter($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::startsWithLetter($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrStartsWithLetter($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::startsWithLetter($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrEndsWith($value, $suffix, $message = '') + { + null === $value || static::endsWith($value, $suffix, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allEndsWith($value, $suffix, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::endsWith($entry, $suffix, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrEndsWith($value, $suffix, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::endsWith($entry, $suffix, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotEndsWith($value, $suffix, $message = '') + { + null === $value || static::notEndsWith($value, $suffix, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotEndsWith($value, $suffix, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notEndsWith($entry, $suffix, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNotEndsWith($value, $suffix, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::notEndsWith($entry, $suffix, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrRegex($value, $pattern, $message = '') + { + null === $value || static::regex($value, $pattern, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allRegex($value, $pattern, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::regex($entry, $pattern, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrRegex($value, $pattern, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::regex($entry, $pattern, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotRegex($value, $pattern, $message = '') + { + null === $value || static::notRegex($value, $pattern, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotRegex($value, $pattern, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::notRegex($entry, $pattern, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrNotRegex($value, $pattern, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::notRegex($entry, $pattern, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrUnicodeLetters($value, $message = '') + { + null === $value || static::unicodeLetters($value, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allUnicodeLetters($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::unicodeLetters($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrUnicodeLetters($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::unicodeLetters($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrAlpha($value, $message = '') + { + null === $value || static::alpha($value, $message); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allAlpha($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::alpha($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrAlpha($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::alpha($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrDigits($value, $message = '') + { + null === $value || static::digits($value, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allDigits($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::digits($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrDigits($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::digits($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrAlnum($value, $message = '') + { + null === $value || static::alnum($value, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allAlnum($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::alnum($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrAlnum($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::alnum($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert lowercase-string|null $value + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrLower($value, $message = '') + { + null === $value || static::lower($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<lowercase-string> $value + * + * @param iterable<string> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allLower($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::lower($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<lowercase-string|null> $value + * + * @param iterable<string|null> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrLower($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::lower($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrUpper($value, $message = '') + { + null === $value || static::upper($value, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allUpper($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::upper($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<!lowercase-string|null> $value + * + * @param iterable<string|null> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrUpper($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::upper($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param int $length + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrLength($value, $length, $message = '') + { + null === $value || static::length($value, $length, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param int $length + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allLength($value, $length, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::length($entry, $length, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param int $length + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrLength($value, $length, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::length($entry, $length, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMinLength($value, $min, $message = '') + { + null === $value || static::minLength($value, $min, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMinLength($value, $min, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::minLength($entry, $min, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrMinLength($value, $min, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::minLength($entry, $min, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMaxLength($value, $max, $message = '') + { + null === $value || static::maxLength($value, $max, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMaxLength($value, $max, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::maxLength($entry, $max, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrMaxLength($value, $max, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::maxLength($entry, $max, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrLengthBetween($value, $min, $max, $message = '') + { + null === $value || static::lengthBetween($value, $min, $max, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allLengthBetween($value, $min, $max, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::lengthBetween($entry, $min, $max, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrLengthBetween($value, $min, $max, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::lengthBetween($entry, $min, $max, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrFileExists($value, $message = '') + { + null === $value || static::fileExists($value, $message); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allFileExists($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::fileExists($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrFileExists($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::fileExists($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrFile($value, $message = '') + { + null === $value || static::file($value, $message); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allFile($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::file($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrFile($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::file($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrDirectory($value, $message = '') + { + null === $value || static::directory($value, $message); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allDirectory($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::directory($entry, $message); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrDirectory($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::directory($entry, $message); + } + } + + /** + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrReadable($value, $message = '') + { + null === $value || static::readable($value, $message); + } + + /** + * @param iterable<string> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allReadable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::readable($entry, $message); + } + } + + /** + * @param iterable<string|null> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrReadable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::readable($entry, $message); + } + } + + /** + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrWritable($value, $message = '') + { + null === $value || static::writable($value, $message); + } + + /** + * @param iterable<string> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allWritable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::writable($entry, $message); + } + } + + /** + * @param iterable<string|null> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrWritable($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::writable($entry, $message); + } + } + + /** + * @psalm-assert class-string|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrClassExists($value, $message = '') + { + null === $value || static::classExists($value, $message); + } + + /** + * @psalm-assert iterable<class-string> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allClassExists($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::classExists($entry, $message); + } + } + + /** + * @psalm-assert iterable<class-string|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrClassExists($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::classExists($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert class-string<ExpectedType>|ExpectedType|null $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrSubclassOf($value, $class, $message = '') + { + null === $value || static::subclassOf($value, $class, $message); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert iterable<class-string<ExpectedType>|ExpectedType> $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allSubclassOf($value, $class, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::subclassOf($entry, $class, $message); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $class + * @psalm-assert iterable<class-string<ExpectedType>|ExpectedType|null> $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrSubclassOf($value, $class, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::subclassOf($entry, $class, $message); + } + } + + /** + * @psalm-assert class-string|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrInterfaceExists($value, $message = '') + { + null === $value || static::interfaceExists($value, $message); + } + + /** + * @psalm-assert iterable<class-string> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allInterfaceExists($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::interfaceExists($entry, $message); + } + } + + /** + * @psalm-assert iterable<class-string|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrInterfaceExists($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::interfaceExists($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $interface + * @psalm-assert class-string<ExpectedType>|null $value + * + * @param mixed $value + * @param mixed $interface + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrImplementsInterface($value, $interface, $message = '') + { + null === $value || static::implementsInterface($value, $interface, $message); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $interface + * @psalm-assert iterable<class-string<ExpectedType>> $value + * + * @param mixed $value + * @param mixed $interface + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allImplementsInterface($value, $interface, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::implementsInterface($entry, $interface, $message); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string<ExpectedType> $interface + * @psalm-assert iterable<class-string<ExpectedType>|null> $value + * + * @param mixed $value + * @param mixed $interface + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrImplementsInterface($value, $interface, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::implementsInterface($entry, $interface, $message); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object|null $classOrObject + * + * @param string|object|null $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrPropertyExists($classOrObject, $property, $message = '') + { + null === $classOrObject || static::propertyExists($classOrObject, $property, $message); + } + + /** + * @psalm-pure + * @psalm-param iterable<class-string|object> $classOrObject + * + * @param iterable<string|object> $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allPropertyExists($classOrObject, $property, $message = '') + { + static::isIterable($classOrObject); + + foreach ($classOrObject as $entry) { + static::propertyExists($entry, $property, $message); + } + } + + /** + * @psalm-pure + * @psalm-param iterable<class-string|object|null> $classOrObject + * + * @param iterable<string|object|null> $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrPropertyExists($classOrObject, $property, $message = '') + { + static::isIterable($classOrObject); + + foreach ($classOrObject as $entry) { + null === $entry || static::propertyExists($entry, $property, $message); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object|null $classOrObject + * + * @param string|object|null $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrPropertyNotExists($classOrObject, $property, $message = '') + { + null === $classOrObject || static::propertyNotExists($classOrObject, $property, $message); + } + + /** + * @psalm-pure + * @psalm-param iterable<class-string|object> $classOrObject + * + * @param iterable<string|object> $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allPropertyNotExists($classOrObject, $property, $message = '') + { + static::isIterable($classOrObject); + + foreach ($classOrObject as $entry) { + static::propertyNotExists($entry, $property, $message); + } + } + + /** + * @psalm-pure + * @psalm-param iterable<class-string|object|null> $classOrObject + * + * @param iterable<string|object|null> $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrPropertyNotExists($classOrObject, $property, $message = '') + { + static::isIterable($classOrObject); + + foreach ($classOrObject as $entry) { + null === $entry || static::propertyNotExists($entry, $property, $message); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object|null $classOrObject + * + * @param string|object|null $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMethodExists($classOrObject, $method, $message = '') + { + null === $classOrObject || static::methodExists($classOrObject, $method, $message); + } + + /** + * @psalm-pure + * @psalm-param iterable<class-string|object> $classOrObject + * + * @param iterable<string|object> $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMethodExists($classOrObject, $method, $message = '') + { + static::isIterable($classOrObject); + + foreach ($classOrObject as $entry) { + static::methodExists($entry, $method, $message); + } + } + + /** + * @psalm-pure + * @psalm-param iterable<class-string|object|null> $classOrObject + * + * @param iterable<string|object|null> $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrMethodExists($classOrObject, $method, $message = '') + { + static::isIterable($classOrObject); + + foreach ($classOrObject as $entry) { + null === $entry || static::methodExists($entry, $method, $message); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object|null $classOrObject + * + * @param string|object|null $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMethodNotExists($classOrObject, $method, $message = '') + { + null === $classOrObject || static::methodNotExists($classOrObject, $method, $message); + } + + /** + * @psalm-pure + * @psalm-param iterable<class-string|object> $classOrObject + * + * @param iterable<string|object> $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMethodNotExists($classOrObject, $method, $message = '') + { + static::isIterable($classOrObject); + + foreach ($classOrObject as $entry) { + static::methodNotExists($entry, $method, $message); + } + } + + /** + * @psalm-pure + * @psalm-param iterable<class-string|object|null> $classOrObject + * + * @param iterable<string|object|null> $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrMethodNotExists($classOrObject, $method, $message = '') + { + static::isIterable($classOrObject); + + foreach ($classOrObject as $entry) { + null === $entry || static::methodNotExists($entry, $method, $message); + } + } + + /** + * @psalm-pure + * + * @param array|null $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrKeyExists($array, $key, $message = '') + { + null === $array || static::keyExists($array, $key, $message); + } + + /** + * @psalm-pure + * + * @param iterable<array> $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allKeyExists($array, $key, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + static::keyExists($entry, $key, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<array|null> $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrKeyExists($array, $key, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + null === $entry || static::keyExists($entry, $key, $message); + } + } + + /** + * @psalm-pure + * + * @param array|null $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrKeyNotExists($array, $key, $message = '') + { + null === $array || static::keyNotExists($array, $key, $message); + } + + /** + * @psalm-pure + * + * @param iterable<array> $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allKeyNotExists($array, $key, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + static::keyNotExists($entry, $key, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<array|null> $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrKeyNotExists($array, $key, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + null === $entry || static::keyNotExists($entry, $key, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert array-key|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrValidArrayKey($value, $message = '') + { + null === $value || static::validArrayKey($value, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<array-key> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allValidArrayKey($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::validArrayKey($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<array-key|null> $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrValidArrayKey($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::validArrayKey($entry, $message); + } + } + + /** + * @param Countable|array|null $array + * @param int $number + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrCount($array, $number, $message = '') + { + null === $array || static::count($array, $number, $message); + } + + /** + * @param iterable<Countable|array> $array + * @param int $number + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allCount($array, $number, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + static::count($entry, $number, $message); + } + } + + /** + * @param iterable<Countable|array|null> $array + * @param int $number + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrCount($array, $number, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + null === $entry || static::count($entry, $number, $message); + } + } + + /** + * @param Countable|array|null $array + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMinCount($array, $min, $message = '') + { + null === $array || static::minCount($array, $min, $message); + } + + /** + * @param iterable<Countable|array> $array + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMinCount($array, $min, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + static::minCount($entry, $min, $message); + } + } + + /** + * @param iterable<Countable|array|null> $array + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrMinCount($array, $min, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + null === $entry || static::minCount($entry, $min, $message); + } + } + + /** + * @param Countable|array|null $array + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMaxCount($array, $max, $message = '') + { + null === $array || static::maxCount($array, $max, $message); + } + + /** + * @param iterable<Countable|array> $array + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMaxCount($array, $max, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + static::maxCount($entry, $max, $message); + } + } + + /** + * @param iterable<Countable|array|null> $array + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrMaxCount($array, $max, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + null === $entry || static::maxCount($entry, $max, $message); + } + } + + /** + * @param Countable|array|null $array + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrCountBetween($array, $min, $max, $message = '') + { + null === $array || static::countBetween($array, $min, $max, $message); + } + + /** + * @param iterable<Countable|array> $array + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allCountBetween($array, $min, $max, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + static::countBetween($entry, $min, $max, $message); + } + } + + /** + * @param iterable<Countable|array|null> $array + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrCountBetween($array, $min, $max, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + null === $entry || static::countBetween($entry, $min, $max, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert list|null $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsList($array, $message = '') + { + null === $array || static::isList($array, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<list> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsList($array, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + static::isList($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<list|null> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsList($array, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + null === $entry || static::isList($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert non-empty-list|null $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsNonEmptyList($array, $message = '') + { + null === $array || static::isNonEmptyList($array, $message); + } + + /** + * @psalm-pure + * @psalm-assert iterable<non-empty-list> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsNonEmptyList($array, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + static::isNonEmptyList($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable<non-empty-list|null> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsNonEmptyList($array, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + null === $entry || static::isNonEmptyList($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param mixed|array<T>|null $array + * @psalm-assert array<string, T>|null $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsMap($array, $message = '') + { + null === $array || static::isMap($array, $message); + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param iterable<mixed|array<T>> $array + * @psalm-assert iterable<array<string, T>> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsMap($array, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + static::isMap($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param iterable<mixed|array<T>|null> $array + * @psalm-assert iterable<array<string, T>|null> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsMap($array, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + null === $entry || static::isMap($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param mixed|array<T>|null $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsNonEmptyMap($array, $message = '') + { + null === $array || static::isNonEmptyMap($array, $message); + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param iterable<mixed|array<T>> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsNonEmptyMap($array, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + static::isNonEmptyMap($entry, $message); + } + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param iterable<mixed|array<T>|null> $array + * @psalm-assert iterable<array<string, T>|null> $array + * @psalm-assert iterable<!empty|null> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrIsNonEmptyMap($array, $message = '') + { + static::isIterable($array); + + foreach ($array as $entry) { + null === $entry || static::isNonEmptyMap($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrUuid($value, $message = '') + { + null === $value || static::uuid($value, $message); + } + + /** + * @psalm-pure + * + * @param iterable<string> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allUuid($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + static::uuid($entry, $message); + } + } + + /** + * @psalm-pure + * + * @param iterable<string|null> $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrUuid($value, $message = '') + { + static::isIterable($value); + + foreach ($value as $entry) { + null === $entry || static::uuid($entry, $message); + } + } + + /** + * @psalm-param class-string<Throwable> $class + * + * @param Closure|null $expression + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrThrows($expression, $class = 'Exception', $message = '') + { + null === $expression || static::throws($expression, $class, $message); + } + + /** + * @psalm-param class-string<Throwable> $class + * + * @param iterable<Closure> $expression + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allThrows($expression, $class = 'Exception', $message = '') + { + static::isIterable($expression); + + foreach ($expression as $entry) { + static::throws($entry, $class, $message); + } + } + + /** + * @psalm-param class-string<Throwable> $class + * + * @param iterable<Closure|null> $expression + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNullOrThrows($expression, $class = 'Exception', $message = '') + { + static::isIterable($expression); + + foreach ($expression as $entry) { + null === $entry || static::throws($entry, $class, $message); + } + } +}